728x90
반응형
컴포즈 파일(YAML 형식)의 작성 요령
- 첫 줄에 도커 컴포즈 버전을 기재
- 주 항목 services, networks, volumes 아래에 설정 내용을 기재
- 항목 간의 상하 관계는 공백을 사용한 들여쓰기로 나타낸다.
- 들여쓰기는 같은 수의 배수만큼의 공백을 사용한다.
- 이름은 주 항목 아래에 들여쓰기한 다음 기재한다.
- 컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재한다.
- 여러 항목을 기재하려면 줄 앞에 '-'를 붙인다.
- 이름 뒤에는 콜론(:)을 붙인다.
- 콜론 뒤에는 반드시 공백이 와야한다.(바로 줄바꿈하는 경우는 예외)
- # 뒤의 내용은 주석으로 간주된다.
- 문자열은 작은따옴표(') 또는 큰따옴표(")로 감싸 작성한다.
컴포즈 파일의 항목 정리
- 주 항목
항목 | 내용 |
services | 컨테이너를 정의한다. |
networks | 네트워크를 정의한다. |
volumes | 볼륨을 정의한다. |
- 자주 나오는 정의 내용
항목 | docker run 명령어의 해당 옵션 또는 인자 | 내용 |
image | 이미지 인자 | 사용할 이미지를 지정 |
networks | --net | 접속할 네트워크를 지정 |
volumes | -v, --mount | 스토리지 마운트를 설정 |
ports | -p | 포트 설정 |
environment | -e | 환경변수 설정 |
depends_on | 없음 | 다른 서비스에 대한 의존관계를 정의 |
restart | 없음 | 컨테이너 종료 시 재시작 여부를 설정 |
command | 커맨드 인자 | 컨테이너 시작 시 기존 커맨드를 오버라이드 |
container_name | --name | 실행할 컨테이너의 이름을 명시적으로 지정 |
dns | --dns | DNS서버를 명시적으로 지정 |
env_file | 없음 | 환경설정 정보를 기재한 파일을 로드 |
entrypoint | --entrypoint | 컨테이너 시작 시 ENTRYPOINT 설정을 오버라이드 |
external_links | --link | 외부 링크를 설정 |
extra_hosts | --add-host | 외부 호스트의 IP주소를 명시적으로 지정 |
logging | --log-driver | 로그 출력 대상을 설정 |
network_mode | --network | 네트워크 모드를 설정 |
- restart의 설정값
설정값 | 내용 |
no | 재시작하지 않는다. |
always | 항상 재시작한다. |
on-failure | 프로세스가 0 외의 상태로 종료됐다면 재시작한다. |
unless-stopped | 종료 시 재시작하지 않음. 그 외에는 재시작한다. |
이제 직접 컴포즈 파일을 작성해보자.
MySQL과 워드프레스 컨테이너를 만드는 컴포즈 파일을 작성하자!
실습내용
생성할 네트워크, 볼륨 및 컨테이너 정보
항목 | 값 |
네트워크 이름 | workdpress00net1 |
MySQL 볼륨 이름 | mysql00vol11 |
워드프레스 볼륨 이름 | wordpress00vol12 |
MySQL 컨테이너 이름 | mysql00ex11 |
워드프레스 컨테이너 이름 | wordpress00ex12 |
정의 내용
- MySQL 컨테이너(mysql00ex11)의 정의
항목 | 항목 이름 | 값 |
MySQL 이미지 이름 | image: | mysql:5.7 |
사용할 네트워크 | networks: | wordpress00net1 |
사용할 볼륨 | volumes: | mysql00vol11 |
마운트 위치 | /var/lib/mysql | |
재시작 설정 | restart: | always |
MySQL 설정 | environment: | ♣이 붙은 항목 설정 |
♣MySQL 루트 패스워드 | MYSQL_ROOT_PASSWORD | myrootpass |
♣MySQL 데이터베이스 이름 |
MYSQL_DATABASE | wordpress00db |
♣MySQL 사용자 이름 |
MYSQL_USER | wordpress00charm |
♣MySQL 패스워드 |
MYSQL_PASSWORD | wcharmpass |
- 워드프레스 컨테이너(wordpress00ex12)의 정의
항목 | 항목 이름 | 값 |
의존관계 | depends_on: | mysql00ex11 |
워드프레스 이미지 이름 | image: | wordpress |
사용할 네트워크 | networks: | wordpress00net1 |
사용할 볼륨 | volumes: | wordpress00vol12 |
마운트 위치 | /var/www/html | |
포트 번호 설정 | port: | 8085:80 |
재시작 설정 | restart: | always |
데이터베이스 관련 정보 | environment: | ♣이 붙은 항목 설정 |
♣데이터베이스 컨테이너 이름 | WORDPRESS_DB_HOST | mysql00ex11 |
♣데이터베이스 이름 |
WORDPRESS_DB_NAME | wordpress00db |
♣데이터베이스 사용자 이름 |
WORDPRESS_DB_USER | wordpress00charm |
♣데이터베이스 패스워드 |
WORDPRESS_DB_PASSWORD | wcharmpass |
컴포즈 파일을 배치할 경로
항목 | 값 |
컴포즈 파일 배치 경로(Windows) | C:\Users\사용자명\Documents\com_folder |
컴포즈 파일 배치 경로(macOS) | /Users/사용자명/Documents/com_folder |
컴포즈 파일 배치 경로(Linux) |
/home/사용자명/com_folder |
1. docker-compose.yml 파일 생성
- 메모장 등의 텍스트 에디터를 사용해 컴포즈 파일을 작성하고, Linux는 nano 에디터 등을 사용한다.
- 파일 이름은 docker-compose.yml로 하고, 앞서 준비한 com_folder에 둔다.
2. 주 항목 작성
- 버전에 이어 필수 주 항목(services, networks, volumes)을 작성한다. 복수형임에 주의!
docker-compose.yml 작성 내용 1
version: "3"
services:
networks:
volumes:
3. 이름 작성
- 각각의 주 항목 아래에 줄바꿈한 뒤 들여쓰기 후 이름을 작성한다. 예제에선 공백 두 개로 들여쓰기 했다.
docker-compose.yml 작성 내용 2
version: "3"
services:
mysql00ex11:
wordpress00ex12:
networks:
wordpress00net1:
volumes:
mysql00vol11:
wordpress00vol12:
4. MySQL 컨테이너의 정의 작성
docker-compose.yml 작성 내용 3
version: "3"
services:
mysql00ex11:
image: mysql:5.7
networks:
- wordpress00net1
volumes:
- mysql00vol11:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: myrootpass
MYSQL_DATABASE: wordpress00db
MYSQL_USER: wordpress00charm
MYSQL_PASSWORD: wcharmpass
wordpress00ex12:
networks:
wordpress00net1:
volumes:
mysql00vol11:
wordpress00vol12:
5. 워드프레스 컨테이너의 정의 작성
docker-compose.yml 작성 내용 4
version: "3"
services:
mysql00ex11:
image: mysql:5.7
networks:
- wordpress00net1
volumes:
- mysql00vol11:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: myrootpass
MYSQL_DATABASE: wordpress00db
MYSQL_USER: wordpress00charm
MYSQL_PASSWORD: wcharmpass
wordpress00ex12:
depends_on:
- mysql00ex11
image: wordpress
networks:
- wordpress00net1
volumes:
- wordpress00vol12:/var/www/html
ports:
- 8085:80
restart: always
environment:
WORDPRESS_DB_HOST: mysql00ex11
WORDPRESS_DB_NAME: wordpress00db
WORDPRESS_DB_USER: wordpress00charm
WORDPRESS_DB_PASSWORD: wcharmpass
networks:
wordpress00net1:
volumes:
mysql00vol11:
wordpress00vol12:
6. 파일 저장
- 공백의 개수와 콜론의 유무 등 틀리기 쉬운 부분을 다시 점검하고 저장하자.
도커 컴포즈를 직접 실행해보자.
앞서 작성한 MySQL과 워드프레스 컨테이너를 생성하고 실행한다.
도커 컴포즈 명령어
- 명령 프롬프트/터미널에서 docker-compose 명령을 사용한다.
- 가장 자주 사용하는 명령어는 up과 down 두 가지이지만, stop도 가끔 사용한다.
docker-compose up 명령어
- 컴포즈 파일의 내용에 따라, 컨테이너 및 주변 환경을 생성하는 명령어다.
- 컴포즈 파일의 경로는 -f 옵션을 사용해 지정한다.
- 자주 사용하는 명령어 예: docker-compose -f 정의_파일_경로 up 옵션
옵션 | 내용 |
-d | 백그라운드로 실행 |
--no-color | 화면 출력 내용을 흑백으로 함 |
--no-deps | 링크된 서비스를 실행하지 않음 |
--force-recreate | 설정 또는 이미지가 변경되지 않더라도 컨테이너를 재생성 |
--no-create | 컨테이너가 이미 존재할 경우 다시 생성하지 않음 |
--no-build | 이미지가 없어도 이미지를 빌드하지 않음 |
--build | 컨테이너를 실행하기 전에 이미지를 빌드 |
--abort-on-container-exit | 컨테이너가 하나라도 종료되면 모든 컨테이너를 종료 |
-t, --timeout | 컨테이너를 종료할 때의 타임아웃 설정. 기본은 10초 |
--remove-orphans | 컴포즈 파일에 정의되지 않은 서비스의 컨테이너를 삭제 |
--scale | 컨테이너의 수를 변경 |
docker-compose down 명령어
- 컴포즈 파일의 내용에 따라, 컨테이너와 주변 환경을 종료 및 삭제하는 명령어다.
- 볼륨과 이미지는 삭제되지 않고, 컴포즈 파일의 경로는 -f 옵션으로 지정한다.
- 자주 사용하는 명령어 예: docker-compose -f 컴포즈_파일_경로 down 옵션
옵션 | 내용 |
--rmi 종류 | 삭제 시에 이미지도 삭제한다. 종류를 all로 지정하면 사용했던 모든 이미지가 삭제된다. local로 지정하면 커스텀 태그가 없는 이미지만 삭제한다 |
-v, --volumes | volumes 항목에 기재된 볼륨을 삭제한다. 단, external로 지정된 볼륨은 삭제되지 않는다. |
--remove-orphans | 컴포즈 파일에 정의되지 않은 서비스의 컨테이너도 삭제한다. |
docker-compose stop 명령어
- 컴포즈 파일의 내용에 따라, 컨테이너를 종료하고, 컴포즈 파일의 경로는 -f 옵션으로 지정한다.
- 자주 사용하는 명령어 예: docker-compose -f 컴포즈_파일_경로 stop 옵션
docker-compose의 주요 명령어 목록
명령어 | 내용 |
up | 컨테이너를 생성하고 실행한다. |
down | 컨테이너와 네트워크를 종료하고 삭제한다. |
ps | 컨테이너 목록을 출력한다. |
config | 컴포즈 파일을 확인하고 내용을 출력한다. |
port | 포트 설정 내용을 출력한다. |
logs | 컨테이너가 출력한 내용을 화면에 출력한다. |
start | 컨테이너를 시작한다. |
stop | 컨테이너를 종료한다. |
kill | 컨테이너를 강제로 종료한다. |
exec | 명령어를 실행한다. |
run | 컨테이너를 실행한다. |
create | 컨테이너를 생성한다. |
restart | 컨테이너를 재실행한다. |
pause | 컨테이너를 일시정지한다. |
unpause | 컨테이너의 일시정지를 해제한다. |
rm | 종료된 컨테이너를 삭제한다. |
build | 컨테이너에 사용되는 이미지를 빌드 혹은 재빌드한다. |
pull | 컨테이너에 사용되는 이미지를 내려받는다. |
scale | 컨테이너의 수를 지정한다. |
events | 컨테이너로부터 실시간으로 이벤트를 수신한다. |
help | 도움말 화면을 출력한다. |
도커 컴포즈로 실행한 컨테이너의 이름과 스케일링(scale 옵션)
- 도커 컴포즈로 실행한 컨테이너 역시 도커 엔진을 통해 관리할 수 있다.
- 단, 도커 컴포즈로 실행한 컨테이너의 이름은 임의로 결정된다.
- 예를 들어, com_folder에 둔 컴포즈 파일을 사용해서 penguin이라는 이름의 컨테이너를 생성하면
실제로 도커 컴포즈로 생성된 컨테이너 이름은 com_folder_penguin_1과 같이 폴더 이름과 번호가 붙는다.- -f 옵션을 생략했다면, 폴더 이름은 붙지 않는다.
- 이렇게 폴더 이름과 번호가 붙더라도, 도커 컴포즈를 통해 컨테이너를 지정할 때는
(컴포즈 파일에 기재된)원래 이름을 사용할 수도 있다. - 따라서, 도커 컴포즈로 생성된 컨테이너를 도커 엔진을 통해 다룰 때는
ps 명령어로 컨티에너 이름을 먼저 확인해야 한다.
- 같은 구성의 컨테이너를 여러 세트 만들고 싶다면 up 명령어에 --scale 옵션을 붙이면 된다.
- 명령어 예:
docker-compose -f C:\..생략..\com_folder\docker-compose.yml up --scale penguin=3
실습내용
실습에 사용할 컴포즈 파일
- 컴포즈 파일은 경로를 지정할 수 있다면 어디에 둬도 무방하다.
항목 값 컴포즈 파일 배치 경로(Windows) C:\Users\사용자명\Documents\com_folder 컴포즈 파일 배치 경로(macOS) /Users/사용자명/Documents/com_folder 컴포즈 파일 배치 경로(Linux) /home/사용자명/com_folder
1. 컴포즈 파일을 적절한 위치에 배치
- 앞서 작성했던 docker-compose.yml 파일을 사용한다.
2. 컴포즈 파일의 내용을 실행
- docker-compose up 명령어를 실행하면 컴포즈의 파일의 정의대로 컨터이너 및 주변 환경이 세팅된다.
- -d 옵션을 사용하고, -f 옵션을 사용해 컴포즈 파일의 경로를 지정한다.
- 컴포즈 파일 내용 실행(Windows): -f C:\..생략..\com_folder\docker-compose.yml up -d
- 컴포즈 파일 내용 실행(macOS): -f /Users/..생략../com_folder/docker-compose.yml up -d
- 컴포즈 파일 내용 실행(Linux): -f /home/..생략../com_folder/docker-compose.yml up -d
3. 웹 브라우저에서 워드프레스에 접근 가능한지 확인
- 웹 브라우저에서 http://localhost:8085/ 에 접근해 워드프레스의 초기화면이 나타나는지 확인하자.
4. 컨테이너와 네트워크를 종료 및 삭제
- 확인이 끝나면 docker-compose down 명령어를 사용해, 컨테이너와 네트워크를 종료 및 삭제한다.
- -f 옵션으로 컴포즈 파일의 경로를 설정하고, 삭제 후엔 ps 명령어로 잘 삭제됐는지 확인하자.
- 컨테이너와 네트워크의 종료 및 삭제(Windows):
docker-compose -f C:\..생략..\com_folder\docker-compose.yml down - 컨테이너와 네트워크의 종료 및 삭제(macOS):
docker-compose -f /Users/..생략../com_folder/docker-compose.yml down - 컨테이너와 네트워크의 종료 및 삭제(Linux):
docker-compose -f /home/..생략../com_folder/docker-compose.yml down
5. 뒷정리
- down 명령어를 사용해도 이미지와 볼륨은 삭제되지 않아서, 직접 삭제해야 한다.
728x90
'docker & kubernetes' 카테고리의 다른 글
쿠버네티스 사용하기 2 | Docker&Kubernetes 학습 34 (0) | 2024.12.23 |
---|---|
쿠버네티스 사용하기 1 | Docker&Kubernetes 학습 33 (0) | 2024.12.18 |
컨테이너 사용법 8 | Docker&Kubernetes 학습 31 (1) | 2024.12.14 |
컨테이너 사용법 7 | Docker&Kubernetes 학습 30 (1) | 2024.12.11 |
컨테이너 사용법 6 | Docker&Kubernetes 학습 29 (3) | 2024.12.03 |