본문 바로가기
개인 공부/rookies

docker file & docker compose - 3

by 아메리카노와떡볶이 2022. 10. 24.
728x90
docker file & compose - 3

도커 시리즈의 세번째 글입니다.

 

https://man-25-1.tistory.com/251

 

docker와 k8s 이해 - 1

도커와 쿠버네티스 이해 최근 기술 면접에서 도커와 쿠버네티스에 대한 질문을 받았는데, 이번 기회에 확실하게 정리해보고자 도커와 쿠버네티스에 대한 포스팅을 작성하려고 합니다. 참고 문

man-25-1.tistory.com

https://man-25-1.tistory.com/254

 

docker 환경에서 load balancing 실습 - 2

docker 환경에서 load balancing 실습 - 2 이번 시간에는 docker 환경에서 load balancing 실습을 수행해보겠습니다. 구축환경 구축하고자 하는 환경은 위와 같습니다. VM에서 칼리를 띄우고, 칼리에 nginx 서버

man-25-1.tistory.com

 

이번 글 까지는 계속해서 도커에 익숙해지고, 사용법을 알아보는 단계라고 생각하면 될 것 같습니다.


docker file이란?

출처: https://data-newbie.tistory.com/516

이전 글에서

1. 도커 허브에서 이미지를 불러와서 저장

2. 이미지를 run 해서 컨테이너(프로세스 생성)로 만드는 명령어를 수행해보았습니다.

 

이번 글에서는 자신만의 커스텀된 이미지를 만들 수 있는 docker file에 대해서 알아보겠습니다.

도커 명령어들을 스크립트에 순차적으로 작성하면서, 베이스 이미지에 원하는 작업을 커스텀하고 파일로 저장해서

결국 커스텀된 이미지컨테이너화 할 수 있게되는 것입니다.

 

아래는 docker file의 예시입니다. instruction 종류별로 의미를 살펴봅시다.

FROM ubuntu:14.04
MAINTAINER "project"
LABEL title "Web Application"
RUN apt-get update && apt-get -y install apache2 php5
RUN echo 'Docker Web Application' > /var/www/html/index.html
RUN echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php
EXPOSE 80
WORKDIR /var/www/html
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

1. FROM

FROM 을 통해 베이스 이미지를 지정합니다. 예시 스크립트에서는 베이스 이미지로 우분투 14.04 버전을 지정했습니다.

 

2. LABEL

이미지에 메타데이터를 추가합니다. 예시 스크립트에서는 title에 web Application을 주었습니다.

즉 해당 이미지 파일에 [title] = "Web Application" 이 키:value로 매핑되는 것입니다.

이미지를 쉽게 식별하기 위해 설정하는 작업입니다.

 

3. RUN

이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다.

(여기서 주의할 점은 설치과정에서 별도의 입력이 불가능하기 때문에 apache2를 설치할 때 뒤에 -y를 붙여줘야 합니다.

 

4. EXPOSE

해당 이미지에서 노출한 포트를 설정합니다. 예시 스크립트는 웹 서버이므로 80을 지정했습니다.

 

5. WORKDIR

명령어를 실행할 디렉토리를 의미합니다. bash 에서 cd 명령어로 이해할 수 있습니다.

 

6. CMD

 컨테이너가 시작될 때마다 실행할 명령어. Dockerfile에서 한번만 사용할 수 있습니다.

 

해당 docker file을 잘 만들었다면 이제 실행해봐야겠죠?

도커파일은 빌드를 통해 실행됩니다.

 

docker build

docker build -t docker_web[가제] .

이렇게 빌드를 해주면 ! 커스텀된 이미지를 확인할 수 있습니다. 어떤 베이스이미지에 특정 작업이 반복되고, 여러개 생성해야할 경우 정말 유용하겠죠??

 

Docker-compose란?

방금 배운 docker file 을 통해 베이스 이미지를 커스텀한 이미지를 저장하는 방법을 배웠습니다.

 

docker compose는 컨테이너 관리 툴이라고 할 수 있습니다. yaml 파일에 도커 이미지를 원하는 양식으로 배치하고

docker compose up 커맨드를 통해 여러 컨테이너를 한번에 구축,실행할 수 있게 됩니다.

 

Docker-compose 사용

  1. 각각의 컨테이너의 Dockerfile을 작성한다.
  2. docker-compose.yml을 작성하고, 각각 독립된 컨테이너의 실행 정의를 실시한다.
  3. docker-compose up 커맨드를 실행해서 docker-compose.yml으로 정의한 컨테이너를 개시한다.
version: '3.3'
services:
   db: 
     image: mariadb:10.4.6 # image 설정(레지스트리에서 불러옴)
     volumes:
       - /home/kali/folder:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: database
       MYSQL_USER: user
       MYSQL_PASSWORD: password

   wordpress:
     depends_on:
       - db
     image: wordpress:latest # image 설정(레지스트리에서 불러옴)
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
     volumes:
       - /home/kali/web-db:/var/www/html

이렇게 레지스트리에서 불러오는 이미지를 순차적으로 컴포즈 할수도 있고

 

아래처럼 생성한 도커파일을 순차적으로 컴포즈할수도 있습니다.

version: '3.3'
services:
  web01:
    build: web01 # web01 폴더에 도커파일
    ports:
      - "8001:80"
  web02:
    build: web02  # web02 폴더에 도커파일
    ports:
      - "8002:80"
  web03:
    build: web03 # web03 폴더에 도커파일
    ports:
      - "8003:80"

즉 내가 커스텀한 도커파일을 사용하고 싶으면 build 커맨드를 사용합니다.

- build

해당 서비스의 이미지를 빌드하기 위한 Dockerfile이 위치하는 경로를 저장한다.

728x90

댓글