docker复制文件从一个容器到另一个?
我是一个非常新手,整个docker和docker组成。
这是我想要做的
- docker构build
- docker-compose $ COMPOSE_ARGS运行–rm task1
- docker-compose $ COMPOSE_ARGS运行–rm task2
- docker-compose $ COMPOSE_ARGS运行–rm combine-both-task2
- docker-compose $ COMPOSE_ARGS运行–rm selenium-test
和一个像这样的docker-compose.yml
task1: build: ./task1 volumes_from: - task1_output command: ./task1.sh task1_output: image: alpine:3.3 volumes: - /root/app/dist command: /bin/sh # essentially I want to copy task1 output into task2 because they each use different images and use different tech stacks... task2: build: ../task2 volumes_from: - task2_output - task1_output:ro command: /bin/bash -cx "mkdir -p task1 && cp -R /root/app/dist/* ."
所以现在所有需要的文件在task2容器中…我将如何启动一个Web服务器,并暴露与task2内容的端口?
卡在这里…我如何访问我的combine-tasks / Dockerfile中的task2_output的东西
combine-both-task2: build: ../combine-tasks volumes_from: - task2_output
任何帮助是极大的赞赏。 谢谢
在Docker的最新版本中, 命名卷取代数据容器是在容器之间共享数据的简单方法。
docker volume create --name myshare docker run -v myshare:/shared task1 docker run -v myshare:/shared -p 8080:8080 task2 ...
这些命令将设置一个本地卷,并且-v myshare:/shared
参数将使该共享可用作每个容器内的文件夹/shared
。
要在撰写文件中expression这一点:
version: '2' services: task1: build: ./task1 volumes: - 'myshare:/shared' task2: build: ./task2 ports: - '8080:8080' volumes: - 'myshare:/shared' volumes: myshare: driver: local
为了testing这个,我做了一个小项目:
- docker-compose.yml (above) - task1/Dockerfile - task1/app.py - task2/Dockerfile
我使用节点的http服务器作为task2/Dockerfile
:
FROM node RUN npm install -g http-server WORKDIR /shared CMD http-server
和task1/Dockerfile
使用python:alpine
,来显示两个不同的堆栈书写和阅读。
FROM python:alpine WORKDIR /app COPY . . CMD python app.py
这里是task1/app.py
import time count = 0 while True: fname = '/shared/{}.txt'.format(count) with open(fname, 'w') as f: f.write('content {}'.format(count)) count = count + 1 time.sleep(10)
docker-compose.yml
四个文件,并通过docker compose up
docker-compose.yml
目录中docker-compose.yml
– 然后访问$ DOCKER_HOST:8080看到一个稳定更新的文件列表。
此外,我使用docker版本1.12.0
和组成版本1.8.0
但这应该为几个版本回来。
请务必查看Docker文档,以了解可能在此处错过的详细信息:
https://docs.docker.com/engine/tutorials/dockervolumes/