๐Ÿ’ป Dev

๐Ÿณ ์ด์ œ๋Š” docker๋ฅผ ํ•ด์•ผํ•  ๋•Œ..

์ด์œ  YIYU 2024. 4. 22. 09:48
ํšŒ์‚ฌ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” 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

reference

Containerised Bioinformatics