docker-compose 파일 작성 문법
비슷하거나 같은 의미인 것은 주석이 한번만 달려있음
# docker-compose 버전 명시
version: "3.9"
# 생성할 서비스(컨테이너) 지정
services:
# nginx란 이름의 서비스 생성
nginx:
# nginx:latest 이미지로 서비스 생성
# DockerFile기반이 아니라면 아래 image의 주석을 해제하고 build와 그 하위의 context와 dockerfuile을 주석처리해야함
#image: nginx:latest
# nginx란 서비스를 실행하는 컨테이너의 이름 지정
container_name: nginx
# DockerFile기반으로 서비스를 생성하기 위한 build명령
build:
# DockerFile이 있는 경로 지정
context: .
# DockerFile 이름 지정(DockerFile이 아닌 다른 이름일 때 필요)
dockerfile: DockerFile_nginx
# port지정
ports:
# host의 80포트를 container의 80로 연결(container는 80포트를 listen)
- "80:80"
# container의 network지정
networks:
# bp_network를 이용
bp_network:
# 해당 네트워크에서의 주소를 172.30.0.2로 지정
ipv4_address: 172.30.0.2
# host의 파일 또는 디렉터리와 container의 파일 또는 디렉터리를 공유
volumes:
# 로컬:컨테이너
- ~/nginx/nginx.conf:/etc/nginx/nginx.conf
- ~/nginx/html:/usr/share/nginx/html
# container에 지정할 환경변수
environment:
# timezone환경변수 적용
- TZ=Asia/Seoul
# 재시작 정책 지정
restart: "unless-stopped"
mariadb:
container_name: mariadb
build:
context: .
dockerfile: DockerFile_mariadb
ports:
- "3306:3306"
networks:
bp_network:
ipv4_address: 172.30.0.4
volumes:
- ~/mariadb/data:/var/lib/mysql
environment:
- TZ=Asia/Seoul
# .env 파일에 작성되어있는 환경변수를 모두 적용
- .env
restart: "unless-stopped"
node:
container_name: nodejs
build:
context: .
dockerfile: DockerFile_node
ports:
- "3000:3000"
networks:
bp_network:
ipv4_address: 172.30.0.3
volumes:
- ~/nodejs/app:/usr/src/app
environment:
- TZ=Asia/Seoul
restart: "unless-stopped"
# 생성할 network지정
networks:
# bp_network란 이름의 network생성
bp_network:
# driver를 bridge로 적용
driver: bridge
# container의 고정 ip를 할당하기 위해 서브넷과 게이트웨이를 지정하기위한 블록
ipam:
driver: default
# 서브넷과 게이트웨이 지정
config:
- subnet: 172.30.0.0/16
gateway: 172.30.0.1
참고로 들여쓰기 시 탭을 이용하면 아래와 같은 에러가 발생하므로 주의
yaml: found character that cannot start any token
docker-compose 명령어
명령어들을 실행할 때 docker compose파일 위치에서 실행해야 함
생성
docker-compose up
docker-compose에 정의한 container, network, volume 생성
-d 옵션을 붙이면 백그라운드에서 실행 가능
삭제
docker-compose down
docker-compose로 만들어진 container, network, volume 삭제
--rmi all 옵션을 붙이면 docker-compose를 통해 생성된 이미지도 함께 삭제
실행, 정지, 재시작
docker-compose start
docker-compose stop
docker-compose restart
맨 뒤에 서비스명을 붙여 특정 서비스만 필요한 동작을 수행할 수 있음
상태 확인
docker-compose ps
docker-compose로 만들어진 container의 상태 확인
비슷한 명령어인 docker ps는 docker-compose외에도 docker를 통해 실행 중인 모든 컨테이너의 상태를 확인하는 명령어
로그 확인
docker-compose logs
docker-compose로 만들어진 모든 container의 log확인
컨테이너-호스트 간 파일 복사
컨테이너 이름이 필요한데 모를 경우 docker-compose ps로 확인
컨테이너에서 호스트로 복사
docekr cp 컨테이너이름:컨테이너경로 호스트경로
컨테이너 경로에 복사할 파일이나 폴더의 경로 입력
호스트에서 컨테이너로 복사
docekr cp 호스트경로 컨테이너이름:컨테이너경로
호스트 경로에 복사할 파일이나 폴더의 경로 입력
참고
'개발 > Server' 카테고리의 다른 글
[HTTP] Content-Type (0) | 2022.05.27 |
---|---|
[Error][docker-compose] yaml: found character that cannot start any token (0) | 2022.05.15 |
localhost 도메인설정 (0) | 2022.05.08 |
docker 컨테이너 ip 고정 (0) | 2022.05.08 |
[Docker][docker-compose] Nginx 컨테이너 생성 및 설정 (0) | 2022.04.28 |