AI开发者的Docker实践:汉化(中文),更换镜像源,Dockerfile,部署Python项目

AI开发者的Docker实践:汉化(中文),更换镜像源,Dockerfile,部署Python项目

Dcoker官网

https://www.docker.com/

Docker 是一种开源的 容器化平台,用于构建、部署和运行应用程序。它通过容器技术将应用程序及其依赖项打包到一个可移植的单元中,从而实现跨环境的一致性。

在传统的项目开发中,开发者经常遇到环境不一致的问题,比如代码在本地开发环境运行正常,但在测试或生产环境却出现各种错误,原因可能是操作系统版本、依赖库版本或配置差异。此外,传统部署方式需要手动安装和配置各种软件环境,过程繁琐且容易出错,不同服务器之间的环境也难以保持一致。

Docker 的核心目标就是解决这些问题,通过容器化技术将应用及其运行环境打包在一起,确保应用在不同环境中表现一致。Docker 的出现极大简化了开发、测试和部署的流程,成为现代 DevOps 和云计算中的重要工具。Docker 有几个显著特点:

  • 轻量性:由于容器共享宿主机的操作系统内核,它们比传统虚拟机更小且启动更快,解决了传统虚拟化技术资源占用高、启动慢的问题。
  • 可移植性:Docker 容器可以在任何支持 Docker 的平台上运行,无论是本地开发机、物理服务器还是云环境,彻底解决了「在我机器上能跑,线上却不行」的难题。
  • 隔离性:每个容器拥有独立的文件系统、网络和进程空间,确保应用之间互不干扰,避免了传统部署中多个应用共用环境导致的依赖冲突问题。
  • 标准化:Docker 提供统一的接口和工具链,使得构建、分发和运行容器变得简单高效,替代了传统部署中复杂的手动配置流程。

1、核心概念

镜像 (Image)

  • 镜像是容器的静态模板,包含运行应用程序所需的所有文件和配置。
  • 镜像通过 Dockerfile 定义,并可以分层存储,便于复用和版本管理。

容器 (Container)

  • 容器是轻量级、独立的运行环境,包含应用程序及其所有依赖(代码、运行时、库、环境变量等)。
  • 容器基于镜像创建,每个容器相互隔离(进程、文件系统、网络等)。

仓库 (Repository)

  • 仓库用于存储和分发镜像,如 Docker Hub(官方公共仓库)、私有仓库(如 Harbor)。

Dockerfile

  • 一个文本文件,通过指令(如 FROM, COPY, RUN)定义如何构建镜像。

Docker Compose

  • 用于定义和运行多容器应用的工具,通过 docker-compose.yml 文件配置服务、网络和卷。

2、Docker 的核心组件

Docker 引擎(Docker Engine)

核心后台服务,包含:

  • Docker Daemon:管理容器、镜像、网络和卷。
  • REST API:与 Docker Daemon 交互的接口。
  • CLI:命令行工具(如 docker 命令)。

Docker 网络

支持多种网络模式:

  • bridge(默认):容器通过虚拟网桥通信。
  • host:容器直接使用主机网络。
  • overlay:用于跨主机的容器通信(如 Docker Swarm)。

Docker 存储卷(Volume)

持久化数据存储机制,独立于容器生命周期。

3、Docker 的工作流程

开发阶段

  • 编写 Dockerfile 定义应用环境。
  • 使用 docker build 构建镜像。
  • 推送镜像到仓库(如 docker push)。

部署阶段

  • 从仓库拉取镜像(如 docker pull)。
  • 使用 docker run 启动容器。

Windows 上的安装和汉化(中文)

运行 :Docker 启动之后会在 Windows 任务栏出现鲸鱼图标。

1.下载对应版本中文语言包

https://github.com/asxez/DockerDesktop-CN

2.下载 app-Windows-x86.asar

3.找到docker安装目录\Docker\Docker\frontend\resources,备份并替换app.asar文件。

4.重启Docker

5.启动终端后,通过命令可以检查安装后的 Docker 版本。

