0과 1을 공부하다.

[Docker] Docker 맛보기 - Dockerfile/Docker-Compose (3) 본문

Study/Server

[Docker] Docker 맛보기 - Dockerfile/Docker-Compose (3)

Developer_Jay 2024. 4. 12. 22:59
728x90

 

[Docker] Docker 맛보기 - 특징과 설치 (1)

간단 설명 도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. 1. 용어 container 격리된 공간에서 프로세스가 동작

blog.greatpark.co.kr

 

[Docker] Docker 맛보기 - 컨테이너 실행/중단 (2)

Docker image pull 시스템 이미지 목록 $ docker image ls Official Image $ docker pull [image_name] # ex. rockylinux 8 pull $ docker pull rockylinux:8 User Image $ docker pull [user_name]/[repository_name]:[tagname] 이미지 삭제 $ docker rmi 이

blog.greatpark.co.kr

 

[Docker] Docker 맛보기 - Dockerfile/Docker-Compose (3)

Dockerfile을 이용한 이미지 빌드 도커파일을 생성할 디렉터리 생성 및 이동 $ mkdir img_build && cd img_build Dockerfile 생성 및 작성 $ vi Dockerfile Dockerfile option FROM 베이스 이미지 RUN 새로운 레이어에서 명령

blog.greatpark.co.kr

 

 

본 게시물에서는 도커 이미지를 빌드하기 위한 Dockerfile 을 작성하는 요령과 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구인 Docker-Compose를 다루는 방법에 대해 기술한다.

 

 

1. Docker Image Build (Dockerfile)

  • Dockerfile은 애플리케이션을 컨테이너로 만들기 위해 필요한 명령어들을 담고 있는 파일이다.
  • 애플리케이션의 환경 설정, 종속성 설치, 파일 복사 등을 정의한다.
  • Dockerfile을 사용하여 도커 이미지를 빌드하고, 해당 이미지를 실행하여 컨테이너를 생성할 수 있다.

 

Dockerfile을 이용한 이미지 빌드

 

  •  도커파일을 생성할 디렉터리 생성 및 이동
$ mkdir img_build  && cd img_build

 

  • Dockerfile 생성 및 작성
$ vi Dockerfile

 

  • Dockerfile 작성 요령
option contents
FROM  베이스 이미지
RUN  새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성
WORKDIR  작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성
EXPOSE  Dockerfile의 빌드로 생성된 이미지에서 열어줄 포트를 의미 (컨테이너 생성 시 -p 옵션의 컨테이너 포트 값으로 EXPOSE 값을 적어야한다)
USER  이미지를 어떤 계정에서 실행 하는지 지정
COPY / ADD build 명령 중간에 호스트의 파일 또는 폴더를 이미지에 가져오는 것
ENV  이미지에서 사용할 환경 변수 값을 지정
CMD / ENTRYPOINT 컨테이너를 생성,실행 할 때 실행할 명령어
VOLUME
외부 마운트 포인트 생성
ARGS Dockerfile 내에서 사용할 변수 정의
LABEL Docker image에 포함할 메타데이터 정의 (key-value)
ONBUILD 다른 빌드의 베이스로 사용될때 사용하는 명령어 (부모/자식 이미지에서 동일하게 실행되는 명령어 정의)

 

Dockerfile의 예시는 아래와 같다.

# Dockerfile

# 베이스 이미지를 지정합니다.
FROM python:3.9

# 환경 변수를 설정합니다.
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 앱 디렉토리를 생성하고 작업 디렉토리로 설정합니다.
RUN mkdir /app
WORKDIR /app

# 앱의 종속성을 설치합니다.
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# 앱 소스 코드를 추가합니다.
COPY . /app/

# 앱을 실행합니다.
CMD ["python", "app.py"]

 

  •  Dockerfile build
$ docker build -t [이름공간/이미지이름:태그] [경로]

 

이후 $ docker image ls 명령어로 빌드결과를 확인한다.

  • + <none> tag image 삭제

bulid에 실패할 경우 docker image ls으로 살펴보면 이름과 태그가 <none>으로 붙은 것을 볼 수 있다. 수정 후 정상적인 빌드를 하면 정상적인 태그로 돌아오지만 아래와 같이 삭제 가능하다.

$ docker rmi $(sudo docker images -f "dangling=true" -q) --force

 

특정 파일 및 디렉토리 build 제외

 

특정 파일 및 디렉토리의 파일이 build 되는 것을 방지하기 위해서는 프로젝트 내  .dockerignore 파일을 생성한다.

 

와일드카드 패턴 (예: *.txt, logs/*) 또는 디렉토리 패턴 (예: logs/, tmp/)을 적용하여 작성한다.

 

 

build cache 삭제

 

Dockerfile을 빌드하는 과정에서는 반복되는 build 시간을 단축하고자 캐싱한다.

 

이러한 캐싱 결과가 PC 내에 지속적으로 쌓이게 되면 불필요한 데이터가 PC에 남게 된다.

 

이러한 Docker build 캐시를 삭제하는 방법은 아래와 같다.

$ docker builder prune

 

 

Docker Hub을 이용한 image 생성/버전관리

 

$ docker login

$ docker push [사용자명]/[repository 이름]:[tagname]

 

 

 

2. Docker-Compose

  • 도커 컴포즈(Docker Compose)는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구이다.
  • 컴포즈 파일을 사용하여 여러 컨테이너를 하나의 프로젝트로 정의하고, 이를 단일 명령어로 실행할 수 있다. (여러개의 컨테이너를 실행하기 위한 명령어 집합)
  • 컴포즈 파일은 YAML 형식으로 작성되며, 각 컨테이너의 설정, 의존성, 네트워크 설정 등을 정의한다.

 

Docker-compose 생성 및 작성

 

$ vi docker-compose.yml

 

 

  • docker-compose.yml 작성 요령
option contents
version Docker Compose 파일의 버전을 지정 (필수)
services Docker Compose로 관리할 서비스를 정의하는 섹션
volumes 컨테이너에서 사용할 볼륨을 정의
networks 컨테이너 간 통신을 위한 네트워크를 정의
x-{사용자 정의} 사용자 정의 확장 (extension)

 

 

docker-compose.yml 파일을 작성한 예시파일은 아래와 같다.

# docker-compose.yml

version: '3'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: flaskapp
      MYSQL_USER: flaskuser
      MYSQL_PASSWORD: flaskpassword
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

 

 

 

Compose 실행 및 종료

 

  • Compose 실행
$ docker compose up
# -d: 백그라운드 실행

 

  • Compose 종료
$ docker compose  down

 

 

 

 

참고 사이트

 

  • [Docker] Docker 맛보기 - 특징과 설치 (1) 와 같음

 

 

 

※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.

 

 

* CopyRight 2024. Jay Park All rights reserved.

728x90
Comments