Docker 构建镜像

Docker 构建镜像

环境

Docker: Docker version 19.03.4, build 9013bf583a
System: CentOS Linux release 8.0.1905 (Core)
Python: Python 3.6.8
Flask: Flask 1.0.3
Gunicorn: gunicorn 19.9.0

Dockerfile 指令详解

  • FROM or FROM :

FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。

  • COPY <源路径> <目标路径>

指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。比如: COPY package.json /app

  • ADD <源路径> <目标路径>

ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。比如 <源路径> 可以是一个 URL

  • CMD <命令> or CMD ["可执行文件", "参数1", "参数2"...]

CMD用于指定在容器启动时所要执行的命令

  • ENV or ENV = =...

主要用于设置程序运行时需要的参数

  • EXPOSE <端口1> [<端口2>...]

EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明

  • WORKDIR <工作目录路径>

使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。

  • USER <用户名>[:<用户组>]

USER 指令和 WORKDIR 相似,都是改变环境状态并影响以后的层。WORKDIR 是改变工作目录,USER 则是改变之后层的执行 RUN, CMD 以及 ENTRYPOINT 这类命令的身份。

  • RUN <命令行命令> or RUN ["可执行文件", "参数1", "参数2"]

用于执行后面跟着的命令行命令.

  • VOLUME <路径> or VOLUME ["<路径1>", "<路径2>"...]

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷,可以避免重要的数据,因容器重启而丢失。

构建 Docker 镜像

Dockerfile

# 基于 Python:3.6 基础镜像
FROM python:3.6
# Docker 的工作目录
WORKDIR /app
# 复制文件到工作目录
ADD . /app
# 安装 Python 的依赖
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 设置运行的必要参数
ENV env=dev
# 程序启动的命令
CMD ["gunicorn", "manager:app", "-c", "run.ini"]

application.py

# coding:utf-8

from flask import Flask

app = Flask(__name__)


@app.route('/index')
def index():
    return 'Hello docker'


if __name__ == '__main__':
    app.run(debug=True)

run.ini

workers = 5
threads = 4
daemon = 'false'
worker_class = "gevent"
bind = "0.0.0.0:8000"

requirements.txt

gunicorn
gevent
flask

构建镜像


# docker build -t : 
docker build -t gunicron:v1.0.0 .

创建 Docker 容器

docker run -d --name gunicron-flask -p 8084:8084 gunicron

Docker 容器操作

docker [start | stop | restart] gunicorn-flask

你可能感兴趣的:(Docker 构建镜像)