docker container run -it --name centos01 --net test1net centos:7
services:
web:
image: httpd
ports:
- "80"
command: httpd -D FOREGROUND
depends_on:
- db
links:
- db:mysql
networks:
- test1net
db:
image: mysql:5.7
environment:
- MYSQL_DATABASE=testdb
- MYSQL_ROOT_PASSWORD=test123
networks:
- test1net
networks:
test1net:
external: true
그냥 정의만 하면 디렉터리 이름 + 작성한 이름의 새 network 가 생성된다. 이때, external 옵션을 사용하면, 해당 이름의 새 네트워크 생성이 아닌 기존에 생성된 network 를 활용하게 해줄 수 있다
- external: true 는 새 network 가 만들어지지 않고, 기존 network 에 연결되게 하는 옵션이다
- 새 network 생성시 이름은 디렉터리 이름_작성한 이름 으로 생성된다
services 의 컨테이너에 network 를 지정하면, 밑에 networks 에 작성된 network 를 참조하게 된다. 만약, networks 에 network 를 정의하지 않으면, 새 network 가 생성된다
배포한 컨테이너의 상세 정보를 확인하면, 지정한 network 에 연결된 것을 확인할 수 있다
네트워크 리스트를 확인하면 새 네트워크가 생성되지 않은 것을 확인할 수 있다
위와 같이 구성해보았다. 이를 통해 같은 네트워크에 있는 컨테이너들을 같은 네트워크 상의 다른 컨테이너를 통해 관리해줄 수 있다
- 이때, 이 외부 스토리지의 volume 을 persistent volume ( pv ) 라고 한다
p. 230
services:
web:
volumes:
- testvolume1:/var/www/html # 볼륨을 연결
- testvolume2:/var/www/html # 새 볼륨을 생성하여 연결
volumes:
testvolume1:
external: true # 기존에 만들어 둔 testvolume 을 사용한다
testvolume3: # 새 볼륨 생성
위와 같이 volume 에 external 옵션을 true 로 하여 기존의 volume 을 사용하게 정의하자
사용할 volume 을 하나 생성해주고, 컨테이너를 배포하면 volume 이 새로 생성되지 않고, 기존의 지정한 volume 과 연결된다
compose 에서 생성한 volume 과 network 는 down 을 통해 컨테이너를 삭제하면 같이 삭제된다. 허나, compose 가 아닌 기존에 생성한 volume 과 network 는 down 을 통해 컨테이너를 삭제해도 volume 과 network 는 삭제되지 않는다
extend 옵션은 yaml 파일을 추가적으로 만들거나 하나의 yaml 내에서 추가 컨테이너 내에 기본 내용을 작성하고, 이를 다른 파일이나 서비스에서 상속하여 사용하는 방법
주로, 두 개의 파일을 만들어 두고, 이를 상속받는 방법을 사용한다
version: '3.7'
services:
web:
extends:
file: extend-compose.yml
service: testweb
- 사용할 파일은 extend-compose.yml 이며, 해당 파일에서 정의한 service 중 testweb 에서 정의한 내용을 가져와서 사용한다는 것 이다
- extend 로는 link 와 같은 의존성이 있는 옵션들은 가져올 수 없다
version: '3.7'
services:
testweb:
image: httpd
ports:
- "80"
dc -f docker-compose.yml -f extend-compose.yml up -d
rapa@rapa:~/0822/test2$ cat docker-compose.yml ; echo ; cat extend-compose.yml
version: '3.7'
services:
web:
extends:
file: extend-compose.yml
service: testweb
version: '3.7'
services:
testweb:
image: httpd
ports:
- "80"
p. 228
version: '3.7'
services:
web:
build: .