使用Dockerfile创建镜像
- Dockerfile分为四部分
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
detail
指令 |
说明 |
FROM |
指定基础镜像 |
MAINTAINER |
维护者信息 |
RUN |
运行命令 |
CMD |
启动容器时默认执行命令,最多只能执行一个命令 |
LABEL |
元数据标签信息 |
EXPOSE |
监听端口 |
ENV |
环境变量 |
ADD |
复制<src>到容器<dest>,如果是tar自动解压,src可以是URL |
COPY |
复制本地<src>到容器<dest> |
ENTRYPOINT |
指定镜像默认入口,最多只有一个,可以被docker run --entrypoint 覆盖掉 |
VOLUME |
创建数据卷挂载点 |
USER |
指定运行容器时的USER或UID |
WORKDIR |
为RUN 、CMD 和ENTRYPOINT 指令配置工作目录 |
ARG |
指定一些镜像内使用的参数 |
ONBUILD |
当创建的镜像为其他镜像的基础镜像时执行的操作命令 |
STOPSIGNAL |
指定创建镜像启动的容器接收退出的信号值 |
HEALTHCHECK |
配置启动容器如何进行健康检查 |
- 使用
.dockerignore
文件可以让Docker忽略匹配路径下的目录和文件1 2 3 4 5
| # comment */temp* */*/temp* tmp? ~*
|
desc
指令 |
格式 |
FROM |
<image>:<tag> || <image>@<digest> |
MAINTAINER |
<name> |
RUN |
shell:<command> || exec:["executable", "param1", "param2"] |
CMD |
["executable", "param1", "param2"] || command param1 param2 || [“param1”, “param2”] |
LABEL |
<key>=<value>[<key>=<value>...] |
EXPOSE |
<port>[<port>...] |
ENV |
<key> <value> || <key>=<value>[<key>=<value>...] |
ADD |
<src> <dest> |
COPY |
<src> <dest> |
ENTRYPOINT |
shell:command param1 param2 || exec: ["executable", "param1", "param2"] |
VOLUME |
["/data"] |
USER |
daemon |
WORKDIR |
/path/to/workdir ,如果是相对路径,路径是基于前个WORKDIR 的 |
exampe
1 2 3 4 5 6 7 8
| FROM debian:jessie MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com" ENV NGINX_VERSION 1.10.1-1-jessie RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys .... RUN ln -sf /dev/stdout /var/log/nginx/access.log \ $$ ln -sf /dev/stderr /var/log/nginx/error.log EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"]
|
sys
如果使用alpine镜像
安装软件包需要用apk包管理器替换apt工具
1
| $ apk add --no-cache <package>
|
可以从alpine搜索并确定安装包名称
如果需要指定社区的安装包,则:
1 2
| $ echo "http://dl-4.alpinelinux.org/alpine/edge/teseting" >> /etc/apk/repositories $ apk --update add --no-cache <package>
|