如何将业务代码构建为容器镜像?
基础
准备一台电脑,推荐 Linux 或者 macOS,并安装好 Docker,具体流程可以参考官网。Windows 系统也同样适用,只是需要注意一些操作上的差异
通过命令拉取示例镜像
docker pull lyzhang1999/hello-world-flask:latest
docker run -d -p 8000:5000 lyzhang1999/hello-world-flask:latest
通过exec进入容器内部
$ root@c370825640b6:/app# ls
Dockerfile __pycache__ app.py requirements.txt
通俗地说,镜像是一个同时包含业务应用和运行环境的“系统安装包”,它需要运行起来之后才能提供服务,运行后镜像的“实例化”称为容器(Container)。你可以对同一个镜像实例化多次,产生多个独立的容器,这些容器拥有不同的容器 ID,不同的容器之间是相互隔离的。
镜像构建
使用 Python 编写的 Flask Web 应用作为例子 将下面这段代码保存为 app.py
from flask import Flask
import os
app = Flask(__name__)
app.run(debug=True)
@app.route('/')
def hello_world():
return 'Hello, my first docker images! ' + os.getenv("HOSTNAME") + ''
这段代码的含义非常简单,启动一个 Web 服务器,当接收到 HTTP 请求时,返回 “Hello, my first docker images!” 以及 HOSTNAME 环境变量。 创建 Python 的依赖文件 requirements.txt ,用它来安装我们所依赖的 Flask 框架
$ echo "Flask==2.2.2" >> requirements.txt
Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
RUN apt-get update && apt-get install -y procps vim apache2-utils && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
这个 Dockerfile 只有几行,看起来非常简单,但他代表了一种非常典型的镜像构建的命令。例如 FROM、COPY、RUN、CMD 等命令,它们是从上到下按顺序执行的。当然, Dockefile 还有很多其他命令,目前需要了解最常用的这几个命令就够了。