1. Docker Compose란
여러 컨테이너를 모아서 관리하기 위한 툴
웹 서비스는 주로 프론트엔드, 데이터베이스, 백엔드 서버로 이루어져 있다.
•
각각을 컨테이너로 작성하고, 연결하여 동작하기 때문에 Docker Compose와 같은 컨테이너 관리 툴이 필요하다.
서비스의 규모가 더욱 커진다면, 복수의 컨테이너를 유지하고 관리하기 위해 쿠버네티스 등의 관리 툴이 사용된다.
2. Docker Compose 작성 
FROM
•
베이스 이미지 지정 명령. Dockerfile 필수 작성 명령어.
FROM ubuntu:18.04
Bash
복사
LABEL
•
key=value 형식으로 메타데이터 주입.
•
제작자, 버전, 설명, 작성일 등등
LABEL author="minsoftk@gmail.com"
Bash
복사
COPY
•
호스트 파일들을 이미지 내부 디렉토리로 복사한다.
# minsoftk의 파일들을 이미지 내부 디렉토리로 복사한다.
COPY ./minsoftk /var/www/html/
Bash
복사
CMD
•
쉘을 직접 지정해줘서 명령을 전달
•
-c 옵션은 쉘 명령을 터미널상에서 받지 않고, 인자로 받겠다는 의미
•
Dockerfile에 한가지만 설정해야함.
RUN
•
docker는 이미지 생성시, 각 단계를 layer로 나누어 작성함.
◦
이를 통해 특정 단계 변경시, 전체 이미지를 다시 다운로드 받지 않음.
•
일종의 Layer를 만들 수 있는 명령.
RUN apt-get update # 패키지 정보 업데이트
RUN apt-get install -y apache2 apt-utils # 중간에 Y/N를 전부 Y로 선택
Bash
복사
ENTRYPOINT
•
docker run에 CMD 명령에 덮어씌워지지 않는 반드시 실행해야 하는 명령을 기입할 때 사용.
ENTRYPOINT ["usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Bash
복사
3. Dockerfile 작성 예시 
FROM ubuntu:18.04
LABEL maintainer="minsoftk@gmail.com"
COPY ./minsoftk /var/www/html/
CMD ["bin/sh", "-c", "echo", "hello"]
RUN apt-get update
RUN apt-get install -y apache2 apt-utils
ENTRYPOINT ["usr/sbin/apache2ctl", "-D", "FOREGROUND"]
# docker 컨테이너의 특정 포트를 외부에 오픈
# docker run -p 로도 설정. 해당 포트를 호스트 PC 포트와 맵핑까지 함.
# 반면에 EXPOSE는 맵핑을 시키지는 않음.
EXPOSE 80
# 컨테이너 내의 환경변수 설정
# 설정한 환경변수는 RUN, CMD, ENTRYPOINT에서 사용 가능
ENV ROOT_PWD=1234
# RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리 설정
WORKDIR /usr/local/apache2/htdocs
Bash
복사
4. Dockerfile 실행 명령어 
docker build {옵션} {Dockerfile의 경로}
# 옵션
# -t: 이미지 이름 설정. 기본값은 lastest.
docker build -t minsoftk:0.0.1 .
# -f: 기본값은 Dockerfile로 찾지만, 다른 파일명으로 이미지를 빌드할 경우 필요한 옵션.
docker build -t minsoftk:0.0.1 -f Dockerfile_v2 .
# --pull: 이미지 생성시마다 최신 이미지를 다운로드 받는 옵션.
docker build -t minsoftk:0.0.1 -f Dockerfile_v2 --pull=true .
Bash
복사
5. Dockerfile 컨테이너, 이미지 조사 명령어 
# Layer에 대한 정보를 확인할 수 있다.
docker history {컨테이너ID or 이름}
# 컨테이너에서 특정 파일을 호스트 PC로 가져오기
docker cp {컨테이너ID or 이름}:{컨테이너의 파일 경로} {가져오려는 경로 입력}
# 반대로 쓰면 컨테이너에 파일을 넣을 수 있다.
docker cp {넣을 파일의 경로 입력} {컨테이너ID or 이름}:{컨테이너의 파일 경로}
Bash
복사