极客时间《云原生架构与 GitOps 实战》学习笔记 Day 2

220 阅读1分钟

如何将业务代码构建为容器镜像?

基础

准备一台电脑,推荐 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 还有很多其他命令,目前需要了解最常用的这几个命令就够了。