Docker的那些事儿—一个例子教你docker compose
上一篇:Docker的那些事儿—一个例子教你docker compose是如何使用的(一)?
上一节我们演示了docker compose的基本用法。然而在实际的项目中,我们可能需要时常修改app.py脚本。那我们修改了脚本后,重新执行docker-compose up会是神马结果呢?
从运行结果来看,结果并不是我们所期望的,浏览器显示的信息并没有变为我们期望的Hello XiaoMing!...。显然,由于app.py已经是容器里的数据了,任何宿主机上的数据修改当然不会影响容器里的数据了。那有什么办法呢?以下四种方法可以作为参考:
1、使用新的数据重新构建新的镜像,启动新的服务(这是最直接,也是最不灵活的做法)
此方法,首先使用docker-compose build构建新的镜像,然后在执行docker-compose up
Build后生成新的镜像
2、进入容器的/code目录修改app.py或者拷贝宿主机上的app.py文件到容器的/code中(docker cp命令)
3、 修改Dockerfile文件,使用VOLUME命令
FROM python:3.4-alpine
ADD ./code
WORKDIR /code
RUN pip install -r requirements.txt
VOLUME [“/code”]
CMD ["python", "app.py"]
重新docker-compose build,然后执行docker-compose up后。
docker container inspect mycompose_web_1查询容器mycompose_web_1挂载点,可见容器启动后将宿主机/var/lib/docker/volumes/460bf6c443a770c7274411e58f95b3f53eed3762930ed12e94277544015bb470/_data挂载到了容器的/code目录下了。
我们修改/var/lib/docker/volumes/460bf6c443a770c7274411e58f95b3f53eed3762930ed12e94277544015bb470/_data目录下的app.py文件,查看结果
4、 修改docker-compose.yml文件
version:'3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
上述参数,实际上是将当前目录挂载到web容器的/code目录下。
docker-compose up后,docker container inspect mycompose_web_1查询
修改当前mycompose目录下的app.py文件
比较上述四种方法:方法四是最简单有效的,其实这也是我们这节要讲的。对于方法一二三需要结合前面章节讲解的知识去理解,本节关于docker-compose.yml的volumes参数就讲到这。下一节我们将尽量详细的讲解docker-compose.yml文件。
下一篇:Docker的那些事儿—细说docker-compose.yml文件