Objectives
-
What are Containers?
-
What is Docker?
-
Why do you need it?
-
What can it do?
-
Run Docker Containers
-
Create Docket Image
-
Networks in Docker
-
Docker Compose
-
Docker Concepts in Depth
-
Docker for Windows/Mac
-
Docker Swarm
-
Docker vs Kubernetes
Docker Overview
Why do you need Docker?
- Compatibility/Dependency
- ์ฌ๋ฌ ๊ธฐ์ ์คํ์ ์ฌ์ฉํ ๋ (e.g. Node.js, MongoDB, Redis, Ansible)
- ์ด์ ์ฒด์ ์์ ํธํ์ฑ ๋ฌธ์ + ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ ๋ฌธ์
- ์ด๋ค ์๋น์ค๋ A ๋ฒ์ , ๋ค๋ฅธ ์๋น์ค๋ B ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ด ํ์ํจ
- ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ธธ ๋ ๋ง๋ค ์ปดํฌ๋ํธ์ ์ธํ๋ผ ๊ฐ์ ํธํ์ฑ์ ํ์ธํด์ผ ํจ..
- ์ด๋ฐ ํธํ์ฑ ๋งคํธ๋ฆญ์ค ๋ฌธ์ ๋ฅผ The Matrix from Hell ์ด๋ผ๊ณ ๋ ๋ถ๋ฆ
- Long setup time
- ์๋ก์ด ๊ฐ๋ฐ์ ํฉ๋ฅ ์ ์๋ก์ด ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ์ด ์ฝ์ง ์์
- Different Dev/Test/Prod environments
What can it do?
- ์ด๋ฐ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค ์ ์๊ณ , ์ปดํฌ๋ํธ๋ฅผ ์์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ฉด์๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ์ด์ ์ฒด์ ๋ฅผ ์์ ํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก Docker
- Docker ๊ฐ ์์ผ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ์คํํ ๋ ๊ฐ์์ ์์กด์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ถ ๋ถ๋ฆฌ๋ ์ปจํ ์ด๋๋ฅผ ํ์ฉํด ๊ฐ์ ๊ฐ์ ๋จธ์ ๊ณผ ์ด์ ์ฒด์ ์์ ํ๊ฒฝ๊ณผ ์ปจํ ์ด๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์์
What are Containers?
- ์ปจํ ์ด๋๋ ์์ ํ ๋ถ๋ฆฌ๋ ํ๊ฒฝ์ผ๋ก ๊ฐ์์ ํ๋ก์ธ์ค, ์๋น์ค ๊ทธ๋ฆฌ๊ณ ๋คํธ์ํฌ ์ธํฐํ์ด์ค, ๋ง์ดํธ๋ฅผ ๊ฐ์ ๋จธ์ ์ฒ๋ผ ๊ฐ์ง๊ณ ์์ง๋ง ์ด์ ์ฒด์ ์ปค๋์ ๋์ผํจ
- ์ปจํ
์ด๋๋ ์ ์๋ ์๋ ๊ฐ๋
(e.g. LXC, LXD, LXCFS ๋ฑ)
- Docker ๋ ๊ทธ ์ค LXC ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํจ
- ์ปจํ ์ด๋ ํ๊ฒฝ์ ์ ์์ค์ด๋ผ ์ค์ ์ด ์ด๋ ต์ง๋ง Docker ์์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ฑ์ ๊ณ ์์คํด์ด ์์ผ๋ฉด ์ฝ๊ฒ ์์ ํ ์ ์์
Operating System
- Ubuntu, Fedora, SUSE, CentOS ์ ๊ฐ์ ์ด์ ์ฒด์ ๋ ์ด์ ์ฒด์ ์ปค๋๊ณผ ์ํํธ์จ์ด๋ก ๊ตฌ์ฑ๋จ
- ์ด์ ์ฒด์ ์ปค๋์ ๊ธฐ๋ฐ ํ๋์จ์ด์ ์ํธ ์์ฉํ๋ ์ญํ ์ ํจ
- Linux ์ธ ์ด์ ์ฒด์ ์ปค๋์ ๊ทธ๋๋ก์ง๋ง ์ํํธ์จ์ด ๋๋ฌธ์ ์ด์ ์ฒด์ ์ ์ฐจ์ด๊ฐ ๋ฐ์
- ์ด ์ํํธ์จ์ด์๋ ๋ค์ํ UI์ ๋๋ผ์ด๋ฒ, ์ปดํ์ผ๋ฌ, ํ์ผ ๊ด๋ฆฌ์, ๊ฐ๋ฐ์ ํด ๋ฑ์ด ์์
- ์ฆ, ๋ชจ๋ ์ด์ ์ฒด์ ์๋ ๋์ผํ Linux ์ปค๋์ด ์์ง๋ง, ์ผ๋ถ ์ปค์คํ ์ํํธ์จ์ด ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ์ด์ ์ฒด์ ๊ฐ ๋๋ ๊ฒ
Sharing the kernel?
- Docker ๊ฐ ์ค์น๋ Ubuntu ์ด์ ์ฒด์ ๊ฐ ์์ผ๋ฉด
- Docker ๋ ๊ฐ์ ์ปค๋์ ๊ธฐ์ดํ๊ธฐ๋ง ํ๋ฉด ์ด๋ค ์ด์ ์ฒด์ ๋ผ๋ ์คํํ ์ ์์
- ์ด ๊ฒฝ์ฐ Linux ์ปค๋์ด ๋๊ณ ๊ธฐ๋ฐ ์ด์ ์ฒด์ ๊ฐ Ubuntu ๋ผ๋ฉด
- Docker ๋ Debian, Fedora, SUSE, CentOS ๋ฑ์ OS์ ๊ธฐ๋ฐํ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์์
- Docker ๋ ๋ชจ๋ ์ด์ ์ฒด์ ์ ํธํ๋๋ Docker ํธ์คํธ์ ๊ธฐ๋ฐ ์ปค๋์ ํ์ฉํ๋ ๊ฒ
- Windows ๊ฐ์ ๊ฒฝ์ฐ ์ด์ ๊ฐ์ ์ปค๋์ ๊ณต์ ํ์ง ์์
- ์ฆ, Linux ๊ฐ ์ค์น๋ Docker ํธ์คํธ์์๋ Windows ๊ธฐ๋ฐ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์์
- ๋ฐ๋ผ์ Windows ์๋ฒ์ Docker ๋ฅผ ์ค์นํด์ผ ํจ
- Windows ์ Docker ๋ฅผ ์ค์นํ๊ณ Linux ๊ธฐ๋ฐ ์ปจํ
์ด๋๋ฅผ ์คํํ ์ ์์ง ์์?
- Windows ์์ Linux ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋๋ผ ๋ด๋ถ์ ์ผ๋ก Linux ๊ฐ์ ๋จธ์ ์์ Linux ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒ
- ์ฆ, Windows ์์ Linux ๊ฐ์ ๋จธ์ ์์ Linux ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒ
- ๋ค๋ฅธ ์ปค๋์ ์คํํ ์ ์์ผ๋ฉด ๋ญ๊ฐ ์ข๋?
- ํ์ดํผ๋ฐ์ด์ ์ ๋ฌ๋ฆฌ Docker ๋ ๊ฐ์ ํ๋์จ์ด ์์์ ๋ค๋ฅธ ์ด์ ์ฒด์ ๋ฅผ ๊ฐ์ํํ๋ ๊ฒ์ด ์๋๋ผ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํจํค์งํํ๊ณ ์ปจํ ์ด๋ํํด์ ์ํ๋ ๋งํผ ์คํํ ์ ์๋๋ก ๋ฐฐํฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ
Conatianers vs Virtual Machines
- ๊ฐ์ ๋จธ์ ์ ๊ฒฝ์ฐ ๊ฐ ๊ฐ์ ๋จธ์ ์ ๊ฐ์์ ์ด์ ์ฒด์ ์ ์์กด์ฑ, ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์น๋จ
- ์ด๋ฌํ ์์ธต ๊ตฌ์กฐ๋ ๊ธฐ๋ฐ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋๋ฐ ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด์ ์ฒด์ ์ ์ปค๋์ด ์คํ๋๊ธฐ ๋๋ฌธ
- ๋ํ ๊ฐ์ ๋จธ์ ์ ๋ฌด๊ฑฐ์์ ์ฉ๋์ ๋ง์ด ์ฐจ์งํ๊ณ ์ฃผ๋ก ๊ทธ ๋จ์๊ฐ GB์ ๋ฌํ๋๋ฐ Docker ์ปจํ ์ด๋๋ ๊ฐ๋ณ๊ณ MB ๋จ์์ ์ฉ๋๋ง์ ์ฐจ์งํ๋ฏ๋ก ๋ช ์ด ๋ง์ Docker ์ปจํ ์ด๋๋ฅผ ๋ถํธํ ์ ์๋๋ฐ ๊ฐ์ ๋จธ์ ์ ์ด์ ์ฒด์ ์ ์ฒด๋ฅผ ๋ถํธํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆผ
- ๋ ํ๊ฐ์ง ์ค์ํ ์ ์ Docker ๊ฐ ์์ ํ ๋ถ๋ฆฌ๋์ง ๋ชปํ๋ค๋ ์ . ์ด๋ ์ปจํ ์ด๋ ๊ฐ ๊ณต์ ํ๋ ์ปค๋๊ณผ ๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ง๊ธฐ ๋๋ฌธ
- ๋ฐ๋๋ก ๊ฐ์ ๋จธ์ ์ ๊ธฐ๋ฐ ์ด์ ์ฒด์ ๋ ์ปค๋์ ์์กดํ์ง ์์ ์์ ํ ๋ถ๋ฆฌ๋์ด ์๋ก ๋ค๋ฅธ ์ด์ ์ฒด์ ์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์์
- ์ฆ, ๊ฐ์ ํ์ดํผ๋ฐ์ด์ ์์ Linux ๋๋ Windows ๊ธฐ๋ฐ ์ฑ์ ์คํํ ์ ์์
- ์ปจํ ์ด๋ ๋๋ ๊ฐ์ ๋จธ์ ๋ง์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๋ป์ด ์๋๋๋ค ์ปจํ ์ด๋์ ๊ฐ์ ๋จธ์ ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค
- ์์ฒ ๊ฐ์ Docker ํธ์คํธ์์ ์์ฒ ๊ฐ์ง์ ์ฑ์ ์คํํ๊ณ ์ ํ ๋๋ ๋๊ฐ ๊ฐ์ Docker ํธ์คํธ์ ๊ธฐ๋ฐํด ์ปจํ ์ด๋๋ค์ด ๊ตฌ์ฑํ์ฌ ๋ ๊ฐ์ง ๊ธฐ๋ฒ์ ๋ชจ๋ ํ์ฉํ ์ ์์ต๋๋ค
- ์ฆ, ๊ฐ์ํ์ ์ด์ ์ ์ด๋ ค ํ์ํ ๋๋ง๋ค Docker ํธ์คํธ๋ฅผ ํ๋ก๋น์ ๋ํ ์ ์๊ณ ํํธ์ผ๋ก๋ Docker์ ์ด์ ์ ์ด๋ ค ํ์์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก๋น์ ๋ํ๊ณ ํ์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค
- ํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ ๊ทธ ์ ๋๋ก ๋ง์ ๊ฐ์ ๋จธ์ ์ด ํ์ํ์ง ์์ต๋๋ค
- ์ฌ๊ธฐ๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋น ๊ฐ์ ๋จธ์ ์ ํ๋ก๋น์ ๋ํ ๊ฒฝ์ฐ์ด๊ณ ๋์ ์์ฒ ๊ฐ์ ์ปจํ ์ด๋์ ๊ฐ์ ๋จธ์ ์ ์๋ฐฑ ๊ฐ ํ๋ก๋น์ ๋ํ ์๋ ์๊ฒ ์ฃ
How is it done?
- ๋ง์ ๊ธฐ๊ด์์ ์๊ธฐ ์ ํ์ ์ปจํ ์ด๋ํํด์ Docker Hub ๋๋ Docker Store ๋ผ๋ ํผ๋ธ๋ฆญ Docker ๋ณด๊ด์์ ๊ณต๊ฐํจ
- ์ด๊ณณ์์ ์ด์ ์ฒด์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์๋น์ค, ํด ๋ฑ์ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์ ์๊ณ ํธ์คํธ์ Docker ๋ฅผ ์ค์นํ ๋ค docker run ๋ช ๋ น์ด์ ์ด๋ฏธ์ง ์ด๋ฆ๋ง ๋ถ์ด๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์คํํ ์ ์์
Container vs Image
- ์ด๋ฏธ์ง๋ VM ํ ํ๋ฆฟ๊ณผ ๊ฐ์ ํจํค์ง ๋๋ ํ ํ๋ฆฟ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ
- ์ปจํ ์ด๋๋ ์๋ก ๋ถ๋ฆฌ๋ ์ด๋ฏธ์ง ์ธ์คํด์ค๊ฐ ์คํ๋๋ ๊ณณ์ผ๋ก ๊ฐ์์ ํ๊ฒฝ๊ณผ ํ๋ก์ธ์ค๋ค์ ์ง๋๊ณ ์์
- ์ด๋ฏธ ๋์ปคํ๋ ์ ํ์ ์ด๋ฏธ์ง๊ฐ ๋ง๊ณ ๋ง์ฝ ์ฐพ๋ ์ด๋ฏธ์ง๊ฐ ์๋ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ๊ณต์ ํ ์ ์์
Docker in DevOps
- Docker ์ด์ ์ ๊ฐ๋ฐํ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์ด์ํ์๊ฒ ์ง์์ฌํญ์ ์ ๋ฌํ์ฌ ํธ์คํธ ์ค์ ๊ณผ ํ์ ์ค์น ์ฌํญ ๊ทธ๋ฆฌ๊ณ ์์กด์ฑ ๊ตฌ์ฑ๋ฑ์ ์๋ ค์คฌ์
- Docker ์ดํ์ ๊ฐ๋ฐํ๊ณผ ์ด์ํ์ด ํจ๊ป ์ด๋ฐ ์ง์นจ๋ค์ Docker ํ์ผ๋ก ๊ด๋ฆฌํ ์ ์์
- Docker ํ์ผ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ด Docker ๊ฐ ์ค์น๋ ํธ์คํธ๋ผ๋ฉด ์ด๋์๋ ์คํํ ์ ์๊ณ ์ด๋ค ํ๊ฒฝ์์๋ ๋๊ฐ์ด ์๋ํจ
- ์ด์ํ์ ์ด๋ฏธ์ง๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ๋ง ํ๋ฉด ๋๋ ๊ฒ
Docker on Mac
Docker Toolbox
- Mac ์์ Docker ๋ฅผ ์ฐ๋ ค๋ฉด ์๋ ์ด๊ฒ ํ์ํ์
- Mac ์ VirtualBox ๋ก ๋ง๋ค์ด์ง Linux VM ์ Docker
- Mac OS ์์ Linux Container ๋ฅผ ์คํ์ํฌ ๋ฟ
- Docker Toolbox ์๋ Oracle VirtualBox, Docker Engine, Docker Machine, Docker Compose, Kitematic ์ด ํฌํจ๋จ
- Docker Toolbox ์คํ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ ์ค์นํ๋ฉด VirtualBox ๊ฐ ์ค์น๋๊ณ ๋ด๋ถ์์ Docker ๋ฅผ ์คํํ๋ Boot to Docker ๋ผ๋ ๊ฒฝ๋ํ๋ VM ์ ๋ฐฐํฌํจ
Docker Desktop for Mac
- Oracle VirtualBox ๋์ HyperKit ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํจ