< docker-compose 명령어 >
docker-compose pull [service]
docker-compose.yml 내의 이미지들을 모두 다운받음
뒤에 service(컨테이너 이름?) 를 추가하면, 추가한 이름의 이미지만 다운받음
docker-compose build [service]
docker-compose.yml 내에 명시한 dockerfile 을 빌드함
뒤에 service 를 추가하면, 추가한 이름의 dockerfile 만 빌드함
docker-compose up [service]
docker-compose.yml 을 기반으로 컨테이너를 실행
실행된 후에 서비스가 forground 에서 동작하는데
docker-compose up -d 처럼 -d 옵션을 추가하여 서비스를 background 에서 동작하도록 함
docker-compose ps
현재 실행중인 서비스 목록을 보여줌
docker-compose logs [service]
현재 실행중인 서비스의 로그를 보여줌
docker-compose logs -f 처럼 -f 옵션을 주면 로그를 실시간으로 볼 수 있음
docker-compose top
서비스 내에서 실행중인 프로세스 목록을 보여줌
docker-compose stop [service]
서비스를 멈춤
docker-compose start [service]
멈춰있는 서비스의 컨테이너를 실행
docker-compose exec {container} {command}
해당 서비스의 컨테이너에서 명령어를 실행
컨테이너 내부로 들어갈 때 이 명령어를 사용
예를 들어 nginx 컨테이너에 들어가려면 아래 명령어 사용
docker-compose exec nginx bash
그럼 nginx 컨테이너의 bash 로 들어갈 수 있게 됨
docker-compose run {service} {command}
해당 서비스에 컨테이너를 하나 더 실행
exec 와 다른 점은, 실행할 때 아예 새로운 컨테이너 하나를 만들고 실행한다는 점
docker-compose run nginx bash
위 명령어를 실행하면 아예 새로운 nginx 컨테이너가 만들어진 후 그 새로운 컨테이너의 bash 쉘이 실행됨
docker-compose down [service]
서비스를 멈추고(stop) 컨테이너를 삭제(rm)
docker-compose down -v 처럼 -v 옵션을 주면 볼륨까지 함께 삭제함
< docker-compose YAML >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#버전 정의
# 버전에 따라서 지원하는 형식이 다릅니다.
version: '3.0'
#service 정의
# docker-compose로 생성 할 container의 옵션을 정의 합니다.
# service안의 container들은 하나의 project로서 docker-compose로 관리 됩니다.
services:
#생성 할 container 이름을 지정 합니다.
container-이름:
#container 생성시 사용 할 이미지 지정
image: node-server:v1
#build 옵션
# docker-compose build 옵션에서 사용 됩니다.
# dockerfile에 명시된 FROM의 image를 사용하여 위에 명시된image 이름과 tag로 새로운 image를 생성 합니다.
build:
#dockerfile의 위치를 지정 합니다. 현재 위치(.)에 존재하는 dockerfile 을 사용해 빌드합니다.
context: .
#container port mapping 정보
ports:
- "80:80"
#EXPOSE
# 도커 컨테이너가 실행되었을 때 요청을 기다리고 있는(Listen) 포트를 지정합니다. 여러개의 포트를 지정할 수 있습니다.
expose:
- "80"
#환경 변수 리스트를 정의
environment:
UPDATE_URL: "https://www.doitnow-man.com"
#실행 환경 설정
stdin_open: true #docker run -i
tty: true #docker run -t
entrypoint: /bin/bash #exec /bin/bash
|
cs |
version
docker-compose.yml 의 명세 버전을 의미
맨 위에 적음
주로 3 버전을 사용한다고 함
3버전을 주로 사용하는 이유는 나중에 추가
services
실행할 컨테이너 정의
services 내에서 컨테이너의 이름, 포트, 이미지 등을 정의 할 것임
services:
my-container
컨테이너 이름을 my-container 라고 정의
docker run --name my-container 와 같음
확인해봐야 하는 사항)
여기 적어둔 이름이 컨테이너 내부에서 hostname 이 되는 듯
docker-compose 를 통해 실행된 컨테이너들끼리
여기 적어둔 이름(hostname) 으로 통신이 가능한 것으로 보임
image: ubuntu
image 에는 실제 컨테이너 이미지명이 들어감
태그가 없으면 latest 가 자동으로 붙음
build
docker hub 등에서 가져오는 이미지가 아닌
내가 정의한 dockerfile 을 빌드하라는 속성
image 속성 대신 사용하는 경우가 많음
ports
호스트와 컨테이너의 호스트를 연결
예를 들어 아래와 같다면
- "8080:80"
호스트의 8080 과 컨테이너의 80을 연결 하라는 의미가 됨
environment
컨테이너 내부의 환경 변수를 설정 가능
예를 들어, mysql 의 환경 변수를 다음과 같이 설정 가능
- MYSQL_ROOT_PASSWORD=root
volumes
호스트의 dir 와 컨테이너의 dir 를 연결(mount) 해주는 속성
예를 들어 아래와 같다면
- /home/eye_host/:/home/eye_container
호스트의 /home/eye_host dir 가
컨테이너의 /home/eye_container 와 연결됨
depends_on
컨테이너들의 실행 순서를 설정
의존성을 추가하는 거라고 생각하자.
예를 들어 아래와 같다면
service:
mysql:
...
django:
...
depends_on:
- mysql
이름이 django인 컨테이너는
이름이 mysql 인 컨테이너가 실행된 이후 실행됨
즉, mysql 이 실행된 이후에 django 가 실행됨
restart
컨테이너가 예기치 않게 종료되었을 때 어떻게 할 것인지 결정
예를 들어 nginx 컨테이너에서 nginx 프로세스가 예기치 않게 종료되면 nginx 컨테이너까지 같이 종료되어버림
이런 경우 종료되고 난 후 그대로 둘 것인지, 다시 컨테이너를 시작할 것인지 등을 결정할 수 있음
세 가지를 추가 가능
"no" : 기본값. 컨테이너를 다시 시작하지 않음
always : 컨테이너를 항상 다시 시작함
on-failure : 오작동하면서 종료되었을 때만 컨테이너를 다시 시작함
아래는 docker-compose.yml 파일의 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
version: '3.3'
services:
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress
ports
- "6000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
|
cs |
환경 변수를 설정할 수 있는 곳이 다양함
dockerfile 에도 설정할 수 있고
docker-compose yml 에서도 설정할 수 있고
docker-compose run 할 때 옵션으로 추가하여 설정할 수 있음
이렇게 다양하게 추가했을 때 최종적으로 컨테이너 내부에서는
어떤 곳에 선언된 환경변수를 따라가는가?
즉, 어떤 곳에 선언된 환경 변수의 우선순위가 높은가?
우선순위
1.
docker-compose run -e MY_ENV=first 처럼
-e 옵션으로 추가한 경우가 가장 우선순위가 높음
2.
docker-compose.yml 내에서
environment:
- MY_ENV=second
처럼 environment 에 추가한 환경 변수가 두번째로 우선순위가 높음
3.
Dockerfile 내에서
ENV MY_ENV third
처럼 ENV 에 추가한 환경 변수가 세번째로 우선순위가 높음
참고로 docker-compose 자체에 컨테이너들 끼리 묶을 수 있는 기능이 있다고 함
참고
https://doitnow-man.tistory.com/247
'Docker' 카테고리의 다른 글
[Docker] Udemy Docker & Kubernetes : 실전 가이드 필기 - Docker (1) | 2023.10.03 |
---|---|
[Docker] CentOS 7 Dockerfile (0) | 2022.07.20 |
[Kube] Running Kubernetes Locally 비디오 링크 (0) | 2021.04.13 |
[Docker] System has not been booted with systemd as init system (PID 1). Can't operate. 에러 (0) | 2021.03.03 |
[Alpine Linux] bash 설치하는 방법 (0) | 2021.01.04 |