使用Docker和Python来设置环境

首先

本次使用Docker建立Python的环境。以前在实际工作中使用Docker运行过Go语言,觉得非常方便,所以这次决定使用Docker来搭建Python的环境。

环境

macOS Ventura 13.0.1
Docker Desktop for Mac
Docker version 20.10.21
Docker Compose version v2.13.0
VS code

目标

本次目标是构建docker容器并输出“Hello World”。

构成

这是目录结构。

.
├── Dockerfile
├── docker-compose.yml
├── .env
└── backend
    └── app.py

安装Docker Desktop

请安装适合您自己环境的软件。

 

スクリーンショット 2022-12-09 23.30.00.png

创建工作目录

创建一个用于创建Dockerfile和docker-compose.yml的工作目录。

mkdir docker_python && cd docker_python

下一步,您将在工作目录中创建一个名为“backend”的目录来放置Python代码。

mkdir backend

由于目录已经准备好,现在可以开始编写代码了。

创建Dockerfile

我会创建一个用于构建Docker容器的Dockerfile。

FROM python:3.9.10

RUN mkdir -p /root/backend
WORKDIR /root/backend

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

在第一行中,指定了Python的版本。
WORKDIR用作容器中放置Python代码的工作目录,并创建了/root/backend目录并指定为工作目录。
这样一来,后续的RUN命令将在WORKDIR中执行。

设置环境变量

创建一个.env文件并将以下代码输入,以设置Python代码的路径环境变量。

BACKEND_PATH=./backend

.env文件是一种特殊文件,其中设置的环境变量可以从Dockerfile或即将创建的docker-compose.yml等文件中引用。
通过将路径作为环境变量拆分,使其具有通用性。

创建docker-compose.yml文件

这是使用docker-compose命令时的配置文件。

version: '3.9'
services:
  python3:
    restart: always
    build: .
    container_name: 'python'
    working_dir: '/root/backend'
    tty: true
    volumes:
      - ${BACKEND_PATH}:/root/backend

build
buildでDockerfileの場所を指定しています。今回はカレントディレクトリを表しています。

container_name
container_name には任意のコンテナ名を指定してください。
後ほど使用するコンテナ実行コマンド docker -exec -it {コンテナ名} のコンテナ名となります。

working_dir
working_dirはDockerfileのWORKDIRと同じ階層を指定します。コンテナ内のコマンドを実行した時のデフォルト階層になります。

volumes
volumesにはローカルのbackendディレクトリを/root/backendにマウントする記述を書いています。マウントするとローカルのbackend配下のファイルがコンテナから参照されるようになります。

进行容器构建

构建容器时,请使用以下命令。

docker-compose build
docker_python % docker-compose build
[+] Building 7.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 32B                                                                         0.0s
 => [internal] load .dockerignore                                                                           0.0s
 => => transferring context: 2B                                                                             0.0s
 => [internal] load metadata for docker.io/library/python:3.9.10                                            7.2s
 => [auth] library/python:pull token for registry-1.docker.io                                               0.0s
 => [1/5] FROM docker.io/library/python:3.9.10@sha256:3aae21920963df3205fba69826cc07fcf2fad91f9e062add9217  0.0s
 => CACHED [2/5] RUN mkdir -p /root/backend                                                                 0.0s
 => CACHED [3/5] WORKDIR /root/backend                                                                      0.0s
 => CACHED [4/5] RUN pip install --upgrade pip                                                              0.0s
 => CACHED [5/5] RUN pip install --upgrade setuptools                                                       0.0s
 => exporting to image                                                                                      0.0s
 => => exporting layers                                                                                     0.0s
 => => writing image sha256:f7bcfd7c1350206351a0fa429539f2b8a50dc5464e89f35b1bed222d46e06d1b                0.0s
 => => naming to docker.io/library/docker_python-python3                                                    0.0s

如果输出类似上述日志,则表示 docker-compose 构建已完成。

容器的启动.

启动容器的命令如下。

docker-compose up -d

在中文中对以下内容进行释义:
使用docker-compose up命令来启动容器。
-d选项表示在后台运行。

docker_python % docker-compose up -d
[+] Running 2/2
 ⠿ Network docker_python_default  Created                                                                   0.1s
 ⠿ Container python3              Started                                                                   0.4s

运行 Python

让我们在容器中运行 Python 程序。
在后端目录中创建一个名为 app.py 的文件。
这次我们将输出”Hello World”。

print("Hello World")

请执行以下命令来运行程序。

docker exec -it python3 python app.py

这是执行结果。

docker_python % docker exec -it python3 python app.py
Hello World

你好世界,显示了”Hello World”。

容器的结束

使用下面的命令停止容器。

docker-compose down

最终

本次使用Docker搭建了Python的环境。
由于在AWS Lambda上可以使用docker容器,可以直接将本地容器迁移到AWS Lambda上使用,个人认为继续使用和掌握它是很有必要的。
将来,我还想在增加前端部分的同时,使用Docker和Python来构建CRUD应用以及增加各种功能。

bannerAds