Dockerfile文件编写笔记+小实例

先编写一个简单的flask程序

vim app.py

from flask import Flask
import redis

app = Flask(__name__)
# 链接redis做容器间关联验证效果用
rd = redis.Redis(host='redis',port=6379)

@app.route('/')
def hello():
    # Redis Incr 命令将 key 中储存的数字值增一。
    # 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
    # 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
    # 本操作的值限制在 64 位(bit)有符号数字表示之内。
    count = rd.incr("hits")
    return "hello world".format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=5000)


编写Dockerfile

vim Dockerfile

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

FROM python:alpine
COPY . /code
RUN pip install flask redis
WORKDIR /code
EXPOSE 5000
CMD ["python","app.py"]

常用命令解释:

FROM:指定一个基础镜像(父镜像),必须为第一行,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令。

FROM python:alpine
     镜像名:版本

COPY:将主机中的某目录下的内容拷贝到镜像中指定目录下

COPY host-Dir image-dir
     [主机目录] [镜像目录] 

RUN:在镜像容器中执行命令,有两种命令执行方式:

# 1、shell执行
RUN <command>
# 2、exec执行
RUN ["executable", "param1", "param2"]

WORKDIR:配置工作目录。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。

EXPOSE:容器暴露的端口号。在启动容器时需要通过 -P 参数让 Docker 主机分配一个端口转发到指定的端口。使用 -p 参数则可以具体指定主机上哪个端口映射过来。

CMD:容器启动时执行指令,每个 Dockerfile 只能有一条 CMD 命令

VOLUME:创建一个可以从本地或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

VOLUME ["/data"]
# 指令添加多个数据卷
VOLUME ["/data1", "/data2"]

构建容器

docker build -t myweb .

-t:指定镜像名称 

.   指定创建时的目录,可dockerfile文件中的 COPY 后的目录是同一级

启动镜像

docker run -d --rm --link redis -p 8010:5000 myweb # --link 绑定 redis 容器

发布了73 篇原创文章 · 获赞 188 · 访问量 117万+

猜你喜欢

转载自blog.csdn.net/GodDavide/article/details/104112805