计算机网络/计算机科学与应用/系统/运维/开发

Docker Dockerfile 创建镜像

一、什么是Dockerfile

用来构建镜像文本文件,主要用来灵活方便构建自己需要的镜像


二、创建Dockerfile的步骤


通过dockerfile自定义的镜像后,使用 docker build 构建镜像

然后采用 docker save的命令打包

最后可以通过docker push 提交到私有镜像仓库或者 Docker Hub 



总结,构建镜像三部曲 

1、构建Dockerfile 文件

2、采用docker build 构建镜像

3、采用docker run 依据镜像运行容器 


Dockerfile 需要注意的编写规范:

1、# 表示注释

2、命令必须要大写 最少要带一个参数

3、执行顺序从上到下


三、dockerfile 构建镜像的格式

docker build -t 镜像名:版本号  Dockerfile路径

实例:. 表示当前路径

docker build -t work:v1 . 


四、Dockerfile的组成

主体内容四部分:基础镜像信息、维护者信息、镜像操作指令、和容器启动时执行指令


五、指令说明


FROM  指定构建新image是使用的基础image,必须是Dockerfile第一个有效指令,定义一个基础镜像
LABEL 附加到image之上的元数据,键值格式
ENV  键值对格式设定环境变量,可被其后的指令所调用,且基于新生成的image运行的Container中也会存在这些变量
RUN  以FROM中定义的image为基础环境运行指令命令,生成结果将作为新image的一个镜像层,并可由后续指令所使用。RUN后跟要执行的命令。
CMD  基于dockerfile生成的image运行的container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次。
ENTRYPOINT 类似cmd指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与cmd共存时,cmd的内容将作为该指令中定义的程序的参数
WORKDIR 为RUN  CMD  ENTRPOINT COPY 和 ADD等指令设定工作目录
COPY 复制主机上或者前一阶段结果中文件或目录生成新的镜像层
ADD 与COPY指令相似,但ADD额外也支持使用URL指定的资源作为源文件
VOLUME  指定基于新生成的image运行Container时期望作为Volume使用的目录
EXPOSE 指定基于新生成的Image运行Container时期暴露的端口,但实际暴露与否取决于 docker run 命令选项 
USER  为Dockerfile中该指令后面的RUN、CMD和ENTRYPOING指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID
ARG  定义专用于build过程中的变量,但仅对该指标之后的调用生效,其值可由命令行选项 --build-arg进行传递 
SEHLL 为容器定义运行时使用的默认shell程序,Linux系统默认使用["/bin/sh","-c"] windows默认使用["cmd","/S","/C"]



image.png


六、指令说明

1、FROM 

作用: 指定基础镜像,必须为第一个命令

格式: 

FROM <image> 

FROM <image>:<tag>

FROM <image>@<digest>

实例: 

FROM mysql5.6

注:

tag 或 digest 是可选的,如果不指定,将使用latest版本的基础镜像

2、RUN 

作用: 构建镜像时执行命令

格式: 

RUN <command>

格式:

RUN ["executable", "param1", "param2"]

实例: 

RUN ["executable", "param1", "param2"]

RUN apk update

RUN ["/etc/execfile", "arg1", "arg2"]

注意: 

RUN 指令创建的中间镜像会被缓存,并在下次构建中使用。如果不想使用这些缓存镜像,

可以在构建时指定 --no-cache 参数,如:docker build --no-cache


七、构建一个Ubuntu Dockerfile

FROM ubuntu:22.04

RUN apt-get -y update &&  \
    apt-get -y upgrade  && \
    apt-get instal -y   && \
    cmake git vim curl wget && \
    net-tools openssh-server && \ 
    apt-get install -y build-essential && \
    apt-get install -y python3
docker build -t myubuntu:v1 .


docker

人生活在得失之间,得亦是失,失亦是得。

评论

^