Dockerfile构建一个简单的Python Flask 镜像

Python 程序

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, World!'

Dockerfile

FROM python:3.9.5-slim

COPY app.py /src/app.py

RUN pip install flask

WORKDIR /src
ENV FLASK_APP=app.py

EXPOSE 5000

CMD ["flask", "run", "-h", "0.0.0.0"]

开始构建一个小的demo

PS E:\images> docker image build -f .\flask_dockerfile -t flask_py .
[+] Building 80.3s (9/9) FINISHED
 => [internal] load build definition from flask_dockerfile                                                         0.0s
 => => transferring dockerfile: 38B                                                                                0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/python:3.9.5-slim                                              12.7s
 => [internal] load build context                                                                                  0.0s
 => => transferring context: 152B                                                                                  0.0s
 => [1/4] FROM docker.io/library/python:3.9.5-slim@sha256:9828573e6a0b02b6d0ff0bae0716b027aa21cf8e59ac18a76724d2  47.4s
 => => resolve docker.io/library/python:3.9.5-slim@sha256:9828573e6a0b02b6d0ff0bae0716b027aa21cf8e59ac18a76724d21  0.0s
 => => sha256:f42d92068b29045b6893da82032ca4fcf96193be5dcbdcfcba948489efa9e832 1.37kB / 1.37kB                     0.0s
 => => sha256:c71955050276b1e3b4be7e29089e4babeb39957981d162a3d422e084601105d3 7.63kB / 7.63kB                     0.0s
 => => sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda 27.15MB / 27.15MB                  44.7s
 => => sha256:a1111a8f2ec3f3a8ee44a123047349a70f87d1cfebb9e48b06520d0eed436a71 2.77MB / 2.77MB                     9.3s
 => => sha256:445d04774519ca200f5c48fd028beaafb49ca763dd58767f1ae7e3933306394c 10.93MB / 10.93MB                  32.9s
 => => sha256:9828573e6a0b02b6d0ff0bae0716b027aa21cf8e59ac18a76724d216bab7ef04 1.86kB / 1.86kB                     0.0s
 => => sha256:24f3f85d41f368fc2dcd569b181ef6cd4c2bee419a32853be2f8c8964cee34af 235B / 235B                        11.9s
 => => sha256:d299f7fb612d59c3d87fcb17028a25c02e94722ef6235e60537a12d0e312abfc 2.64MB / 2.64MB                    17.4s
 => => extracting sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda                          1.3s
 => => extracting sha256:a1111a8f2ec3f3a8ee44a123047349a70f87d1cfebb9e48b06520d0eed436a71                          0.2s
 => => extracting sha256:445d04774519ca200f5c48fd028beaafb49ca763dd58767f1ae7e3933306394c                          0.5s
 => => extracting sha256:24f3f85d41f368fc2dcd569b181ef6cd4c2bee419a32853be2f8c8964cee34af                          0.0s
 => => extracting sha256:d299f7fb612d59c3d87fcb17028a25c02e94722ef6235e60537a12d0e312abfc                          0.2s
 => [2/4] COPY app.py /src/app.py                                                                                  0.1s
 => [3/4] RUN pip install flask                                                                                   19.8s
 => [4/4] WORKDIR /src                                                                                             0.0s
 => exporting to image                                                                                             0.2s
 => => exporting layers                                                                                            0.2s
 => => writing image sha256:0567a371be3f084fb413092b480735083c224023f8801fc723e228a021ea54b1                       0.0s
 => => naming to docker.io/library/flask_py
 PS E:\images> docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
flask_py              latest    0567a371be3f   10 minutes ago   125MB
PS E:\images> docker container run -d  -p 5000:5000 0567a371be3f
ceb69c7ce778ebcf48a0ad91eb16902814cb20470ddb16d0ba795baa18cf4b01

访问浏览器本地ip:http://127.0.0.1:5000/ 显示Hello, World!

查看容器日志:

PS E:\images> docker logs ceb69c7ce778
 * Serving Flask app 'app.py' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)
PS E:\images> docker logs ceb69c7ce778
 * Serving Flask app 'app.py' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [13/Jan/2022 08:50:31] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [13/Jan/2022 08:50:31] "GET /favicon.ico HTTP/1.1" 404 -
