本例子中主要介绍如何书写Dockerfile并且构建运行镜像。
Step1 基础镜像
所有的Docker镜像都来源于基础镜像,是应用的基础。
在这个例子中,在部署静态HTML文件前,需要用NGINX,因此选择NGINX作为基础镜像。
首先在Dockerfile中使用如下语句指定基础镜像
FROM <image-name>:<tag>
本例子中使用的便是
FROM nginx:1.11-alpine
当然,可以使用latest
而非具体的版本,但是指定具体版本会让你更有安全感并且方便升级。
Step2 运行指令
Dockerfile中,可以使用很多指令来配置基础镜像,常用的主要有COPY
和RUN
命令。
RUN
命令允许执行任何你想要你的镜像执行的命令,例如安装不同的应用或者运行一些构建脚本。RUN命令执行的结果将会被持久化在构建的镜像中,因此要注意,一些临时的或者不必要的文件将会被保留。COPY <src> <dest>
命令允许将文件从宿主机拷贝到容器镜像中。
则有完整的Dockerfile
FROM nginx:1.11-alpine
COPY index.html /usr/share/nginx/html/index.html
Step3 暴露端口
使用EXPOSE <port>
命令指定Docker将打开并且绑定的端口。一次性可以指定多个端口,例如
EXPOSE 80 433
EXPOSE 7000-8000
对于NGINX,选择暴露80端口
FROM nginx:1.11-alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
Step4 默认命令
我们还需要指定如何启动应用。
Dockerfile中的CMD行定义了当启动容器时默认执行的命令。
如果命令需要参数,则推荐使用一个数组。例如
["cmd", "-a", "arga value", "-b", "argb-value"]
将会被解释为
cmd -a "arga value" -b argb-value
对于NGINX,默认的命令为
nginx -g daemon off
可以在Dockerfile中写作
CMD ["nginx", "-g", "daemon off;"]
另外的一个方式便是使用ENTRYPOINT。
Step5 构建镜像
使用docker build
命令构建镜像。
docker build -t my-nginx-image:latest
Step6 运行镜像
docker run -d -p 80:80 <image-id|friendly-tag-name>