도커 작성 - 여러 컨테이너 간에 명명된 볼륨 공유
저는 도커 컴포지와 v3를 사용하고 있습니다.도커에 볼륨을 마운트하려고 합니다.
./appdata:/appdata
저는 이것을 볼륨으로 한 다음 여러 컨테이너에서 해당 볼륨을 참조하고 싶습니다.볼륨 구성 참조만 표시됩니다.data-volume:
이름이 지정된 볼륨으로, 값이 없으므로 위와 같지 않습니다.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
이렇게 하면 다음과 같은 이점이 있습니다.
오류: '/docker-compose.yml' 파일에서 볼륨 'app-volume'은 문자열이 아닌 매핑이어야 합니다.
분명히 나는 내가 그것을 바꿀 필요가 있다는 것을 알고 있습니다.volumes
키/값 쌍입니다. 서비스 간에 볼륨을 공유할 수 있도록 변경하는 방법을 잘 모르겠습니다.
저도 체크아웃 했습니다.volumes_from
하지만 이것은 효과적으로 다른 컨테이너로부터 상속을 허용합니다.나는 누군가가 사용하는 것을 보았습니다.volumes_from
그들이 원하는 매핑이 포함된 다른 컨테이너에서.command: true
컨테이너가 실제로 실행되지 않도록 설정되어 있습니다. 제가 보기에 이것은 단지 해킹처럼 보입니다.
어떻게 해야 하나요?
다음 작업을 수행하고 있습니다.
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
하지만 그것은 단지 복제일 뿐이고 제가 이름이 붙은 볼륨이 제가 피하는 데 도움이 되기를 바랍니다 :-)
명명된 볼륨은 다음과 같은 방법으로 컨테이너 간에 공유할 수 있습니다.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume:location_in_the_container
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume:location_in_the_container
volumes:
app-volume:
다음은 더 잘 이해하기 위해 사용하는 구성 예입니다.컴퓨터에서 생성된 정적 파일을 노출합니다.web
이름이 지정된 볼륨에 대한 컨테이너:static-content
그런 다음 읽고 서비스를 제공합니다.nginx
컨테이너:
services:
nginx:
container_name: nginx
build: ./nginx/
volumes:
- static-content:/usr/src/app
web:
container_name: web
env_file: .env
volumes:
- static-content:/usr/src/app/public
environment:
- NODE_ENV=production
command: npm run package
volumes:
static-content:
이렇게 하면 명명된 볼륨을 사용하지 않고도 문제를 해결할 수 있습니다.
volumes:
- ./appdata:/appdata
다음과 같이 표시됩니다.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- ./appdata:/appdata
php:
build: ./php/
expose:
- 9000
volumes:
- ./appdata:/appdata
다음 두 가지 옵션 중 하나를 사용할 수 있습니다.
명명된 볼륨: https://docs.docker.com/compose/compose-file/07-volumes/
볼륨 소스의 중복을 방지하고 향후 오타를 방지하기 위한 확장 필드:
version: '3.5'
x-services-volume:
&services-volume
type: bind
source: ./appdata
target: /appdata
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes: *services-volume
php:
build: ./php/
expose:
- 9000
# Use same way as for nginx if target override not needed.
volumes:
- <<: *services-volume
target: /opt/target-override
참고: 이 기능은 버전 3.4 파일 형식부터 사용할 수 있습니다.
이전 답변이 많은 도움이 되었지만(감사합니다!) 공유를 생성하기 위한 옵션을 설정하는 방법을 파악하는 데 시간이 더 걸렸습니다.tmpfs
볼륨(메모리 파일 시스템).같은 상황에 처한 개발자들의 삶이 편해지길 바라는 마음에서 공유합니다.
의 관련 부분만 보여주는 예제docker-compose.yml
:
version: '3'
volumes:
shared-tmpfs:
driver: local
driver_opts:
type: "tmpfs"
device: "tmpfs"
o: "size=256m,uid=1000"
services:
nginx:
volumes:
- shared-tmpfs:/tmp/mytmpfs
php-fpm:
volumes:
- shared-tmpfs:/tmp/mytmpfs
개발/감시 모드에서 SSD를 대량 쓰기(고정 HTML 파일의 빌드 로트)로부터 보호하는 데 사용합니다.
자세한 내용은 다음을 참조하십시오.driver_opts
여기 도커 공식 문서에 있습니다.
언급URL : https://stackoverflow.com/questions/44284484/docker-compose-share-named-volume-between-multiple-containers
'programing' 카테고리의 다른 글
엑셀 서버측은 어떻게 사용하나요? (0) | 2023.08.24 |
---|---|
24시간 후에 만료되는 고유 토큰을 생성하는 방법은 무엇입니까? (0) | 2023.08.24 |
SQL 마지막 날짜 시간 레코드 가져오기 (0) | 2023.08.24 |
pycharm 탭을 공백으로 자동 변환 (0) | 2023.08.24 |
npm을 사용하지 않고 node.js 모듈을 설치하는 방법은 무엇입니까? (0) | 2023.08.24 |