该文章介绍dockerfile中的参数及其作用,并部署flask简单项目,实现web访问效果
1. Dockerfile概念
1. dockerfile是自定义镜像的一套规则
2. dockerfile由多条指令构成,dockerfile中的每一条指令都会对应于docker镜像中的每一层,因为docker是分层存储的
2. 参数详解
FROM
构建镜像的基本镜像
FROM Centos:7
MAINTAINER
指定维护者 名字或者邮箱
MAINTAINER xiaoli
ENV
设置环境变量,区别ARG在于ENV构建镜像和启动容器时都可以调用
ARG
设置环境变量,只有在构建镜像时会调用
ENV NAME='XXX'
ARG NAME='XXX'
ARG MYSQL_VERSION=5.6
EXPOSE
指定端口和协议帮助使用该镜像的人,快速理解该容器的业务,一般不会映射到宿主机,一般-p指定
EXPOSE 80/TCP # 指定容器内的端口是80 tcp协议
EXPOSE 3306 # 指定容器内的端口是3306 应该要运行mysql容器
VOLUME
容器运行产生的数据挂载到宿主机上类似于mount挂载分区,保证容器存储层无状态,会自动生成宿主机的挂载目录。或者启动容器时通过-v指定
VOLUME /data # 指的是容器内存储数据路径是/data 会自动生成宿主机映射的目录,docker inspect 容器id查看
WORKDIR
目录的切换,容器跑起来时的工作目录
WORKDIR /opt # 切换到opt容器跑起来时的工作目录
USER
用于改变环境,切换变量
USER xiaoli # 改变环境变量切换用户
ADD / COPY
都是用于将宿主机上面的文件添加到容器中,ADD添加的压缩包会自动解压,COPY添加的不会但是会保留原文件的基本信息
ADD /tmp/hello.txt /usr/bin/ # 拷贝hello.txt文件到bin目录下
COPY /tmp/hello.txt /usr/bin/
RUN / CMD / ENTRYPOINT
RUN是构建镜像时会执行的命令一般是安装一些包
CMD是启动容器时执行的命令,当构建好镜像后需要在传参时,在docker run 后面传参会覆盖之前CMD中的内容
ENTRYPOINT是启动容器时执行的命令,当构建好镜像后需要在传参时,在docker run 后面传参不会覆盖之前CMD中的内容
RUN yum install xxx -y # 安装xxx包
CMD ['','',''] # Linux命令用引号逗号分隔开
ENTRYPOINT ['','','']
3. 部署简单的python-flask项目
flask代码,用简单的框架代码测试
# coding:utf8
form flask import Flask
app=Flask(__name__)
@app.route("/hello")
def hello():
return "hello docker"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8080)
# 访问宿主机ip映射到容器内
编写dockerfile
FROM centos:7
RUN curl -o
RUN curl -o
RUN yum makecache fast
RUN yum install python3-devel python-pip -y
RUN pip install flask
COPY test_flask.py /opt
WORKDIR /opt
EXPOSE 8080
CMD ['python','app.py']
构建镜像
docker build -t 'flasktest' .
启动容器
docker run -d --name my_flask_docker -p 80:8080 flasktest
访问页面 当前ip:80/hello