일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 도커 컨테이너
- Docker Image
- mmoe
- 확률공리
- 스네이크케이스
- multi task learning
- 카멜케이스
- 큐러닝
- 몬테카를로 학습
- genetic algorithm
- 파스칼케이스
- 도커 개념
- 연합학습
- routing problem
- Metaheuristic
- off-policy
- 유전알고리즘
- Sarsa
- 그리드월드
- 산업공학
- 케밥케이스
- Traveling salesman problem
- 헝가리안노테이션
- 딥러닝
- q learning
- Federated learning
- 코딩스타일
- 배반사건
- 강화학습
- on-policy
- Today
- Total
SU Library
[Docker초보]다수의 컨테이너 관리방법(Docker Compose) 본문
도커를 운영하다보면 다수의 컨테이너들이 생성되고 도커 명령어로 일일히 관리하기엔 너무 까다로워집니다. 이럴 때를 대비해 Docker Compose라는 기능이 있고 이를 통해 다수의 컨테이너를 손쉽게 관리할 수 있습니다.
앞선 포스팅들에서 다룬것같이 docker run 옵션들을 입력하는 대신 docker-compose.yml 파일에 컨테이너 실행 옵션들을 기록합니다. 도커 컴포즈의 경우 디렉토리 단위로 동작하는 특징이 있고, yaml 파일 작성 시space바 2칸을 사용해서 들여쓰기를 해야합니다. tab의 경우 도커 컴포즈가 인식을 못하기 때문에 작성시 유의해야하는 점이 있습니다. 먼저 wordpress라는 폴더를 생성하고 docker-compose.yml파일을 다음과같이 작성하겠습니다.
mkdir ./study\docker\wordpress
services:
db:
image: mysql:8.0
volumes:
- db:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: true
MYSQL_DATABASE: su-lib
MYSQL_USER: su-lib
MYSQL_PASSWORD: su-lib
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: su-lib
WORDPRESS_DB_PASSWORD: su-lib
volumes:
db: {}
networks:
wordpress: {}
docker-compose.yml의 코드해석을 진행하자면, 도커 컨테이너를 정의하는 services와 도커 컨테이너를 정의하는 volumes가 있습니다. 각 서비스는 도커허브의 어떤 이미지를 사용할 것인지 정의하는 라인이 있습니다 다음으로 volumes를 살펴보자면, 먼저 데이터가 저장되는 볼륨을 정의할 수 있습니다. 이는 db라는 이름을 가진 볼륨을 정의하고 이를 /var/lib/mysql 디렉토리에 마운트합니다. environment를 통해 mysql에 대한 환경 변수값들을 설정합니다.
- MYSQL_RANDOM_ROOT_PASSWORD : 루트 비밀번호를 무작위로 생성하도록 설정할지에 대한 여부
- MYSQL_DATABASE : 새로 생성할 데이터베이스의 이름 정의.
- MYSQL_USER : 데이터베이스를 사용할 사용자 정의
- MYSQL_PASSWORD : 사용자의 비밀번호를 설정
다음 서비스로 wordpress가 정의되어 있습니다.
먼저 depends_on 옵션을 통해 앞서 정의한 db를 가르키고 있는 것을 확인할 수 잇는데 이는 # 'db' 서비스에 의존성을 가지며, 'db' 서비스가 먼저 시작되어야 함을 의미합니다.
그리고 호스트의 8000번 포트를 컨테이너의 80번 포트에 연결하는 ports옵션이있고 environment에는 wordpress의 환견변수를 다음과 같이 지정할 수 있습니다.
- WORDPRESS_DB_HOST : 워드프레스가 사용할 데이터베이스 호스트와 포트를 설정
- WORDPRESS_DB_USER : 워드프레스가 사용할 데이터베이스 사용자를 설정
- WORDPRESS_DB_PASSWORD : 워드프레스가 사용할 데이터베이스 비밀번호를 설정
입니다. 마지막으로networks의 경우 'wordpress'라는 이름의 네트워크를 정의합니다. 여기서 간과하지 말아야할 중요한점은
networks 섹션과 서비스 정의 내의 wordpress는 다른 맥락에서 사용된다는 것입니다. 이 네트워크는 컨테이너 간에 네트워크 통신을 가능하게 하는 논리적인 구분입니다.
그후 docker-compose.yml 파일이 저장된 폴더로 이동 후 docker compose up명령어로 실행할 수 있습니다.
docker compose up
[+] Running 33/34b Pull complete 3.9s - wordpress [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 225.4MB / 240.8MB Pulling 40.7s
✔ 09f376ebb190 Pull complete 4.8s
✔ 4b2fddf63d23 Pull complete 10.5s
...
명령어 실행 후 아래와 같이 두개의 컨테이너와 이미지가 생성되었습니다.
이는 docker compose up도 docker run과 마찬가지로 로컬에 이미지가 없다면 자동으로 풀을 받습니다. 그러나 Docker에 로그인 하지 않을 경우 " error during connect: in the default daemon configuration"를 직면하여 이미지를 풀 받지 못하는 경우가 있는데 해결방법으론 docker login 명령어를 통해 로그인 후 실행하거나, docker compose up을 실행하기전 필요한 이미지들을 미리 풀 한뒤에 docker compose up을 실행하는 것입니다.
접속 결과 역시 localhost:8000으로 접속하여 wordpress의 블로그를 확인할 수 있습니다.
docker compose up에 대해 d옵션을 추가하여 백그라운드에서의 실행도 시킬 수 있습니다.
docker compose up -d
docker compose 역시 docker compose down으로 컨테이너들을 일괄적으로 종료할 수 있습니다.
docker compose down
'DevOps > Docker' 카테고리의 다른 글
[Docker초보]Docker 이미지에 대한 정리 (0) | 2024.05.14 |
---|---|
[Docker초보]Docker 컨테이너에 대한 개념 설명과 간단한 명령어 소개 (0) | 2024.05.13 |