What am I containerizing?
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ค๋ ์ปดํฌ๋ํธ ๋๋ ์๋น์ค๋ฅผ Docker Hub ์์ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ํน์ ๊ฐ๋ฐ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ Dockerize ํด์ ๋ฐฐํฌ๊ฐ ์ฝ๋๋ก ๋ง๋ค๊ธฐ ์ํด Docker Image ๋ฅผ ์ฌ์ฉํจ
How to create my own image?
- Flask ๋ฅผ ์ด์ฉํ ๋จ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ธ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์ ๋ ์๋์ผ๋ก ์ค์ ํด์ผ ํ๋ค๋ฉด ์๋์ ๊ฐ์ ์์
์ ์ํํด์ผ ํจ
- Ubuntu ๊ฐ์ ์ด์์ฒด์
- apt ๋ช ๋ น์ด๋ก ์์ค ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธ
- ์์กด์ฑ์ ์ค์น
- pip ๋ช ๋ น์ด๋ก Python ์์กด์ฑ์ ์ค์น
- ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํด ๋ฃ์ ๋ค flask ๋ช ๋ น์ด๋ก ์น ์๋ฒ๋ฅผ ๊ฐ๋
Dockerfile
์ด๋ผ๋ ํ์ผ ์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ์
FROM Ubuntu
RUN apt-get update && apt-get -y install python
RUN pip install flask flask-mysql
COPY . /opt/source-code
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
- ์ด์ด์
docker build
๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถํ๊ณ ์ด๋ฏธ์ง์ ํ๊ทธ ์ด๋ฆ๊ณผ ํจ๊ปDockerfile
์ ์ ๋ ฅ๊ฐ์ผ๋ก ์ง์ , ์ด๋ฌ๋ฉด ๋ก์ปฌ์ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋จdocker build . -f Dockerfile -t mmumshad/my-custom-app
- ํผ๋ธ๋ฆญ Docker Hub Registry ์์ ์ด์ฉํ ์ ์๋๋ก ํ๋ ค๋ฉด
docker push
๋ช ๋ น์ด๋ฅผ ์คํ, ์ด๋ฌ๋ฉด ๊ณ์ ์ด๋ฆ์ด ์ด๋ฏธ์ง ์ด๋ฆ์ด ๋จdocker push mmumshad/my-custom-app
Dockerfile
FROM Ubuntu
RUN apt-get update && apt-get -y install python
RUN pip install flask flask-mysql
COPY . /opt/source-code
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
Dockerfile
์ Docker ๊ฐ ์ธ์ํ๋๋ก ํน์ ํ์์ผ๋ก ์์ฑ๋ ํ ์คํธ ํ์ผINSTRUCTION
๊ณผARGUMENT
ํ์์ผ๋ก ์ด๋ฃจ์ด์งFROM Ubuntu
- ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ์ด์์ฒด์ ๋ฅผ ์ ์
- ๋ชจ๋ Docker Image ๋ ์ด์์ฒด์ ํน์ ์ฌ์ ์ ์ด์์ฒด์ ์ ๊ธฐ๋ฐํด ์์ฑํ ์ด๋ฏธ์ง๊ณผ ๊ฐ์ ๋ ๋ค๋ฅธ ์ด๋ฏธ์ง์ ๊ธฐ๋ฐ์ ๋
RUN apt-get update && apt-get -y install python
RUN
๋ช ๋ น์ด๋ Docker ๊ฐ ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ํน์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋๋ก ํจ
COPY . /opt/source-code
COPY
๋ ๋ก์ปฌ ์์คํ ์ ํ์ผ์ ๋ณต์ฌํด Docker Image ์ ๋ฃ์. /opt/source-code
ํ์ฌ ํด๋์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ฝ๋๋ฅผ/opt/source-code
์ ๋ถ์ฌ๋ฃ๋๋ค๋ ์๋ฏธ
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
ENTRYPOINT
๋ช ๋ น์ด๋ ์ด๋ฏธ์ง๊ฐ ์ปจํ ์ด๋๋ก ์คํ๋ ๋ ์๋ํ ๋ช ๋ น์ด๋ฅผ ์ง์
Layered Architecture
- Docker ๋ ๊ณ์ธตํ ์ํคํ ์ฒ๋ก ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถ
- ๋ช
๋ น์ด ๊ฐ ์ค์ด ์ด์ ๊ณ์ธต์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก Docker Image ์ ์๋ก์ด ๊ณ์ธต์ ์์ฑํจ
- ๊ณ์ธต๋ง๋ค ์ด์ ๊ณ์ธต์ ๋ณ๊ฒฝ ์ฌํญ๋ง์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ์์๋ ์ด๋ฅผ ํ์ธํ ์ ์์
docker history mmumshad/simple-webapp
์ ์คํํ๋ฉด ํ์ธ ๊ฐ๋ฅ
Docker build output
docker build .
์คํ ์ ์ฌ๋ฌ ๋จ๊ณ์ ์์ ๋ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์- ๋ชจ๋ ๊ณ์ธต์ ์บ์์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์คํจํ๋๋ผ๋ ํด๋น ๋จ๊ณ์์
docker build
๋ฅผ ์ฌ์คํ ๊ฐ๋ฅ - ๋ํ ๋น๋ ํ๋ก์ธ์ค์ ์๋ก์ด ๋จ๊ณ๋ฅผ ์ถ๊ฐํด๋ ์ฒ์๋ถํฐ ๋ค์ ๋น๋ํ ํ์๊ฐ ์์
- ํนํ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ฝ๋ ์ ๋ฐ์ดํธ๋ ๋น๋ฒํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์ฌ๋น๋๊ฐ ๊ฐ๋ฅ
Demo
docker run -it ubuntu bash
apt-get update
apt-get install -y python
apt-get install python-pip
pip install flask
# Copy code to /opt/app.py
FLASK_APP=/opt/app.py flask run --host=0.0.0.0
- Dockerfile ์์ด ์๋์ผ๋ก ์คํ ํ ๊ฒฝ์ฐ
FROM ubuntu
RUN apt-get update
RUN apt-get install -y python
RUN apt-get install python-pip
COPY app.py /opt/app.py
ENTRYPOINT FLASK_APP=/opt/app.py flask run --host=0.0.0.0
- ์์ ๊ฐ์ Dockerfile ์ ๋ง๋ค๊ณ
docker build . -t my-simple-webapp
๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง ์์ฑ - ์ด๋ฏธ์ง ์์ฑ ํ
docker images
๋ช ๋ น์ด ์ฌ์ฉ ์my-simple-webapp
์ด๋ฏธ์ง๊ฐ ์์ฑ๋์ด์์ docker run my-simple-webapp
์คํ ์ ์ฒ์ ์๋ ์คํ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ
Environment Variables
docker run -e APP_COLOR=blue simple-webapp-color
-e
์ต์ ์ ํตํด ์ปจํ ์ด๋ ๋ด์ ํ๊ฒฝ๋ณ์ ์ค์ ๊ฐ๋ฅ
docker inspect blissful_hopper
docker inspect
๋ฅผ ํตํด ์ด๋ฏธ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฐพ์ ์ ์์"Config"
์น์ ์์ ํด๋น ์ปจํ ์ด๋๊ฐ ๊ฐ์ง ํ๊ฒฝ๋ณ์ ํ์ธ ๊ฐ๋ฅ
CMD vs ENTRYPOINT
CMD
๋ ํด๋น ์ด๋ฏธ์ง๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ ๋ช ๋ น์ด- ubuntu ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ
CMD ["bash"]
- ubuntu ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ
FROM Ubuntu
CMD sleep 5
- ์
Dockerfile
๋กdocker build . -t ubuntu-sleeper
docker run ubuntu-sleeper sleep 10
์คํ ์ CMD ๊ฐsleep 10
์ผ๋ก ๋ฎ์ด์์์ง
FROM Ubuntu
ENTRYPOINT ["sleep"]
ENTRYPOINT
์ฌ์ฉ ์docker run ubuntu-sleeper 10
๋ก ์ธ์๋ฅผ ์ ๋ฌํ ์ ์์
์ฆ, CMD ์ ๊ฒฝ์ฐ ๋ช ๋ น์ค ๋งค๊ฐ๋ณ์๊ฐ ์์ ํ ๋์ฒด๋๋ ๋ฐ๋ฉด, ENTRYPOINT ์ ๊ฒฝ์ฐ ๋ช ๋ น์ค ๋งค๊ฐ๋ณ์๊ฐ ์ถ๊ฐ๋จ
FROM Ubuntu
ENTRYPOINT ["sleep"]
CMD ["5"]
Dockerfile
์ ์์ ๊ฐ์ด ์ค์ ํ ๊ฒฝ์ฐ (JSON ํฌ๋งท์ผ๋ก ์ค์ ํด์ผ ๋จ)docker run ubuntu-sleeper
์คํ ์sleep 5
๊ฐ ์คํ๋จdocker run ubuntu-sleeper 10
์คํ ์sleep 10
๊ฐ ์คํ๋จdocker run --entrypoint sleep2.0 ubuntu-sleeper 10
์คํ ์sleep2.0 10
๊ฐ ์คํ๋จ