如果仅限于使用dockerhub里面的镜像,是没办法满足我们实际的应用场景的,所以我们需要创建属于自己的docker镜像。
构建docker镜像需要编写dockerfile,却不知道语法怎么写。
下文我为大家简介,dockerfile参数,以及相应的作用。
FROM
MAINTAINER
RUN
【shell样式】
RUN mkdir -p /test/a
【exec样式】
RUN [“mkdir”,“-p”,“/test/a”]
EXPOSE
端口可以写多个
。在docker run -P(大P)时
,会自动随机物理机的端口映射 EXPOSE 的端口。docker run -p
命令指定其他端口。【多个端口】
EXPOSE [port1,port2]
EXPOSE [80,8080]
CMD
只执行一次,如果有多个CMD默认只会执行最后一个。
ENRTYPOINT
可以传参运行,docker run 时可以用-c指定变参
【例如】
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
指定了ENRTYPOINT,在docker run的时候就不要加/bin/bash,不然会运行出错
COPY
可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则
【例如】
COPY hom* /mydir/
COPY hom?.txt /mydir/
ADD
和COPY一样是复制,但是复制压缩文件时,会自动解压缩。
tar、gzip、bzip2、xz格式复制会自动解压到目标路径
没办法用于复制整个tar文件,要用copy
【用法】
ADD nginx.tar /etc/nginx/
VOLUME
在宿主机上的挂载目录名是随机生成的
,在这个目录下/var/lib/docker/volumes/
【用法】
volume ["/data"]
docker run -v 主机目录:容器目录:权限 -itd 镜像名
例如:
docker run --name nginx -v /data:/nginx:ro -itd nginx_images
修改挂载点,使用-v会安全点
权限可以为ro只读、rw读写
WORKDIR
WORKDIR 中需要指定绝对路径
【用法】
WORKDIR /workdir
ENV
【例如】
# 设置nginx =/usr/share/nginx/html/, 在后续的指令中可以通过$nginx引用:
ENV nginx /usr/share/nginx/html/
COPY index.html $nginx
USER
用户和用户组必须提前已经存在
【用法】
USER user_name/uid
USER user:group
USER uid:gid
ONBUILD
【例如】
# 后续创建的目录会自动重新上传dockerfile目录里的index.html文件
ONBUILD COPY index.html /usr/share/nginx/html/
LABEL
可以使用docker inspect命令查看label
【例如】
LABEL image.version="1.0"
【多个LABLE方法1,用“\”换行写】
LABEL image.version="1.0" \
image.creator="wbh"
【多个LABLE方法2】
LABEL image.version="1.0" image.creator="wbh"
HEALTHCHECK
【语法】
HEALTHCHECK [<options>] CMD <cmd>
--interval=<间隔>:两次健康检查的间隔,默认为 30 秒。
--timeout=<间隔>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒。
--retries=<次数>:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次。
--start-period=<间隔>: 应用的启动的初始化时间,在启动过程中的健康检查失效不会计入,默认 0 秒(从 V17.05 引入)。
在 HEALTHCHECK [选项] CMD 后面的命令,格式和 ENTRYPOINT 一样,分为 shell 和 exec 格式。命令的返回值决定了该次健康检查的成功与否:
0:成功
1:失败
2:保留值,不要使用
ARG
但是ARG设置的是局部变量
,只在dockerfile里面生效.在docker build 时可以使用 --build-arg 定义变量的值。
不建议在构建时使用ARG传递密钥、用户凭证等信息,因为构建时的信息任何用户都可以通过docker history看到
nginx的dockerfile模板。
需要有个基础的镜像,基于这个镜像创建自定义的镜像,可以使用官方的centos镜像
docker pull centos
注意:构建镜像的文件名必须为dockerfile,目录可以自定义
mkdir /nginx/
vim /nginx/dockerfile
FROM centos
MAINTAINER daoxiang
RUN yum install wget -y
RUN yum install nginx -y
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
#创建index.html文件
vim /nginx/index.html
hello,world!!!
docker build -t “images_name:tag” dockerfile_path
-t 用于命名镜像名和版本
-f 指定dockerfile目录的绝对路径
#制作镜像
docker build -t “wbh/nginx:v1” /nginx/
#基于自己的镜像创建容器
docker run -itd -p 80 --name=nginx wbh/nginx:v1
#查看容器地址
docker inspect nginx
# curl 容器ip
curl 172.17.0.2
# 显示出hello,world! 就成功了