Docker第四篇-Dockerfile制作Docker镜像


这一篇主要介绍Dockerfile命令的使用说明及如何使用Dockerfile制作简单镜像

制作简单Mysql镜像

创建目录

mkdir /tmp/mysql
cd /tmp/mysql

新建Dockerfile文件,输入如下内容并保存

vim Dockerfile

#输入如下内容
FROM mysql:5.7

COPY my.cnf /etc/mysql/

EXPOSE 3306

CMD ["mysqld"]

新建my.cnf文件,输入如下内容并保存

vim my.cnf

#输入以下内容
[mysqld]
##################基础设置##################
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect=‘SET NAMES utf8mb4‘

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

编译

docker build -t myself-mysql:5.7 .

注意:

  • myself-mysql为自定义的镜像名称
  • 5.7为镜像版本号
  • 命令的最后一定要有 . 符号,表示docker使用当前目录的Dockerfile文件进行镜像的制作

这样,一个简单的镜像就做成了,接下来说明Dockerfile文件内的各个命令的作用

Dockerfile命令说明

指令
说明
FROM 必填,指定锁创建镜像的基础镜像
MAINTAINER 指定维护者信息,该信息将会写入生成镜像的Author属性域中,如:MAINTAINER docker_user [email protected]
RUN 运行命令
CMD 指定启动容器时默认执行的命令
LABEL 指定生成镜像的元数据标签信息
EXPOSE 声明镜像内服务所监听的端口
ENV 指定环境变量
ADD 赋值指定的src路径下的内容到容器中的dest路径下
COPY 赋值本地主机的scr路径下的内容到容器中的dest路径下;一般情况下推荐使用COPY而不是ADD
ENTRYPOINT 指定镜像的默认入口
VOLUME 创建数据挂载点
USER 指定运行容器时的用户名或UID
WORKDIR 配置工作目录
ARG 指定镜像内使用的参数
ONBUILD 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令
STOPSIGNAL 容器退出的信号
HEALTHCHECK 如何进行健康检查
SHELL 指定使用SHELL时的默认SHELL类型

上述命令中,常用的命令其实不多,接下来对常用的命令进行详解:

  • FROM:指定所创建的镜像的基础镜像,如果本地不存在,则默认会去Docker Hub下载指定镜像。格式为:FROM image,或FROM image:tag。任何Dockerfile中的第一条指令必须为FROM指令。并且,如果在同一个Dockerfile文件中创建多个镜像,可以使用多个FROM指令(每个镜像一次)

  • RUN:运行指定命令

    两种运行格式

    • shell格式:RUN [command]
    • exec格式:RUN [“可执行文件”, “参数1”, “参数2”]

    每条RUN指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用\换行,如下:
    RUN apt-get update
    && apt-get install -y libsnappy-dev zliblg-dev libbz2-dev
    && rm -rf /var/cache/apt

  • CMD :容器启动命令,启动方式和RUN类似,也有两种。每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时指定了运行的命令(作为run的参数),则会覆盖掉CMD指定的命令

    • shell格式:RUN [command]
    • exec格式:RUN [“可执行文件”, “参数1”, “参数2”]
  • EXPOSE:声明镜像内服务所监听的端口,格式为:EXPOSE [port] [port]…],如:EXPOSE 22 80 443 3306。

    注意:该命令只是起到声明作用,并不会自动完成端口映射。在容器启动时需要使用-P(大写P),Docker主机会自动分配一个宿主机未被使用的临时端口转发到指定的端口;使用-p(小写p),则可以具体指定哪个宿主机的本地端口映射过来

  • COPY:复制本地主机的src下的内容到镜像中的dest下,路径同样支持正则。

    格式为:COPY [src] [dest]。
    src为本地主机所在目录的一个相对路径、文件或目录
    dest为容器内的目录,目标路径不存在时,会自动创建
    当使用本地目录为源目录时,推荐使用COPY而不是ADD。

  • ADD:和COPY指令作用一致,该指令将复制指定的src路径下的内容到容器中的dest路径下。

    格式为:ADD[src] [dest]。
    [src]可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(如果是tar文件,会自动解压到[dest]路径下)。
    [dest]可以使镜像内的绝对路径,或者相当于工作目录(WORKDIR)的相对路径。路径支持正则表达式。

  • ENV:设置环境变量。

    格式有两种:ENV [key] [value]或ENV [key1]=[value1] [key2]=[value2]…。
    无论是后面的其它指令,如 RUN ,还是运行时的应用,都可以直接使用这里定义的环境变量

总结

制作镜像的步骤如下:

  • 编写Dockerfile文件及其他相关的使用到的配置文件
  • 将Dockerfile和配置文件放在同一个目录
  • 进入该目录,执行命令:docker build -t [容器名称] .

猜你喜欢

转载自blog.csdn.net/supermao1013/article/details/83051379
今日推荐