bash 复制代码
PS C:\Users\74223> docker --version
Docker version 28.0.4, build b8034c0
PS C:\Users\74223> docker-compose --version
Docker Compose version v2.34.0-desktop.1

6.测试(Docker引擎新增国内源)

Docker 下载镜像默认从国外的官网下载,在国内需要通过代理访问 / 更换国内镜像源。

bash 复制代码
PS C:\Users\74223> docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false
}

修改为

复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
	"https://docker.1ms.run",
	"https://swr.cn-north-4.myhuaweicloud.com",
	"https://registry.cn-hangzhou.aliyuncs.com",
	"https://dockerproxy.com",
	"https://hub-mirror.c.163.com"
	]
}

重启

bash 复制代码
PS C:\Users\74223> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:c41088499908a59aae84b0a49c70e86f4731e588a737f1637e73c8c09d995654Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

DockerFile

  • 定义:DockerFile是一个文本文件,包含一系列指令(Instructions),用于定义如何构建 Docker 镜像。
  • 作用:通过逐行执行指令,自动化构建镜像的层(Layer),最终生成一个可运行的容器环境。

Dockerfile核心指令详解

1. FROM

  • 用途:指定基础镜像(必须为第一条指令)。
bash 复制代码
FROM ubuntu:22.04      # 使用官方 Ubuntu 镜像
FROM python:3.9-slim   # 使用轻量级 Python 镜像

2. RUN

  • 用途:在镜像构建过程中执行命令(如安装软件包)。
bash 复制代码
RUN apt-get update && apt-get install -y python3

3. COPY vs ADD

  • COPY:将文件从本地复制到容器中,功能类似于 ADD,但不支持远程 URL 和自动解压。
bash 复制代码
COPY requirements.txt /app/
  • ADD:将文件从本地复制到容器中,支持远程 URL 和自动解压。
bash 复制代码
ADD index.html /var/www/html/

4. WORKDIR

  • 用途:设置后续指令的工作目录(类似 cd)。
bash 复制代码
WORKDIR /app   # 后续指令默认在 /app 目录下执行

5. ENV

  • 用途:设置环境变量(可被后续指令和容器运行时使用)。
bash 复制代码
ENV NODE_ENV=production
ENV APP_PORT=8080

6. EXPOSE

  • 用途:声明容器运行时监听的端口(需通过 -p 映射到主机)。
bash 复制代码
EXPOSE 80   # 容器监听 80 端口

7. CMD vs ENTRYPOINT

  • CMD:定义容器启动时默认执行的命令。
  • 格式:CMD ["executable","param1","param2"] 或 CMD command param1 param2
bash 复制代码
CMD ["python3", "app.py"]
  • ENTRYPOINT:定义容器启动时运行的命令,与 CMD 不同的是,ENTRYPOINT 不会被覆盖。
  • 格式:ENTRYPOINT ["executable", "param1", "param2"]
bash 复制代码
ENTRYPOINT ["python3", "server.py"]

8. USER

  • 用途:指定运行容器时的用户(避免使用 root,提升安全性)。
bash 复制代码
RUN useradd -m appuser
USER appuser      # 后续指令以 appuser 身份运行

9. VOLUME

  • 用途:声明数据卷挂载点(用于持久化数据)。
bash 复制代码
VOLUME /data    # 容器运行时挂载到 /data

Dockerfile示例

bash 复制代码
# 阶段1:构建依赖
FROM python:3.9 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# 阶段2:运行环境
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .

# 确保 PATH 包含用户安装的包
ENV PATH=/root/.local/bin:$PATH

# 启动应用
CMD ["python", "app.py"]
bash 复制代码
# Base Images 
## 从天池基础镜像构建(from的base img 根据自己的需要更换,建议使用天池open list镜像链接:https://tianchi.aliyun.com/forum/postDetail?postId=67720) 
FROM registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.10

##安装python依赖包 
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /app/requirements.txt

## 把当前文件夹里的文件构建到镜像的根目录下,并设置为默认工作目录 
ADD . /app

WORKDIR /app

## 镜像启动后统一执行 sh run.sh 
CMD ["sh", "/app/run.sh"]

