镜像的定制,就是定制每一层所添加的配置、文件,如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本中,用脚本来构建、定制镜像,这个脚本就是Dockerfile
Dockerfile
是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是没每一层应当如何构建的.
Dockerfile ---------??
FROM
指定基于哪个镜像文件来构建新的镜像,尽量使用官方的bash image
示例:
FROM 镜像名/镜像ID[:tag]
LABEL
容器元消息,帮助信息,Metadata,类似于代码注释
示例:
LABEL version="1.0" 版本标示
LABEL maintainer="name @163.com" 声明制作人
RUN
创建镜像时执行的命令
WORKDIR
切换工作目录
COPY
把本机的文件添加到容器中
示例:
COPY flask_web.py /app/ 把本机的flask_web.py文件复制到容器中的/app目录下,会自动创建/app目录
ADD
除了COPY的功能外还有解压功能,应优先使用COPY命令
ENV
设置环境变量,尽可能的使用ENV来设置环境变量,以增加可维护性
示例:
ENV MYSQL_VERSION 5.6 设置一个MySQL常量
RUN yum install -y mysql-server="${MYSQL_VERSION}" 调用MySQL常量
CMD
设置容器启动后默认执行的命令和参数
??如果定义多个CMD,则只有最后一个会执行
??如果 docker run 时指定了其它命令(例如:/bin/bash、python flask_web.py),则CMD命令会被忽略
EXPOSE
网络设置
示例:
EXPOST 8080 暴露容器的8080端口
VOLUME
存储设置
ENTRYPOINT
设置容器启动时运行的命令
让容器以应用程序或服务的形式运行,不会被忽略,一定会执行
关于Shell格式和Exec格式
对于相对的命令,Shell格式与Exec格式的对比如下.Shell格式
RUN yum -y install vim CMD echo "Hello Docker" ENTRYPOINT echo "Hello Docker"
Exec格式
RUN ["apt-get", "install", "-y", "vim"] CMD ["/bin/echo", "Hello Docker"] ENTRYPOINT["/bin/echo","Hello Docker"]
需要注意的是:
通过Shell格式运行的命令可以读取设置的变量,而Exec格式则不可以读取,Exec格式仅仅是执行一个命令.
下面将使用Dockerfile来制作一个Flask Web服务
首先,准备一个用于调用Flask web服务的脚本:
"""flask_web.py文件代码如下""" from flask import Flask app=Flask(__name__) @app.route(‘/‘) def run(): return ‘is ok‘ if __name__ == ‘__main__‘: app.run(host=‘0.0.0.0‘, port=8080) # 我们这里使用的是8080端口
然后,开始写Dockerfile:
# 指定基于哪个基础镜像来构建 FROM python:2.7 # 制作人 LABEL maintainer=‘zyk [email protected]‘ # 安装flask第三方库 RUN easy_install flask # 将本机的flask_web.py文件复制到容器的/app目录下,会自动生成/app目录 COPY flask_web.py /app/ # 进入/app目录 WORKDIR /app # 暴露容器的8080端口 EXPOSE 8080 # 设置容器启动后默认执行的命令和参数,以Exec格式执行,注意:要用双引号 CMD ["python", "flask_web.py"]
最后,制作镜像:
# ?? Dockerfile与flask_web.py文件在同级目录 [[email protected] docker]# ls Dockerfile flask_web.py # 开始制作镜像 [[email protected] docker]# docker build -t zyk/flask .
制作完成后,查看镜像并启动:
# 查一下镜像ID [[email protected] docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zyk/flask latest c4e156f3222a 50 seconds ago 911 MB # 启动镜像 [[email protected] docker]# docker run -d -p 9000:8080 c4e156f3222a
好了,打开浏览器访问测试:
原文地址:https://www.cnblogs.com/zyk01/p/10176551.html