docker教程系列三

导航

使用dockerfile打包镜像

上一篇文章,我们实现了在一个基础的ubuntu镜像中运行我们的程序。但是运行程序的过程手动执行行命令式一件很麻烦的事情。
接下来我们又把执行的命令协程了脚本,提高了一定的效率。但是如果要启动多个容器,我们的自制脚本每次都要重新安装配置一次这个过程是很耗时的。有没有更简单的办法呢?有的下面介绍dockerfile.

dockerfile介绍

docker 可以让我们自行编写配置文件(名为Dockerfile)来构建一个镜像,这样我们就可以轻松地从自定义构建的镜像中启动多个容器, 所以在实际使用中,我们会把整个程序打包成一个新的docker. 也就是说把所得配置操作,启动运行操作都写到自己的自定义的镜像配置文件中,这样生成的镜像实例(容器)只管运行就好了。不需要额外配置

关于镜像相关的命令

1
2
3
4
5
6
7
8
# 可以使用下面的命令查看本机存储的镜像 (包括下载的和构建的)
docker images
# 删除镜像
docker image rm <webimage>
or
docker rmi -f <webimage>
# 构建镜像, -t表示镜像的名字和标签,.代表当前的工作目录
docker build -t webimage .

使用dockerfile构建的镜像启动容器

下面是对dockerfile文件中内容的解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 在dockerfile文件中 #是注释
# FROM用于指定构建镜像使用的基础镜像
FROM ubuntu:18.04

# RUN 用于在构建镜像的时候在镜像中执行命令
# 这里我们安装python3 和 flask web 框架
RUN apt update
RUN apt -y install python3 python3-pip
RUN pip2 insatll flask

# COPY 相当于命令的 docker cp
# 把本机当前目录下的app.py文件拷贝到镜像的 /code/app.py
# 和docker cp 不同的是, COPY 会自动创建镜像中不存在的目录, 比如/code
COPY app.py /code/app.py

# WORKDIR 用于指定从镜像启动的容器内的工作目录
WORKDIR /code

# CMD 用于指定容器运行后要执行的命令和参数列表
# 这样从本镜像启动容器后会自动执行 python3 app.py 这个命令
# 由于我们已经用WORDKDIR指定了容器的工作目录
# 所以以下的命令都是在 /code 下执行的
CMD ["python3", "app.py"]

实例操作

  1. 当前目录下创建app.py文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # app.py
    from flask import Flask


    app = Flask(__name__)


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


    if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
  2. 当前目录下创建Dockerfile文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FROM ubuntu:18.04

    RUN apt update
    RUN apt -y install python3 python3-pip
    RUN pip3 install flask

    # 因为使用了docker build -t webimage .
    # 指明了镜像的工作目录是当前目录
    COPY app.py /code/app.py

    WORKDIR /code

    CMD ["python3", "app.py"]
  3. 打开终端输入以下命令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 命令中参数 -t webimage 指定了镜像的名字为 webimage
    # 这个名字可以用于在之后从镜像启动容器
    # 最后那个 . 用来指定构建镜像时候的工作目录为本机当前目录
    docker build -t webimage .

    # 可以使用下面的命令查看本机存储的镜像 (包括下载的和构建的)
    docker images

    # 运行容器
    docker run -p 8000:5000 --name demo webimage
  4. 在浏览器输入: localhost:8000
文章作者: woyao
文章链接: https://chenwoyao.github.io/2021/04/19/docker系列/docker教程系列三/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 woyao的博客