run.sh

bash 复制代码
ls

cd /app; python ml_baseline.py predict

在Docker构建过程中,是否需要重新构建镜像取决于Dockerfile的指令顺序和文件变动情况。

1. Docker的层缓存机制

Docker镜像由多个层(Layer)组成,每个Dockerfile指令对应一个层。如果某一层及其之前的所有层未发生变化,Docker会直接使用缓存,避免重复执行耗时操作(如安装依赖)。若某一层变动,后续所有层缓存失效,需要重新构建。

Docker 命令


1. 镜像相关命令

命令 描述
docker images 列出本地所有的镜像。
docker pull <镜像名>:<标签> 从 Docker Hub 拉取指定镜像,例如:docker pull ubuntu:latest
docker build -t <镜像名>:<标签> . 使用 Dockerfile 构建镜像,. 表示当前目录为上下文路径。
docker rmi <镜像ID> 删除指定的镜像。
docker tag <源镜像ID> <目标镜像名>:<标签> 为镜像打标签,便于推送或管理。

2. 容器相关命令

命令 描述
docker ps 列出所有正在运行的容器。
docker ps -a 列出所有容器(包括停止的)。
docker run [选项] <镜像名> 创建并启动一个新的容器。 常用选项: -d 后台运行容器。 -p 端口映射,例如 -p 8080:80-v 卷挂载,例如 -v /host/path:/container/path--name 指定容器名称。
docker start <容器ID/名称> 启动已停止的容器。
docker stop <容器ID/名称> 停止正在运行的容器。
docker restart <容器ID/名称> 重启容器。
docker rm <容器ID> 删除指定的容器。
docker logs <容器ID/名称> 查看容器的日志输出。
docker exec -it <容器ID/名称> /bin/bash 进入正在运行的容器的交互式终端。

3. 数据卷相关命令

命令 描述
docker volume create <卷名> 创建一个新的数据卷。
docker volume ls 列出所有数据卷。
docker volume inspect <卷名> 查看数据卷的详细信息。
docker volume rm <卷名> 删除指定的数据卷。

4. 网络相关命令

命令 描述
docker network ls 列出所有网络。
docker network inspect <网络ID/名称> 查看网络的详细信息。
docker network create <网络名> 创建一个新的网络。
docker network connect <网络名> <容器名> 将容器连接到指定网络。
docker network disconnect <网络名> <容器名> 将容器从指定网络断开。

5. 其他常用命令

命令 描述
docker stats 实时查看容器的资源使用情况(CPU、内存等)。
docker system prune 清理未使用的容器、网络、镜像和卷。
docker save -o <文件名> <镜像名> 将镜像保存为 tar 文件。
docker load -i <文件名> 从 tar 文件加载镜像。
docker commit <容器ID> <新镜像名> 根据容器创建一个新的镜像。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数说明:

  • -d: 后台运行容器并返回容器 ID。
  • -it: 交互式运行容器,分配一个伪终端。
  • --name: 给容器指定一个名称。
  • -p: 端口映射,格式为 host_port:container_port。
  • -v: 挂载卷,格式为 host_dir:container_dir。
  • --rm: 容器停止后自动删除容器。
  • --env 或 -e: 设置环境变量。
  • --network: 指定容器的网络模式。
  • --restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。
  • -u: 指定用户。

交互式运行并分配终端

bash 复制代码
docker run -it ubuntu /bin/bash

部署Python项目

1. 准备 Python 项目

python 复制代码
myapp/
├── app/
│   ├── __init__.py
│   └── main.py
├── requirements.txt
└── Dockerfile


application.py

python 复制代码
import sys

# yes, just adding two numbers
def add_two_numbers(a=0, b=0):
    result = a + b
    print(f"a is {a}")
    print(f"b is {b}")
    print(f"solution is {result}")


if __name__ == "__main__":
    if len(sys.argv) > 2:
        add_two_numbers(int(sys.argv[1]), int(sys.argv[2]))
    else:
        add_two_numbers()

2. 创建 Dockerfile(文件不带后缀)


requirements.txt

