docker中怎么利用Dockerfile创建自定义镜像
本篇文章为大家展示了docker中怎么利用Dockerfile创建自定义镜像,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
我们提供的服务有:成都做网站、网站设计、外贸营销网站建设、微信公众号开发、网站优化、网站认证、察雅ssl等。为千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的察雅网站制作公司
Dockerfile是一个文本格式的配置文件,用户可以使用dockerfile来快速创建自定义镜像。指令包括“配置指令”、“操作指令”。
配置指令
FROM
FROM debian:jessie
dockerfile的第一行指令,指定基础镜像
ARG
ARG VERSION=9.3
定义创建镜像过程中的临时变量,相当于dockerfile运行中的临时变量
LABEL
LABEL version="1.1.1.1"
为生成的镜像添加元数据标签信息,方便过滤
EXPOSE
EXPOSS 22 80 443
声明镜像内服务监听端口,如果需要映射出来,启动容器时使用-p hostport:container_port
参数映射指定端口。
ENV
ENV APP_VERSION=1.0.0
指定环境变量,方便给后续RUN
使用,可以被docker启动时指定的--env给覆盖
ENTRYPOINT
ENTRYPOINT ["tail"]
指定默认入口命令,作为启动容器时候的根命令执行,每个dockerfile中只有一个ENTRYPOINT,运行时可以被--entrypoint参数覆盖,与CMD
参数的区别,在“操作指令CMD中说明”
VOLUME
VOLUME ["/data"]
挂载数据卷
USER
USER daemon
指定运行容器时的用户名或UID,后续的RUN指令也会使用该用户身份,也可创建一个用户RUN groupadd -r postgres && useradd --no-log--init -r -g postgres postgres
需要获取管理员权限使用gosu
命令
WORKDIR
WORKDIR /app
为后续的RUN,CMD,ENTRYPOINT指令配置工作目录
ONBUILD
ONBUILD RUN /python-build --dir /user/app
在dockerfile中指定该参数,当子dockerfile使用该dockerfile创建出来的镜像为基础镜像时,会先执行该命令。优先用于创建自动编译,检查基础镜像时使用
STOPSIGNAL
STOPSIGNAL signal
指定创建镜像启动的容器接收退出的信号值
HEALTHCHECK
HEALTHCHECK NONE
:不进行健康检查HEALTHCHECK CMD command
:根据使用命令返回值是否为0,为0则健康,默认30s检查一次,等待结果30s超时,重试3次。如果不健康,会在 STATUS中显示unhealthy
SHELL
SHELL ["/bin/sh","-c"]
指定其他命令使用shell时的shell类型,windows系统的分隔符不一致,在dockerfile的开头中使用#escape='
来转译
操作指令
RUN
RUN apt-get update
RUN ["/bin/bash","-c","apt-get update"]
运行指定指令,每次运行基于上一次运行的基础镜像生成新的镜像层
CMD
CMD ["python","run.py"]
或CMD python run.py
指定启动容器时默认执行的命令,当时用ENTRYPOINT
参数时,CMD
的参数会作为默认参数传入ENTRYPOINT
,如:CMD [“tail”,"-f","/usr/aaa"]
ENTRYPOINT ["tail"]
凭借拼接为tailf tailf -f /usr/aaa
,显然这个命令会有异常,需要注意合理使用。
COPY
COPY . /app
复制当前目录下所有文件到/app目录,基础镜像没有这个目录会创建出来
ADD
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
COPY的高级命令。
如果<源路径>
为一个tar
压缩文件的话,压缩格式为gzip
,bzip2
以及xz
的情况下,ADD
指令将会自动解压缩这个压缩文件到<目标路径>
去,如果不为压缩文件,则与COPY
一致,如果需要压缩文件拷贝进去,则需要使用COPY
命令
多阶段构建
#构建第一段,创建编译环境 FROM golang:1.8-alpine as builder RUN apk --no-cache add git WORKDIR /go/src/github/go/HelloWorld/ RUN go get -d -v github/go-sql-driver/MySQL COPY app.go . #编译环境 RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . #构建第二段,运行环境镜像 FROM alpine:latest as prog RUN apk --no-cache add ca-certificates WORKDIR /root/ #--from=0从编译环境容器中将编译好的二进制文件拷贝到当前目录 #COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf,也可拷贝其他镜像中的文件 COPY --from=0 /go/src/github/go/Helloworld/app . CMD ["./app"]
.dockerignore文件
.idea __pycache__ itchat.pkl QR.png
制作镜像时不将这些文件传入镜像,减少镜像体积,加快制作过程。
dockerfile经验
尽量合并ADD RUN COPY
等命令,减少惊喜那个层数,恰当多步骤创建,精简基础镜像,使用.dockerignore文件,减少外部源的干扰。
上述内容就是docker中怎么利用Dockerfile创建自定义镜像,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
网站标题:docker中怎么利用Dockerfile创建自定义镜像
网站链接:http://scjbc.cn/article/gihjhd.html