일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- windows
- 시스템엔지니어
- Linux
- cloud engineer
- 그룹정책
- Server
- network
- 네트워크
- It
- 메일보안
- 클라우드엔지니어
- Entra ID
- Azure
- SE
- 리눅스마스터1급
- 클라우드
- Exchange Online
- Microsoft Azure
- 시스템 엔지니어
- 가상화
- Microsoft
- Azure AD
- 리눅스
- aws
- Microsoft 365
- 컴퓨터
- cloud
- Docker
- 시트릭스
- windows server
- Today
- Total
Cloud System Engineer
도커 컴포즈의 활용 본문
도커 컴포즈를 사용하려면 컨테이너 설정을 저장해 놓은 YAML 파일이 필요함
기존에 사용하던 run 명령어를 yaml 파일로 변환 하는것이 도커 컴포즈 사용법의 대부분이다.
yaml 파일은 크게 비전 , 서비스, 볼륨 ,네트워크 정의 4가지 항목으로 구성됨
가장많이 사용하는 것은 서비스 정의이며, 볼륨정의와 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로
사용된다. 각 항목의 하위 항목을 정의하려면 2개의 공백 (스페이스 ) 으로 들여쓰기해서 상위 항목과 구분함.
도커 컴포즈는 기본적으로 현재 또는 상위 디렉터리에 yml 파일을 찾아서 컨테이너를 생성한다.
docker-compose 명령어의 -f 옵션을 사용하면 yml 파일의 위치와 이름을 지정할 수 있음.
docke-compose -f /home/docker/my_compose-file.yml up -d
1. 버전정의
도커 컴포즈 버전 1.10에서 사용할 수 있는 버전ㄴ 3을 기준으로 실습해보자 버전항목은 일반적으로 yaml
파일의 맨 윗부분에 명시된다.
version '3.0'
2.서비스정의
서비스는 도커 컴포즈로 생성할 컨테이너 옵션을 정의한다. 이항목에 쓰인 가 서비스는 컨테이너로 구현되며,
하나의 프로젝트로서 도커 컴포즈에 의해 관리된다.
services
my_container_1:
image......
my_container_2:
image.......
-image: 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정한다.
-links:docker run 명령어의 --env , -e 옵션과 동일하다. 서비스 컨테이너 내부에서 사용할
환경변수를 지원하며, 딕션너리나 배열 형태로 사용한다.
services:
web:
environment:
-MYSQL_ROOT_PASSWORD=mypassword
-MYSQL_DATABASE_NAME=mydb
또는
MYSQL_ROOT_PASSWORD:mypassword
MYSQL_DATABASE_NAME:mydb
-command:컨네이너가 실행될때 수행할 명령어를 설정하며,
docker run 명령어의 마지막에 붙는 커멘드와 같다 Dockerfile의 run 과 같은 배열형태로도 사용할 수 있다.
service:
web:
image:joeng/comosetest:web
command:apachectl-DFOREGROUND
또는
image:joeng/comosetest:web
command:[apachectl, -DFOREGROUND
-depends_on: 특정 컨테이너에 대한 의존 관계를 나타내며,이 항목에 명시된 컨테이너가 먼저 생성되고
실행된다. 다음 예제에서는 web 보다 mysql 컨테이너가 먼저 생성된다.
services:
web:
image:joeng/comosetest:web
depens_on
mysql
image:joeng/comosetest:mysql
특정 서비스의 컨테이너만 생성하되 의존성이 없는 컨테이너를 생성하려면 --no-deps 옵션을 사용한다.
docker-compose up -no-deps werb
-port:docker run 명령어의 -p 옵션과 같으며 서비스의 컨테이너를 개방할 포트를 설정한다.
그러나 단일호스트 환경에서 80:80 과 같이 호스트의 특정 포트를 서비스의 컨테이너에 연경하면
docker-compose scale 명령어로 서비스의 컨테이너 수 를 늘릴 수 있다.
services:
web:
image:jeong/composetest:web
ports:
-"8080"
-"8081-8085"
-"80:80"
-build:해당 항목에 정의된 도커 파일에서 이미지를 빌드해 서비스 컨테이너를 생성하도록 설정함.
services:
web:
build:./composetest
image:jeong/composetest:web
-extends: 다른 yaml 파일이나 현재 yaml 파일에서 서비스 속성을 상속받게 설정함
네트워크 정의
-driverr:도커 컴포즈는 생성된 컨테이너를 위해 기본적으로 브리지 타입의 네트워크를 생성함
그러나 yaml 파일의 driver항목을 정의해서 서비스ㅡ의 컨테이너가 다른 네트워크를 사용 하도록 할 수 있다.
특정 드라이버에 필요한 옵션은 하위 항목인 driver_ops 로 전달됨
version: '3.0'
services:
myservice:
image:nginx
networks:
-mynetwork
networks:
mynetwork:
driver:overlay
driver_opts:
subnet:"255.255.255.0"
IPAddress:"10.0.0.2"
- ipam: IPAM(IP address Manage)를 위해 사용할 수 있는 옵션으로 subnet ,ip 범위 등을 설정할 수 있다.
driver 항목에는 IPAM 을 지원하는 드라이버의 이름을 입력한다.
service:
........
network:
ipam:
driver:mydriver
config
subnet:172.20.0.0/16
ip_range:172.20.5/24
gateway:172.30.5.1
- external: yaml 파일을 통해 프로젝트를 생성할 때마다 네트워크를 생성하는 것이 아닌 기존의 네트워크를 사용
하도록 설정한다.
services:
web:
image:jeong/composetest:web
networks:
-jeong_network
networks:
jeong_network
external:true
4.볼륨 정의
- driver: 볼륨을 생성할 때 사용될 드라이버를 설정한다. 어떠한 설정도 하지않으면 local 로 지정된다.
version: '3.0'
servicer:
.......
volumes:
driver:flocker
driver_opts:
opt:"1"
opt:2
- external: 도커 컴포즈는 yaml 파일에서 volumes-from 옵션 등을 사용하면 프로젝트 마다 볼륨을 생성한다.
이때 external 옵션 을 설정하면 프로젝트를 생성할 때마다 볼륨을 생성하지 않고 기존 볼륨을 사용하도록 설정한다.
myvolume 이라는 볼륨을 web 서비스 컨테이너에 마운트 한다.
services:
web:
image:jeong/composetest:web
volumes:
-myvolume:/var/www/html
volumes:
myvolume:
external:true
5. yaml 파일 검증하기
docker-compose -f (yml 파일경로) config 형태
-> docker-compose config
'리눅스 > docker' 카테고리의 다른 글
도커 볼륨 공유하기 (0) | 2021.09.15 |
---|---|
도커 이미지를 도커 허브에 배포하고 다운받기 (0) | 2021.09.12 |
도커 스웜 노드 다루기 (0) | 2021.02.11 |
도커 swarm (0) | 2021.02.05 |
도커 이미지 배포 (0) | 2021.02.03 |