3. 构建 Docker 镜像

python 复制代码
# -t 指定镜像名称和标签,. 表示Dockerfile所在的当前目录。
docker build -t my-python-app:1.0 .
python 复制代码
Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows

PS C:\Users\15734> cd "D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial"     
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial> docker build -t my-python-app:1.0 .
[+] Building 8.6s (8/8) FINISHED                                           docker:desktop-linux 
 => [internal] load build definition from Dockerfile                                       0.1s
 => => transferring dockerfile: 376B                                                       0.0s
 => [internal] load metadata for docker.io/library/python:3.9-slim                         1.7s
 => [internal] load .dockerignore                                                          0.0s
 => => transferring context: 2B                                                            0.0s 
 => [internal] load build context                                                          0.2s 
 => => transferring context: 21.14kB                                                       0.1s 
 => [1/4] FROM docker.io/library/python:3.9-slim@sha256:9aa5793609640ecea2f06451a0d6f3793  0.0s 
 => CACHED [2/4] WORKDIR /app                                                              0.0s
 => [3/4] COPY . .                                                                         0.2s 
 => ERROR [4/4] RUN pip install --no-cache-dir -r requirements.txt                         6.2s
------
 > [4/4] RUN pip install --no-cache-dir -r requirements.txt:
3.132 Processing /C:/ci/aiohttp_1646806572557/work
3.135 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/C:/ci/aiohttp_1646806572557/work'
3.135
3.750
3.750 [notice] A new release of pip is available: 23.0.1 -> 25.0.1
3.750 [notice] To update, run: pip install --upgrade pip
------
Dockerfile:12
--------------------
  10 |     
  11 |     # 安装项目依赖
  12 | >>> RUN pip install --no-cache-dir -r requirements.txt
  13 |
  14 |     ENTRYPOINT ["python", "-u", "./application.py" ]
not complete successfully: exit code: 1
-------------------------------------------------------------------------------------------------XXView build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/vlp8jhik1yukve561d6ahwzg5
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial> docker build -t my-python-app:1.0 .rm Community Edition 2022.2.1\pythonProject\docker-tutorial>
[+] Building 12.6s (8/8) FINISHED                                          docker:desktop-linux  => [internal] load build definition from Dockerfile                                       0.1s 
 => => transferring dockerfile: 376B                                                       0.0s 
 => [internal] load metadata for docker.io/library/python:3.9-slim                         1.3s 
 => [internal] load .dockerignore                                                          0.1s
 => => transferring context: 2B                                                            0.0s
 => [internal] load build context                                                          0.2s
 => => transferring context: 3.46kB                                                        0.1s 
 => [1/4] FROM docker.io/library/python:3.9-slim@sha256:9aa5793609640ecea2f06451a0d6f3793  0.0s 
 => CACHED [2/4] WORKDIR /app                                                              0.0s
 => [3/4] COPY . .                                                                         0.3s
 => ERROR [4/4] RUN pip install --no-cache-dir -r requirements.txt                        10.0s
------
 > [4/4] RUN pip install --no-cache-dir -r requirements.txt:
5.994 Collecting alembic==1.13.1
6.348   Downloading alembic-1.13.1-py3-none-any.whl (233 kB)
6.623      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 233.4/233.4 kB 904.0 kB/s eta 0:00:00
6.820 ERROR: Could not find a version that satisfies the requirement anaconda-navigator==2.1.4 (from versions: none)
6.820 ERROR: No matching distribution found for anaconda-navigator==2.1.4
7.450
7.450 [notice] A new release of pip is available: 23.0.1 -> 25.0.1
7.450 [notice] To update, run: pip install --upgrade pip
------
Dockerfile:12
--------------------
  10 |     
  11 |     # 安装项目依赖
  12 | >>> RUN pip install --no-cache-dir -r requirements.txt
  13 |
  14 |     ENTRYPOINT ["python", "-u", "./application.py" ]
