文章目录
1 Dockerfile
Dockerfile其实就是我们用来构建Docker镜像的源码,当然这不是所谓的编程源码,而是一些命令的集合,只要理解它的逻辑和语法格式,就可以很容易的编写Dockerfile。简单点说,Dockerfile可以让用户个性化定制Docker镜像。因为工作环境中的需求各式各样,网络上的镜像很难满足实际的需求。
参考文档:https://docs.docker.com/engine/reference/builder/
1.1 Dockerfile的基本结构
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用 -f 标志指向文件系统中任何位置的Dockerfile。
Dockerfile由一行行命令语句组成,并且支持以#开头的注释行,Dockerfile分为四部分:基础镜像信息、维护者信息、 镜像操作指令和容器启动时执行指令。
1.2 Dockerfile文件说明
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以 # 字符开头则被视为注释。可以在Docker文件中使用 RUN , CMD , FROM , EXPOSE , ENV 等指令。
1.3 Dockerfile常见命令
Dockerfile的常用命令如下:
命令 | 说明 |
---|---|
FROM | 指定基础镜像,必须为第一个命令 |
MAINTAINER | 维护者(作者)信息 |
ENV | 设置环境变量 |
RUN | 构建镜像时执行的命令 |
CMD | 构建容器后调用,也就是在容器启动时才进行调用。 |
ENTRYPOINT | 指定运行容器启动过程执行命令,覆盖CMD参数;ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。 |
ADD | 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget |
COPY | 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 |
WORKDIR | 工作目录,类似于cd命令 |
ARG | 用于指定传递给构建运行时的变量 |
VOLUMN | 用于指定持久化目录 |
EXPOSE | 指定于外界交互的端口 |
USER | 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户 |
1.4 build命令
docker build命令用于使用 Dockerfile 创建镜像,对应语法如下:
docker build [OPTIONS] PATH | URL | -
常用参数有下面这些:
build命令参数特别多。这里只给大家介绍几个常用的参数,如果小伙伴们想了解更多内容,请参考docker官网手册。
1,**–build-arg=[] 😗*设置镜像创建时的变量;
2,**-f 😗*指定要使用的Dockerfile路径;
3,**–rm 😗*设置镜像成功后删除中间容器;
4,–tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
下面编写一个Dockerfile,指定系统时间为上海时区:
FROM mysql:5.7.31
# 作者信息
MAINTAINER mysql from date UTC by Asia/Shanghai "dream21th@dream21th.com"
ENV TZ Asia/Shanghai
进入到编写的Dockerfile所在目录,执行下面操作构建镜像:
[root@localhost mysql]# docker build -t dream21th/mysql:5.7.31 .
构建镜像成功之后,查看镜像列表:
[root@localhost mysql]# docker images
REPOSITORY TAG IMAGE ID CREATE