Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.
여러 도커 Application을 정의하고 실행하는 툴로, YAML파일을 통해 각각의 서비스를 설정할수있다.
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
(공식문서 Docker-compose 예시)
도커 엔진 1.13.1 버전 이상, 도커컴포즈 버전 1.6.0 이상에서 사용할 수 있는 기능으로,
컨테이너 실행에 필요한 옵션을 docker-compose.yml 이라는 파일에 담아서 일괄적으로 실행시켜준다
version
첫 줄에는 version 을 명시해준다.
version : '3'
3으로 시작하는 최신버전을 사용한다는 뜻
버전 3부터는 links: 를 통하여 연결해줄 필요가 없다
services
실행하려는 컨테이너들을 정의한다.
서비스의 이름을 지정해주고, 그 안에 이제 도커이미지명, 환경변수 등등 다양한 것들을 입력해 넣어서 구성해준다.
서비스 이름 (지정)
사용하려는 컨테이너를 지정하는 이름과같다
services: #서비스부터 어떤 컨테이너를 이용할 것인지 작성
postgresql: #db이라는 서비스를 이용할것인데
postgre 서비스 이름을 postgresql로 지정하였다
image
사용하려는 이미지
services: #서비스부터 어떤 컨테이너를 이용할 것인지 작성
postgresql: #db이라는 서비스를 이용할것인데
image: postgres:12 #그 서비스의 이미지는 이것과 같고
postgresql에서 사용할 도커 이미지를 적는다.
volumes
volumes:
- ./servers.json:/pgadmin4/servers.json
docker run 으로 db컨테이너 실행시 --volume 옵션으로 연결하던 로컨의 데이터와 같다.
위 과정을 통해 프로젝트 루트 아래의 pgadmin4 에 servers.json 을 저장하였다
environment
services:
postgresql:
environment:
POSTGRES_DB : Chinook
POSTGRES_USER: postgres_admin
POSTGRES_PASSWORD: password
Chinook이라는 Database로, User와 비밀번호를 지정하였다.
restart
restart 공식문서
재실행 여부를 설정한다.
Restarts all stopped and running services.
If you make changes to your docker-compose.yml configuration these changes are not reflected after running this command.
For example, changes to environment variables (which are added after a container is built, but before the container’s command is executed) are not updated after restarting.
If you are looking to configure a service’s restart policy, please refer to restart in Compose file v3 and restart in Compose v2. Note that if you are deploying a stack in swarm mode, you should use restart_policy, instead.
어떠한 구성을 변경했을 때 변경사항의 즉각적인 반영 여부를 나타내는 것 같다.
services: #서비스부터 어떤 컨테이너를 이용할 것인지 작성
postgresql: #db이라는 서비스를 이용할것인데
restart: unless-stopped
윗 부분에서 이제 Postgre를 설정했으면, 이제 Admin부분을 만들어준다
pgadmin:
image: dpage/pgadmin4:4
container_name : pgadmin
ports:
- 5050:80 #외부에서 5050으로 들어왔을 때 내부에서 80번을 보여주겠다
environment:
# PGADMIN_DEFAULT_HOST: postgres_admin
PGADMIN_DEFAULT_EMAIL: user1@pgadmin.com
PGADMIN_DEFAULT_PASSWORD: secret
depends_on:
- postgresql
volumes:
- ./servers.json:/pgadmin4/servers.json
restart: unless-stopped
image는 pgadmin4의 4번태그 이미지를 활용하며, 서비스이름은 pgadmin, container_name또한 동일하게 설정.
ports부분이 있는데, 이 부분을 이제 들어온곳과 연결할 곳을 입력해줘야한다. 여기서는 5050번 포트로 들어왔을때, 내부의 80번 포트와 연결한다는 것이다.
그리고 이후 pgadmin페이지 (localhost:5050)에서 로그인할 이메일,비밀번호를 설정하였다.
depends_on 부분이 있다.
이 부분은 앞서 작성한 postgresql이 실행되고 나서, pgadmin이 실행된다는 뜻이다
이제 실제로 compose만들고, up해서 연결해보자
version: '3.8'
services:
db:
container_name: pg_container # pgadmin에서 서버연결할 때 연결할
image: postgres
restart: always
environment:
POSTGRES_DB: test_db
POSTGRES_USER: root
POSTGRES_PASSWORD: root
ports:
- "5432:5432"
pgadmin:
container_name: pgadmin4_container
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: root
ports:
- "5050:80"
depends_on:
- db
docker-composet up --force-recreate 명령어를 통해 up을 하면서, 혹시 이전에 저장했다가 테스트용으로 했던게 있어도, 새로 반영하도록한다.
이제 pgadmin4 사이트에서
yml파일에 적어놓은, DEFAULT_EMAIL , DEFAULT_PASSWORD를 통하여 로그인한다
로그인을 하면 browser페이지로 넘어가는데, 이곳에서 서버를 클릭해도 아직 연결되어있지않다, server - create
서버생성(연결) connection에 기존에 yml파일에서 세팅했던것들을 입력하여 연결!
서버연결에 성공하고나면, 내가 yml에서 만들었던 db의 POSTGRES_DB가 생성되어있다.
이후, db와 pgadmin을 띄우고난 뒤 DBeaver를 통해 연결해보자
정말 간단하다! 그냥 연결하면서 POSTGRES 설정해주고, localhost의 5432포트와,
Database이름은 내가 기존에 생성한 db로 하고, user와 password를 입력하면 연결완료!
참조 :
도커(Docker) 컴포즈를 활용하여 완벽한 개발 환경 구성하기 | 44BITS
docker-compose공식문서
'Python > Docker' 카테고리의 다른 글
[Docker] 도커를 알기위해 알아야하는 것들 (0) | 2021.08.31 |
---|---|
Docker (0) | 2021.03.09 |