--------------------
ERROR: failed to solve: process "/bin/sh -c pip install --no-cache-dir -r requirements.txt" did not complete successfully: exit code: 1

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/73hqsam0a7fmp9ep2zmd4pt6r
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial> docker build -t my-python-app:1.0 .
[+] Building 8.9s (8/8) FINISHED                                           docker:desktop-linux
 => [internal] load build definition from Dockerfile                                       0.0s
 => => transferring dockerfile: 376B                                                       0.0s 
 => [internal] load metadata for docker.io/library/python:3.9-slim                         0.7s 
 => [internal] load .dockerignore                                                          0.0s
 => => transferring context: 2B                                                            0.0s 
 => [1/4] FROM docker.io/library/python:3.9-slim@sha256:9aa5793609640ecea2f06451a0d6f3793  0.0s 
 => [internal] load build context                                                          0.0s 
 => => transferring context: 512B                                                          0.0s 
 => CACHED [2/4] WORKDIR /app                                                              0.0s
 => [3/4] COPY . .                                                                         0.2s 
 => ERROR [4/4] RUN pip install --no-cache-dir -r requirements.txt                         7.6s
------
 > [4/4] RUN pip install --no-cache-dir -r requirements.txt:
3.397 Collecting alembic==1.13.1
3.974   Downloading alembic-1.13.1-py3-none-any.whl (233 kB)
4.380      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 233.4/233.4 kB 586.9 kB/s eta 0:00:00
4.528 ERROR: Could not find a version that satisfies the requirement anaconda-navigator==2.1.4 (from versions: none)
4.528 ERROR: No matching distribution found for anaconda-navigator==2.1.4
5.084
5.084 [notice] A new release of pip is available: 23.0.1 -> 25.0.1
5.084 [notice] To update, run: pip install --upgrade pip
------
Dockerfile:12
--------------------
  10 |     
  11 |     # 安装项目依赖
  12 | >>> RUN pip install --no-cache-dir -r requirements.txt
  13 |
  14 |     ENTRYPOINT ["python", "-u", "./application.py" ]
--------------------
ERROR: failed to solve: process "/bin/sh -c pip install --no-cache-dir -r requirements.txt" did not complete successfully: exit code: 1

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/q8at9hhjtj61fm40aclyopwgv
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial> docker build -t my-python-app:1.0 .
[+] Building 310.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s
[+] Building 311.0s (7/8)                                                  docker:desktop-linux 
 => [internal] load build context                                                          0.0s 
[+] Building 311.1s (7/8)                                                  docker:desktop-linux 
 => [internal] load build context                                                          0.0s 
[+] Building 311.3s (7/8)                                                  docker:desktop-linux 
 => [internal] load build context                                                          0.0s 
[+] Building 311.4s (7/8)                                                  docker:desktop-linux 
 => [internal] load build context                                                          0.0s 
[+] Building 311.6s (7/8)                                                  docker:desktop-linux 
 => [internal] load build context                                                          0.0s 
[+] Building 311.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 311.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 312.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 313.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 313.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 313.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 313.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 313.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 313.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 314.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 315.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 316.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 316.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 316.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 316.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 316.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 316.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 317.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 318.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 319.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 319.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 319.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 319.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 319.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 319.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 320.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.0s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.3s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.6s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 321.9s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 322.1s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 322.2s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 322.4s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 322.5s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 322.7s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 322.8s (7/8)                                                  docker:desktop-linux
 => [internal] load build context                                                          0.0s 
[+] Building 894.6s (9/9) FINISHED                                         docker:desktop-linux 
 => [internal] load build definition from Dockerfile                                       0.0s 
 => => transferring dockerfile: 376B                                                       0.0s 
 => [internal] load metadata for docker.io/library/python:3.9-slim                         0.6s 
 => [internal] load .dockerignore                                                          0.0s 
 => => transferring context: 2B                                                            0.0s 
 => [1/4] FROM docker.io/library/python:3.9-slim@sha256:9aa5793609640ecea2f06451a0d6f3793  0.0s 
 => [internal] load build context                                                          0.0s 
 => => transferring context: 130B                                                          0.0s 
 => CACHED [2/4] WORKDIR /app                                                              0.0s 
 => [3/4] COPY . .                                                                         0.3s 
 => [4/4] RUN pip install --no-cache-dir -r requirements.txt                             886.0s 
 => exporting to image                                                                     6.9s
 => => exporting layers                                                                    6.8s 
 => => writing image sha256:5c80cd625d69fbfc8e6ada4d822165bad06666bf417db842bdfdc1c0da225  0.0s 
 => => naming to docker.io/library/my-python-app:1.0                                       0.0s 

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/njmlcpgxaeiewkez9b2nurns6
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial> 