### 回答1: 可以按照以下步骤构建Python镜像并上传到阿里云的pai平台: 1. 在本地创建一个名为 Dockerfile 的文件夹,并在其中创建一个名为 requirements.txt 的文件,用于列出要安装的Python库: ``` FROM python:3.6 WORKDIR /app COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt COPY . /app ``` 2. 在终端中进入 Dockerfile 文件夹,并运行以下命令构建镜像: ``` docker build -t my-python-image . ``` 其中,`my-python-image` 是你想要给镜像起的名称。 3. 将镜像上传到阿里云的 Docker Hub 或者容器镜像服务中。这里以上传到容器镜像服务为例: 首先登录阿里云容器镜像服务: ``` docker login --username=your_username registry.cn-hangzhou.aliyuncs.com ``` 其中,`your_username` 是你的阿里云账户用户名。 然后将镜像打上标签: ``` docker tag my-python-image registry.cn-hangzhou.aliyuncs.com/your_namespace/my-python-image:latest ``` 其中,`your_namespace` 是你在容器镜像服务中创建的命名空间名称。 最后将镜像上传到阿里云: ``` docker push registry.cn-hangzhou.aliyuncs.com/your_namespace/my-python-image:latest ``` 现在你就可以在阿里云的pai平台上使用这个镜像了。 ### 回答2: 要通过Dockerfile构建Python镜像并标记上传到阿里云PAI平台,可以按照以下步骤进行操作: 1. 首先,在本地创建一个包含Python应用程序的文件夹。在该文件夹中创建一个`Dockerfile`以定义构建镜像的步骤。 2. 在`Dockerfile`中,首先选择一个基础映像,例如`python:3.8`。使用FROM指令指定基础映像。 3. 在Dockerfile中,使用COPY指令将Python应用程序的文件复制到镜像中的合适位置。例如,将`app.py`复制到容器的`/app`目录下。 4. 使用WORKDIR指令将工作目录设置为`/app`,这样在运行时会直接进入该目录。 5. 使用RUN指令安装Python应用程序所需的依赖项。例如,使用`pip install`安装`Flask`框架。可以根据自己的需求添加所需的依赖项。 6. 使用CMD指令在容器中运行Python应用程序。例如,将`python app.py`作为CMD指令。 7. 在终端中切换到包含Dockerfile的文件夹,并使用以下命令构建镜像: ``` docker build -t my-python-app . ``` 这会基于Dockerfile创建名为`my-python-app`的镜像。 8. 构建完成后,使用以下命令将镜像标记为阿里云PAI平台要求的命名规范: ``` docker tag my-python-app registry.cn-hangzhou.aliyuncs.com/my-namespace/my-python-app:latest ``` 这将为镜像添加一个标签和标识符。 9. 最后,使用以下命令将镜像推送到阿里云PAI平台的容器镜像仓库中: ``` docker push registry.cn-hangzhou.aliyuncs.com/my-namespace/my-python-app:latest ``` 这会将镜像上传到阿里云并标记为最新版本。 完成以上步骤后,你就成功地通过Dockerfile构建一个Python镜像,并将其标记和上传到阿里云PAI平台的容器镜像仓库中。 ### 回答3: 通过Dockerfile构建Python镜像,并将镜像上传到阿里云的PAI平台,可以按照以下步骤进行操作: 1. 编写Dockerfile文件: 在本地创建一个文本文件,命名为Dockerfile,并在该文件中编写构建镜像的指令。可以使用以下内容作为示例: ``` # 使用已有的Python镜像作为基础镜像 FROM python:3.9 # 将当前工作目录设置为/app WORKDIR /app # 将当前目录下的所有文件复制到容器的/app目录中 COPY . /app # 安装Python依赖 RUN pip install -r requirements.txt # 设置环境变量 ENV PYTHONPATH "${PYTHONPATH}:/app" # 设置容器启动命令 CMD python main.py ``` 2. 构建镜像: 在终端中,进入包含Dockerfile的目录,执行以下命令来构建镜像: ``` docker build -t python-image . ``` 3. 登录阿里云: 在终端中,执行以下命令登录阿里云的Docker Registry: ``` docker login --username=<你的阿里云账号> registry.cn-hangzhou.aliyuncs.com ``` 4. 标记镜像: 执行以下命令来标记镜像,其中`<Registry名>`是你在阿里云创建的Registry名字,`<版本号>`是你给镜像的版本号: ``` docker tag python-image registry.cn-hangzhou.aliyuncs.com/<Registry名>/python-image:<版本号> ``` 5. 上传镜像: 执行以下命令将镜像上传到阿里云的PAI平台: ``` docker push registry.cn-hangzhou.aliyuncs.com/<Registry名>/python-image:<版本号> ``` 6. 在PAI平台中使用镜像: 在PAI平台的训练作业或服务作业中,选择镜像时,填入阿里云Registry中的镜像路径:`registry.cn-hangzhou.aliyuncs.com/<Registry名>/python-image:<版本号>` 以上就是通过Dockerfile构建Python镜像,并将镜像标记上传到阿里云的PAI平台的步骤。这样可以方便地使用自定义的Python镜像进行任务的部署和运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叶柏杉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值