mjeongriver
article thumbnail
Published 2023. 3. 31. 14:55
day96-docker compose TIL/Docker

1. 도커 컴포즈

각각의 컨테이너들을 제어하고 동작할 수 있게 하는 통합관리 툴입니다. 도커컴포즈 설정 파일은 YAML또는 YML로 생성합니다. 도커컴포즈 문법에 따라 설정 파일을 작성하면 여러 컨테이너를 순서대로 처리하는 작업을 한번에 처리할 수 있습니다. 도커컴포즈 파일을 실행시키는 명령문으로 동작시킵니다.

기존에 사용하던 run 명령어를 yaml 파일로 변환하는 것이 도커 컴포즈 사용법의 대부분입니다.

 

도커컴포즈는 운영체제에 미리 설치되어 있어야 합니다.(window 환경은 자동설치 됩니다)

docker compose version

 

리눅스에서는 추가 설치가 필요합니다.

https://docs.docker.com/compose/install/other/

 

도커 레퍼런스

https://docs.docker.com/reference/

 

Reference documentation

 

docs.docker.com

 

2. 도커 컴포즈 파일 명령어

최상위(top) 속성 정의

  • version의 정의

-  yaml 파일 포맷의 버전을 나타냅니다. 도커 컴포즈 버전마다 사용하는 yaml 포맷 버전이 있으므로 도커 컴포즈 버전은 도커 엔진 버전에 의존성이 있으므로 가능하면 최신 버전을 사용하는 것이 좋습니다.

 

  • services의 정의

-  서비스는 도커 컴포즈로 생성할 컨테이너 옵션을 정의합니다. 이 항목에 쓰인 각 서비스는 컨테이너로 구현됩니다.

하나의 프로젝트로서 도커 컴포즈 에 의해 관리됩니다.

서비스의 이름은 services의 하위 항목으로 정의하고, 컨테이너의 옵션은 서비스 이름의 하위 항목에 정의합니다.

 

  • networks의 정의

- 네트워크는 최상위 networks섹션 아래에 네트워크 이름을 지정하여 만들 수 있습니다.

[networks](<https://docs.docker.com/compose/compose-file/05-services/#networks>)서비스는 서비스 하위 섹션 에서 네트워크 이름을 지정하여 네트워크에 연결할 수 있습니다.

 

  • volumes의 정의

volumes 섹션에서는 여러 서비스에서 재 사용할 수 있는 명명된 볼륨을 구성할 수 있습니다.

 

- 도커 컴포즈 파일 사용 예시 1

 

- 도커 컴포즈 실행 명령

 

 

3. 도커 컴포즈 시나리오 1 - volume 사용하기

  • 도커컴포즈 설정파일을 만들 폴더를 만듭니다. (third폴더생성)
  • docker-compose.yml파일을 생성
  • 컴포즈 명령문을 작성

예제1 - 호스트디렉토리를 직접마운트 하기

호스트의 host_dir폴더와, 컨테이너의 upload 폴더를 연결해서 사용합니다. (물리 경로를 지정하는 장점이 있습니다)

 

예제2 - 새로운 볼륨과 함께 마운트하기

볼륨 test-volume을 생성하며 연결하는 방법입니다.

docker run명령문과 유사합니다.

 

폴더명-test-volume 이 생성된 것을 확인할 수 있습니다.

 

  • 컴포즈를 동작
docker compose up
docker-compose up -d (백그라운드실행)

 

  • 실습 후 도커 관련 파일을 삭제
docker compose down

 

4. 도커 컴포즈 시나리오 2 - network 사용하기

도커 컴포즈는 시작할 때 default네트워크를 자동으로 생성하게 됩니다.

만약 기존에 동작되는 서비스(데이터베이스) 가 있다면 docker network connect [네트워크명] [서비스명] 명령을 이용해서 서비스와 연결해주면 됩니다.

  • 실습으로 구축했던 도커 컴포즈에 기존에 돌아가는 도커 데이터베이스 연결
docker network connect 네트워크명 컨테이너명

 

도커 컴포즈도 networks속성을 이용해서 새로운 네트워크를 생성하고 서비스를 연결 할 수 있습니다.

 

test-network가 새롭게 생성되고, server1은 test-network로 자동연결 됩니다.

 

5. 도커 컴포즈 시나리오 3 - 여러 서비스를 한번에 사용하기

여러 컨테이너를 한번에 생성하고 실행해 줄 수 있습니다. 아래 예제는 기존 서비스는 이미지 기반의 빌드로 서비스1로 실행하고, mysql이미지를 다운받아서 서비스2로 실행하는 예제입니다.

 

동일한 test-network로 묶어서 컨테이너간 통신이 가능하도록 처리

 

version: "3.9"
services: #동작시킬 컨테이너들을 기술합니다.
server1: #컨테이너의 이름1
build: #빌드할 도커파일의 위치
C:\Users\user\Desktop\course\boot\work\BootMyweb
ports: #컨테이너의 포트포워딩
- "8585:8484"
volumes: #볼륨설정( 볼륨명 : 컨테이너폴더 )
- test-volume:/upload
networks : #네트워크설정 (아래 네트워크의 이름)
- test-network
depends_on :
- webserver-mysql
webserver-mysql: #컨테이너의 이름2
image: "mysql" # 이미지명
ports:
- "3308:3306" # 기존서비스가 있는 경우 3308-> 3306 포트포워딩
networks :
- test-network
environment: # mysql이미지의 필요한 환경변수 전달
MYSQL_ROOT_PASSWORD: "1234"
volumes : #볼륨명
 test-volume: {}
networks : #네트워크명

test-network: {}

 

연결 데이터베이스에서는 service명을 따라갑니다

 

'TIL > Docker' 카테고리의 다른 글

day96-docker hub 저장소(feat.registry)  (0) 2023.03.31
day96-docker volume  (0) 2023.03.31
day96-docker 네트워크  (0) 2023.03.31
day96-dockerfile  (0) 2023.03.31
day96-docker  (0) 2023.03.31
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그