例子
from python:3RUN pip install flaskRUN pip install redisRUN mkdir /dataCOPY hello.py /data/WORKDIR /dataEXPOSE 5000ENV FLASK_APP=/data/hello.pyENTRYPOINT ["flask", "run", "-h", "0.0.0.0"]
解释
- from:表示基础镜像是 python:3;
- RUN:表示在 docker build 的时候会执行后面的几个命令;
- COPY:拷贝文件或者目录都可以;
- WORKDIR:表示启动容器之后,当前的工作目录;
- EXPOSE:表示容器要暴露 5000 端口;
- ENV:环境变量;
- ENTRYPOINT:表示 Docker 容器的启动进程。这里 entrypoint 中的 flask run 我们增加了参数 -h 0.0.0.0。如果不加这个参数的话,进程默认绑定到 127.0.0.1,外面是没有办法访问的。
docker run -p 5000:5000 --link redis-test:redis-host -d --name web web:v1
其中有一个运行参数需要进行简单说明,也就是 —link。link 后面跟一对映射的值,左侧的为已经存在的 Docker 容器,右侧的为该容器映射到我们启动的 Docker 应用中的 host 名字,这里也就是 web 这个 Docker 容器。我们下面通过 docker exec 进入到容器中看一下 link 是怎么做的。
[root@docker ~]# docker exec -ti 64eef1f67c39 /bin/bash
root@64eef1f67c39:/data#
我们查看一下 hosts 文件。
root@64eef1f67c39:/data# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.5 redis-host 0d748e8ce766 redis-test
172.17.0.6 64eef1f67c39
我们可以看到 redis-host 已经被写到 hosts 中,所以我们在 web 这个 Docker 容器中就可以通过 redis-host 这个主机名访问到 Redis 容器了,这也是我们的应用代码的写法。
