Docker的那些事儿

Docker的那些事儿—一个例子教你docker compose

2018-03-11  本文已影响82人  sjyu_eadd

上一篇: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文件


上一篇下一篇

猜你喜欢

热点阅读