๐ณ ์ด์ ๋ docker๋ฅผ ํด์ผํ ๋..
ํ์ฌ์์ ์์ฃผ ์ฌ์ฉํ๋ module์ ubuntu์ ํน์ ๋ฒ์ ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ ubuntu ๋ฒ์ ๊ณผ ๋ง์ง ์๊ณ ์ ๊ทธ๋ ์ด๋๋ ๋ถ๊ฐ๋ฅํ ์ํฉ์ด๋ผ ๋์ปค๋ฅผ ์ฌ์ฉํ์ฌ ubuntu 20.04 ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ฒ ๋์๊ณ ๋ฐฐ์ฐ๊ฒ ๋ ๋ด์ฉ์ ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
๋์ปค๋?
์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ์ด๋ค. ์ปจํ ์ด๋๋ ๋ฐฐ์ ์ค๋ ๋ค๋ชจ๋ ํ๋ฌผ ์์ก์ฉ ๋ฐ์ค๋ฅผ ์๊ฐํ ์ ์๋๋ฐ ๊ฐ๊ฐ์ ์ปจํ ์ด๋๋ง๋ค ์ท, ์ ๋ฐ, ์ ์์ ํ ๋ฑ ๋ค์ํ ํ๋ฌผ์ ๋ฃ์ ์ ์๊ณ ๋ค์ํ ์ด๋์๋จ์ผ๋ก ์ฝ๊ฒ ์ฎ๊ธธ ์ ์๋ค.
์๋ฒ์์ ์ด์ผ๊ธฐํ๋ ์ปจํ ์ด๋๋ ๋ค์ํ ํ๋ก๊ทธ๋จ, ์คํํ๊ฒฝ์ ์ปจํ ์ด๋๋ก ์ถ์ํํ๊ณ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋จ์ํ๊ฒ ํด์ค๋ค!
๋์ปค๊ฐ ์๊ธฐ ์ ๊ธฐ์กด์ ๋ฐฉ์
์ฃผ๋ก ๊ฐ์ํ๋ฅผ ํ์๋ค. VMware๋ virtualbox๊ฐ์ ํธ์คํธ OS ์์ ๊ฒ์คํธ OS ์ ์ฒด๋ฅผ ๊ฐ์ํํ๋ค. ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ์ง๋ง ๋ฌด๊ฒ๊ณ ๋๋ ค์ ์ด์ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์๋ค. ๋์ปค๋ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋งํผ๋ง ์ถ๊ฐ๋ก ์ฌ์ฉํ๊ณ ์ฑ๋ฅ์ ์ผ๋ก๋ ๊ฑฐ์ ์์ค์ด ์๋ค.
์ด๋ฏธ์ง
๋์ปค์์ ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ ๋ฑ์ ํฌํจํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ ์ํผ์ ๋น์ทํ๋ค. python ๊ฐ์ํ๊ฒฝ์ผ๋ก ๋ฐ์ง๋ฉด requirements์ ๋น์ทํ ์๋ฏธ์ผ๊น? docker hub์์ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ buildํ ์ ์๊ณ ๋ด๋ถ ํ๊ฒฝ์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์๋ ์๋ค.
Dockerfile์ ์ด์ฉํด ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ์ ๋๋ค.
# Dockerfile
# FROM: ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ง์ (์ฌ๊ธฐ์๋ ubuntu 16.04 ๋ฒ์ ์ฌ์ฉ)
FROM ubuntu:16.04
# MAINTAINER: ๊ฐ๋ฐ์ ์ ๋ณด๋ฅผ ๋ํ๋
๋๋ค.
MAINTAINER "youremail@domain.com"
# RUN : ํด๋น ๋ช
๋ น์ด ์คํ, ํ์ํ ํจํค์ง๋ฅผ ์ค์น
RUN apt-get update -y && \\
apt-get install -y python-pip python-dev
# COPY: ํ์ฌ ๊ฒฝ๋ก(.)์ ์กด์ฌํ๋ ํ์ผ๋ค์ ์ด๋ฏธ์ง /app ๊ฒฝ๋ก์ ๋ชจ๋ ์ถ๊ฐ
COPY . /app
# WORKDIR: ์์
๋๋ ํ ๋ฆฌ ๋ณ๊ฒฝ. ์
ธ cd /app ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ
WORKDIR /app
# RUN: ๋ช
๋ น์ด ์คํ. ๋ณต์ฌ๋ requirements.txt ํ์ผ๋ก pip๋ก ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
RUN pip install -r requirements.txt
# EXPOSE: ์ปจํ
์ด๋ ์คํ ์ ๋
ธ์ถ๋ ํฌํธ
EXPOSE 5000
# ENTRYPOINT: ์ปจํ
์ด๋ ์์ ์ ๊ธฐ๋ณธ์ผ๋ก ์คํ๋๋ ๋ช
๋ น์ด
ENTRYPOINT [ "python" ]
# CMD: ์ปจํ
์ด๋ ์์ ์ ์คํ๋๋ ๋ช
๋ น์ด๋ก ์ ENTRYPOINT ๋ช
๋ น์ด ๋ค ์ธ์๋ก ์คํํ๊ฒ ๋๋ค.
# ๊ฒฐ๊ตญ python app.py ๋ช
๋ น์ด ์คํ
CMD [ "app.py" ]
๋์ปค ํ์ผ ๋น๋ํ๊ธฐ
docker build [OPTIONS] ๋์ปคํ์ผ๊ฒฝ๋ก
๋์ปค ubuntu 20.04 ๋ด๋ ค๋ฐ๊ธฐ
๋์ปค ์ด๋ฏธ์ง๋ docker hub์ ์กด์ฌํ๊ณ ๊ทธ ์ค์์ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ pull๋ฐ์ ์ ์๋ค.
๋์ปค ์ฐ๋ถํฌ official ์ด๋ฏธ์ง ๋ฒ์ ์ผ๋ก pull ๋ฐ์ ์ ์๋ค.
docker pull ubuntu:20.04
์ด๋ ๊ฒ ๋ฐ์ ์ด๋ฏธ์ง๋ค์ docker images ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
(base) ubuntu@nipa2022-64833:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pytorch-1.9.0 latest b73339fe9000 3 weeks ago 7.47GB
<none> <none> ab8b39ba3347 4 weeks ago 2.93GB
ubuntu 20.04 d5447fc01ae6 5 weeks ago 72.8MB
ubuntu 18.04 251b86c83674 5 weeks ago 63.1MB
nvidia/cuda 9.0-cudnn7-devel-ubuntu16.04 b13c2165c94f 12 months ago 2.45GB
๋์ปค ์ปจํ ์ด๋ ์คํํ๊ธฐ
์ด๋ฏธ์ง๋ฅผ ๋ฐํ์ผ๋ก docker container๋ฅผ ์คํํ ์ ์๋ค. nipa ์๋ฒ ์์ ubuntu20.04 ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด์ container ํ๋๋ฅผ ๋ง๋ค์๋ค!
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# ubuntu 20.04๋ฅผ ์คํํ๊ธฐ ์ํ ์์
docker run --rm -it ubuntu:20.04 /bin/bash
# docker ์ปจํ
์ด๋ ์คํ๋๋์ง ํ์ธ
(base) ubuntu@nipa2022-64833:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
830f7ed5bd2a ubuntu:20.04 "/bin/bash" 13 days ago Up 13 days waldy-ubuntu20.04
๋์ปค ์ปจํ ์ด๋ ์ค์ง, ์ ๊ฑฐ
๋์ปค ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ์ค์งํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค. ์ปจํ ์ด๋๋ฅผ ์ค์งํ๋ฉด ๋ค์ ์์ํ ์ ์์ง๋ง ์ ๊ฑฐํ๋ค๋ฉด ์ปจํ ์ด๋๋ฅผ ๋ค์ ํ๋ ์๋ก ๋ง๋ค์ด์ผํ๋ค. ๋ง์ฝ ์ปจํ ์ด๋ ๋ด ํ๊ฒฝ์ด ๊ผฌ์๋ค๋ฉด ์ ๊ฑฐํ๊ณ ์๋กญ๊ฒ ์ปจํ ์ด๋๋ฅผ ์คํํ ๊ฒ!
# ์ปจํ
์ด๋ ์ค์ง
docker stop [OPTIONS] CONTAINER [CONTAINER...]
# ์์
docker stop ${CONTAINER_ID}
# ์ปจํ
์ด๋ ์ ๊ฑฐ
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# ์ด๋ฏธ์ง ๋ชฉ๋ก ํ์ธํ๊ธฐ
docker iamges
(base) ubuntu@nipa2022-64833:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pytorch-1.9.0 latest b73339fe9000 3 weeks ago 7.47GB
<none> <none> ab8b39ba3347 4 weeks ago 2.93GB
ubuntu 20.04 d5447fc01ae6 5 weeks ago 72.8MB
ubuntu 18.04 251b86c83674 5 weeks ago 63.1MB
nvidia/cuda 9.0-cudnn7-devel-ubuntu16.04 b13c2165c94f 12 months ago 2.45GB
๋์ปค ์ปดํฌ์ฆ
์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์คํํด์ผ ํ ๋๋ ๋์ปค ์คํ ์ ์ค์ ์ด ๋ง์์ง๋ฉด ์ฌ์ฉํ ๋ ๋ณต์กํด์ง๋ค. ์๋ฅผ ๋ค์ด, mysql ์ปจํ ์ด๋์ wordpress ์ปจํ ์ด๋๋ฅผ ์คํํ ๊ฒฝ์ฐ..์๋์ฒ๋ผ ๋ ์ ๋ ฅํด์ค์ผ ํ๋ค. ๊ทธ๋์ docker-compose.yaml ํ์ผ์ ์ฌ์ฉํ๋๋ฐ ๋ฅ๋ฌ๋ ๋ชจ๋ธ๋ก ์ดํดํ์ ๋ config ํ์ผ๊ณผ ๋น์ทํ ์ญํ ์ ํ๋ค.
# 1. mysql ์ปจํ
์ด๋ ์คํ
$ docker run -d \\
--name wordpressdb \\
-e MYSQL_ROOT_PASSWORD=password \\
-e MYSQL_DATABASE=wordpress \\
-v /my_db:/var/lib/mysql \\
mysql:5.7
# 2. wordpress ์ปจํ
์ด๋ ์คํ
$ docker run -d \\
-e WORDPRESS_DB_PASSWORD=password \\
--name wordpress \\
--link wordpressdb:mysql \\
-p 80 \\
wordpress
์์ ๋ช ๋ น์ด๋ฅผ docker-compose.yamlํ์ผ๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ๋ค.
version: '3'
services:
wordpress:
depends_on:
- db
image: wordpress
restart: always
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
** restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
docker compose ํ์ผ์ ์คํํ๊ธฐ ์ํด์ docker composer๋ฅผ ์ค์นํ ๋ค docker-compose up ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
# 1. docker compose ๋ค์ด
$ sudo curl -L "<https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2. ์คํ ๊ฐ๋ฅ ๊ถํ ์ ์ฉ
$ sudo chmod +x /usr/local/bin/docker-compose
# 3. ์ค์น๋์๋์ง ํ
์คํธ
$ docker-compose --version
# ์คํ
docker-compose up