이제는 docker를 해야할 때..
🐳

이제는 docker를 해야할 때..

Tags
Docker
DEV
Published
January 25, 2023
Author
유레미 EUREMI
회사에서 자주 사용하는 module은 ubuntu의 특정 버전에서만 사용할 수 있습니다. 현재 사용하고 있는 ubuntu 버전과 맞지 않고 업그레이드도 불가능한 상황이라 도커를 사용하여 ubuntu 20.04 컨테이너를 만들게 되었고 배우게 된 내용을 공유하고자 합니다.
 

도커란?

컨테이너 기반의 오픈소스 가상화 플랫폼이다. 컨테이너란 배에 실는 네모난 화물 수송용 박스를 생각할 수 있는데 각각의 컨테이너마다 옷, 신발, 전자제품 등 다양한 화물을 넣을 수 있고 다양한 운동수단으로 쉽게 옮길 수 있다.
서버에서 이야기하는 컨테이너도 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다!
 

도커가 있기 전 기존의 방식

주로 가상화를 하였다. VMware나 virtualbox같은 호스트 OS 위에 게스트 OS 전체를 가상화한다. 사용법은 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었다. 도커는 프로세스를 격리하는 방식으로 동작한다. CPU나 메모리는 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없다.
notion image
 

이미지

도커에서 이미지란 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 레시피와 비슷하다. 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] 도커파일경로
notion image
 

도커 ubuntu 20.04 내려받기

도커 이미지는 docker hub에 존재하고 그 중에서 원하는 이미지를 pull받을 수 있다.
notion image
도커 우분투 official 이미지 버전으로 pull 받을 수 있다.
docker pull ubuntu:20.04
notion image
이렇게 받은 이미지들은 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