docker file & compose - 3 |
도커 시리즈의 세번째 글입니다.
https://man-25-1.tistory.com/251
https://man-25-1.tistory.com/254
이번 글 까지는 계속해서 도커에 익숙해지고, 사용법을 알아보는 단계라고 생각하면 될 것 같습니다.
docker file이란?
이전 글에서
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 사용
- 각각의 컨테이너의 Dockerfile을 작성한다.
- docker-compose.yml을 작성하고, 각각 독립된 컨테이너의 실행 정의를 실시한다.
- 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이 위치하는 경로를 저장한다.
'개인 공부 > rookies' 카테고리의 다른 글
docker 환경에서 load balancing 실습 - 2 (0) | 2022.10.24 |
---|---|
docker와 k8s 이해 - 1 (0) | 2022.10.20 |
beef를 이용한 xss + sql injection 실습 - 1 (0) | 2022.10.20 |
metasploit을 이용한 취약점 진단 실습 - 3 (0) | 2022.10.04 |
metasploit을 이용한 취약점 진단 실습 - 2 (0) | 2022.10.03 |
댓글