728x90
정의
- docker-compose는 docker 2개 이상의 컨테이너를 더욱 간편하게 관리하기 위해 사용되는 툴
- docker-compose.yml (혹은 .yaml)이라는 파일에 컨테이너에서 사용 될 이미지, 옵션 등을 작성한 후 사용하게 됨.
- 이를 통해 docker 명령어만 사용할 때보다 여러 컨테이너를 더 간편하고 직관적으로 컨테이너를 관리할 수 있다.
- 실행할 때 사용자가 작성한 docker-compose.yml 파일의 내용에 맞게 컨테이너를 설정하고 실행하게 되기에, docker-compose.yml 파일이 존재하지 않는 경로에서 docker compose 명령어를 실행시킬 경우 에러가 발생할 수 있다.
설치
sudo mkdir -p /usr/lib/docker/cli-plugins
# /usr/lib/docker 경로에 cli-plugins라는 디렉토리를 생성
# -p : 만약 상위 디렉토리가 없다면 함께 생성
sudo curl -SL https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64 -o /usr/lib/docker/cli-plugins/docker-compose
# github에 release 된 docker-compose 파일을 /usr/lib/docker/cli-plugins/ 경로에 다운로드
# v2.11.2는 docker-compose의 버전이며, 최신 버전은 여기서 확인 가능하다.
sudo chmod +x /usr/lib/docker/cli-plugins/docker-compose
# 다운받은 docker-compose 파일에 실행 권한을 부여
sudo docker compose version
# docker-compose가 정상적으로 설치되었는지 확인함
# Docker Compose version v2.11.2 정상적으로 설치 된 경우 버전이 출력
Docker Compose로 컨테이너 관리
1. Docker-container 삭제
sudo docker ps -a # docker에 존재하는 컨테이너 목록을 확인합니다.
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 54445308314d httpd:latest "httpd-foreground" 23 hours ago Up 23 hours 0.0.0.0:80->80/tcp, :::80->80/tcp sweet_engelbart
sudo docker rm -f $container_id # 컨테이너의 실행중 여부와 관계 없이 강제로 삭제합니다.
2. docker-compose.yml 작성
version: '3.8'
# docker-compose.yml에 사용될 문법 버전을 정의함
services:
example: # 서비스 이름을 지정합니다. 서비스 이름은 컨테이너끼리 통신할 때 사용.
container_name: example # 컨테이너 이름을 지정.
image: 'httpd:latest' # 컨테이너를 생성할 때 사용될 이미지를 지정.
restart: always # 컨테이너가 종료됐을 때 다시 실행.
3. container 실행
# docker compose 명령어는 docker-compose.yml 파일이 존재하는 자리에서 실행해야 함.
sudo docker compose up -d
# up : docker-compose.yml 파일을 읽어 정의된 서비스들을 실행.
# -d : 컨테이너를 데몬(백그라운드)으로 실행.
4. container 중지, 삭제
# 컨테이너 중지
sudo docker compose stop
# 이후 docker ps 명령어를 쳐보면 컨테이너 목록에 아무것도 보여지지 않음.
# 중지 상태의 컨테이너를 확인
sudo docker ps -a
# 다른 명령어로 컨테이너를 중지.
sudo docker compose down
# stop과는 다르게 컨테이너가 삭제됨
# 삭제된 컨테이너는 docker ps -a 명령어로도 확인되지 않음
'Docker' 카테고리의 다른 글
Docker container 2개 이상 띄우기 (0) | 2023.06.01 |
---|---|
Entrypoint 활용하기 (0) | 2023.06.01 |
Dockerfile = Docker에서 이미지 빌드하기 (0) | 2023.06.01 |
Docker Volume 간단히 이해 (0) | 2023.06.01 |
Container Port Forwarding (0) | 2023.06.01 |