首页 新闻 会员 周边

如何编写docker-compose配置文件实现从一个容器向另一个容器复制文件夹

0
悬赏园豆:100 [已解决问题] 解决于 2017-06-05 11:19

假设有2个docker镜像image-a与image-b,想通过docker-compose实现从容器A(FROM image-a)复制一个文件夹到容器B(FROM image-b),而且完成这个文件夹的复制操作是容器A存在的唯一目的。请问如何编写这样的docker-compose配置文件?

dudu的主页 dudu | 高人七级 | 园豆:31007
提问于:2017-06-04 17:52
< >
分享
最佳答案
0

使用 v3 的 volumes 配置实现了。通过 volumes 配置一个共享存储(比如这里叫cache-service),在容器A中将需要需要共享的文件夹映射大这个共享存储,在容器B中映射一个文件夹路径到这个共享存储。示例docker compose配置文件如下:

version: '3'
services:
  dotnet-publish: 
    image: cnblogs/cache-service:latest
    volumes: 
      - cache-service:/app/Cnblogs.Cache.WebApi/publish 

  dotnet-run:
    image: microsoft/aspnetcore:2.0
    volumes:
      - cache-service:/app
    command: bash -c "cd /app && dotnet Cnblogs.Cache.WebApi.dll"
    labels:
      aliyun.routing.port_80: cache
      aliyun.lb.port_80: tcp://lb-xxx:80

volumes:
   cache-service:
dudu | 高人七级 |园豆:31007 | 2017-06-04 22:40
其他回答(1)
1

image-a里的需要共享到b的数据是不变的,那为什么不在创建image-b时包含进去?

如果是变化的数据比如db_data或者log_data,则不需要专门的镜像,将需要共享的文件夹挂载后通过volumes_from 共享给需要使用的容器即可。

比如共享logdata我是这么配置的:

logdata:
  mem_limit: 10m
  image: debian:jessie
  volumes:
    - /log:/log
    - /etc/localtime:/etc/localtime
  command: echo "Data-only container for log usage"


website:
  mem_limit: 500m
  restart: always
  image: registry.cn-hangzhou.aliyuncs.com/jz/home:website-0305
  ports:
    - "2323:2323"
  volumes_from:
    - logdata
  environment:
  command: /usr/local/bin/gunicorn  -b :2323  --config /var/www/app/gunicorn-config.py  runserver:app

nginx2:
  mem_limit: 50m
  restart: always
  image: nginx:1.8.1
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ~/website/config/nginx.conf:/etc/nginx/nginx.conf
    - /etc/letsencrypt/archive:/etc/nginx/ssl
  volumes_from:
    - logdata
收获园豆:100
today4king | 园豆:3499 (老鸟四级) | 2017-06-04 19:09

image-a是基于 microsoft/aspnetcore-build:2.0 镜像 build 自己项目的源代码创建的镜像,image-b就是微软官方的 microsoft/aspnetcore:2.0 镜像。

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2017-06-04 21:12

v3 已经不支持 volumes_from 了

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2017-06-04 22:02

@dudu: 哇用v3啦。现在用volumn name替换了,docker发现大家都这么用volumes_from,改为name volumn后就更简洁了,上面logdata容器就不再需要了。

支持(0) 反对(0) today4king | 园豆:3499 (老鸟四级) | 2017-06-07 12:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册