4. 运行容器

查看镜像

python 复制代码
 docker images
python 复制代码
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial>  docker images
REPOSITORY      TAG       IMAGE ID       CREATED              SIZE
my-python-app   1.0       5c80cd625d69   About a minute ago   872MB
my-python-app   latest    1e9870b0df05   18 hours ago         126MB
python 复制代码
# 基础运行
docker run -d -p 8000:8000 --name myapp my-python-app:1.0

# 带环境变量
docker run -d -p 8000:8000 \
  -e DEBUG_MODE=1 \
  --name myapp \
  my-python-app:1.0

# 挂载卷(开发时同步代码)
docker run -d -p 8000:8000 \
  -v $(pwd)/app:/app/app \
  --name myapp \
  my-python-app:1.0

-d 参数表示容器在后台运行,-p 参数用于将主机的8000端口映射到容器的8000端口。

python 复制代码
PS D:\PyCharm Community Edition 2022.2.1\pythonProject\docker-tutorial> docker run -d -p 8000:8000 --name myapp my-python-app:1.0
4af9469d1cc95789e6c81022779dc52cee604c6e5e325b7d1f7b977c71b7f8e8

人工智能竞赛-阿里云镜像实战

未完待续

常规技巧

  1. 检查基础镜像软件源和pip源是否替换为国内源,如果非国内源后续每次构建镜像会比较浪费时间。
  2. 必备软件包可直接安装于基础镜像内,以减少每次构建镜像时都要安装一遍的等待时间。
  3. 镜像面临调试问题时,可交互式进入容器后直接调试修改,直到成功后退出再在Dockerfile中修改。
  4. 养成使用Dockerfile的习惯,不要依赖于commit
  5. 每次镜像修改都给定新的版本号或标签,方便区分版本管理,有意义的版本最好使用有含义的字符作为版本号,如:frist_submit
  6. 深度学习常用镜像集合(包含国内源和海外源)https://tianchi.aliyun.com/forum/postDetail?postId=67720

参考

1.AI开发者的Docker实践

2.Docker 命令大全

3.项目依赖的python包requirements.txt文件的生成与安装

4.零基础入门Docker-cuda练习场

5.魔搭社区

6.Codeup

7.Docker 万字教程:从入门到掌握

相关推荐
不会飞的鲨鱼1 小时前
Scrapy框架之 中间件的使用
python·scrapy·中间件
灏瀚星空1 小时前
量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解
笔记·python·线性代数·信息可视化·矩阵
noedn2 小时前
图像畸变-径向切向畸变实时图像RTSP推流
python·ffmpeg
Kay_Liang2 小时前
探究排序算法的奥秘(下):快速排序、归并排序、堆排序
java·数据结构·c++·python·算法·排序算法
禺垣2 小时前
AdaBoost算法的原理及Python实现
人工智能·python·算法·机器学习·数据挖掘·adaboost·集成学习
野生绿箭侠2 小时前
Docker 部署 flink1.19.2
运维·docker·容器
带娃的IT创业者3 小时前
《Python Web部署应知应会》Flask网站隐藏或改变浏览器URL:从Nginx反向代理到URL重写技术
前端·python·flask
灏瀚星空4 小时前
量化交易之数学与统计学基础2.3——线性代数与矩阵运算 | 线性方程组
笔记·python·信息可视化·数据挖掘·回归·开源·最小二乘法
素雪风华4 小时前
conda管理python环境
python·conda·pip
Theodore_10224 小时前
Python3(19)数据结构
大数据·开发语言·数据结构·python·网络爬虫