在Linux上创建一个Docker容器并在其中执行Python脚本

news/2025/2/22 19:53:03

在Linux上创建一个Docker容器并在其中执行Python脚本的过程,涉及多个方面的内容,包括安装Docker、编写Dockerfile、构建镜像、运行容器等。

1. 安装Docker

在Linux上使用Docker之前,你需要确保系统已安装Docker。Docker支持的Linux发行版有很多,包括Ubuntu、CentOS、Debian等。以下是以Ubuntu为例的安装步骤。

1.1 更新系统软件包

首先,更新你的系统包,以确保所有软件包是最新的:

sudo apt-get update

1.2 安装Docker依赖

安装一些必要的依赖库:

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

1.3 添加Docker官方GPG密钥

为了从Docker的官方仓库安装,必须添加Docker的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

1.4 添加Docker仓库

然后,你需要将Docker的稳定版仓库添加到你的包管理器源中:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

1.5 安装Docker

更新包信息并安装Docker:

sudo apt-get update
sudo apt-get install docker-ce

1.6 启动并启用Docker

安装完成后,启动Docker服务并设置开机自启动:

sudo systemctl start docker
sudo systemctl enable docker

1.7 验证Docker安装

可以使用以下命令验证Docker是否安装成功:

docker --version

这将显示Docker的版本信息,类似于:

Docker version 20.10.7, build f0df350

此外,你还可以运行docker info来查看Docker的详细信息。

2. 创建Python脚本

在这个示例中,我们将创建一个简单的Python脚本,它打印一条消息。假设我们有一个名为hello.py的Python脚本,内容如下:

python"># hello.py
print("Hello from Docker!")

将此脚本保存为 hello.py,并确保该文件在你准备构建Docker镜像的目录下。

3. 编写Dockerfile

Dockerfile是构建Docker镜像的关键文件,它定义了镜像的基础环境、安装步骤以及容器运行时的默认行为。我们将使用Python官方提供的Docker镜像作为基础镜像。

3.1 创建Dockerfile

在与hello.py同级的目录下创建一个名为Dockerfile的文件,内容如下:

# 选择官方Python 3.9作为基础镜像
FROM python:3.9-slim

# 设置工作目录为 /app
WORKDIR /app

# 将当前目录(包含 hello.py 的目录)复制到容器的工作目录
COPY . /app

# 如果需要,可以在这里安装其他依赖
# RUN pip install -r requirements.txt

# 默认执行 python hello.py
CMD ["python", "hello.py"]

在这个Dockerfile中,我们做了以下几件事:

  • 使用python:3.9-slim镜像作为基础镜像,表示镜像中已经预安装了Python 3.9。
  • 设置工作目录为/app,容器启动时会切换到该目录。
  • 使用COPY指令将当前目录中的所有文件复制到容器中的/app目录。
  • CMD指令设置容器启动时执行的命令。在本例中,我们指定容器启动后默认执行 python hello.py,即运行我们的Python脚本。

3.2 注意事项

  • FROM python:3.9-slim:选择了一个“轻量级”的Python镜像(slim)。如果你的项目需要更多的依赖或者其他库,可以选择更大的基础镜像。
  • WORKDIR /app:设置容器中的工作目录。当容器启动时,它会自动进入该目录。
  • COPY . /app:将本地目录下的所有文件复制到容器内的工作目录。请确保Dockerfile和hello.py在同一个目录中。

4. 构建Docker镜像

现在我们已经编写了Dockerfile和Python脚本,接下来要构建Docker镜像。镜像是运行容器的基础。

4.1 构建镜像

在包含Dockerfilehello.py文件的目录中打开终端,执行以下命令来构建镜像:

docker build -t my-python-app .

解释:

  • -t my-python-app:我们为镜像指定一个标签(标签就是镜像的名字)。你可以根据自己的需求更改名字。
  • .:表示当前目录,这意味着Docker会读取当前目录下的Dockerfile文件并根据其内容构建镜像。

4.2 查看镜像构建情况

构建过程可能需要几分钟,取决于网络连接和机器性能。构建完成后,你可以通过以下命令查看本地Docker镜像:

docker images

输出应该类似如下:

REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
my-python-app       latest    e3f3a732e6c3   10 seconds ago   122MB
python              3.9-slim  0e3db5a07b8d   2 weeks ago      122MB

其中,my-python-app就是我们刚才构建的镜像。

5. 运行Docker容器

现在,我们有了Docker镜像,可以启动一个容器并执行Python脚本。

5.1 运行容器

使用以下命令运行容器:

docker run my-python-app

这将启动一个新的容器并执行CMD指定的命令,即运行hello.py脚本。你应该能看到如下输出:

Hello from Docker!

5.2 运行容器并查看日志

如果你希望查看容器的日志输出(如执行Python脚本时的输出),可以使用docker logs命令。

首先,你需要获取容器ID,运行以下命令:

docker ps

输出类似如下:

CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS     NAMES
d7f84bc8e78e   my-python-app    "python hello.py"        30 seconds ago   Up 29 seconds              gifted_babbage

然后,你可以使用容器ID来查看日志:

docker logs d7f84bc8e78e

这会输出:

Hello from Docker!

6. 进一步优化Docker镜像

6.1 使用虚拟环境

在开发过程中,通常会使用Python虚拟环境来隔离依赖。在Docker容器中,你也可以使用虚拟环境来安装依赖,这有助于使镜像更加清洁。

以下是修改后的Dockerfile,它将在容器内创建一个虚拟环境并安装依赖:

FROM python:3.9-slim

WORKDIR /app

COPY . /app

# 创建并激活虚拟环境
RUN python -m venv /env
RUN /env/bin/pip install --upgrade pip

# 如果有依赖文件,可以通过 requirements.txt 安装
# RUN /env/bin/pip install -r requirements.txt

CMD ["/env/bin/python", "hello.py"]

6.2 使用多阶段构建

如果你的项目需要编译一些C扩展或者你希望镜像更轻量,可以使用多阶段构建。多阶段构建能够将构建过程分为多个阶段,最终只将必要的文件拷贝到最终镜像中。

以下是一个多阶段构建的例子:

# 构建阶段
FROM python:3.9-slim AS builder

WORKDIR /app

COPY . /app

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# 运行阶段
FROM python:3.9-slim

WORKDIR /app

COPY --from=builder /app /app
COPY --from=builder /root/.cache /root/.cache

CMD ["python", "hello.py"]

这种方法能有效地减少最终镜像的大小,只包含必要的部分。

7. 总结

在Linux上创建一个Docker容器并在其中执行Python脚本是一个非常有用的技能,可以帮助开发者在不同环境之间迁移应用,简化部署过程。通过上述步骤,我们:

  1. 安装并配置了Docker。
  2. 编写了一个简单的Python脚本和相应的Dockerfile
  3. 构建并运行了Docker镜像和容器。

http://www.niftyadmin.cn/n/5862707.html

相关文章

pytorch预训练模型下载保存路径更改

正常情况下,torch预训练模型在线下载,下模型后的地址默认是: ~/.cache/torch/hub/checkpoints如果没有预先下载好预训练模型,在运行这个代码后,自动下载预训练模型的。 如果要更改路径,有两种办法&#x…

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章,为正式安装windowsUbuntu16.04双系统部分。在正式安装前,若还没有进行前期准备工作(1.分区2.制作启动u盘),见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …

服务器socket端口绑定失败解决方案

一.服务器socket端口绑定失败 问题 在学习socket的使用,服务器使用的是libevent框架,绑定和监听的是服务器的私网ip以及8000端口号。 运行程序却输出打印信息:"bind error"。 //初始化监听 socket 并开始监听客户端连接 void S…

Python连接MySQL数据库完全指南

Python连接MySQL数据库完全指南 一、环境准备四部曲 1. 安装MySQL服务器(Docker极简版) docker run --name mysql2025 -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d mysql:8.4 2. 安装Python连接驱动 # 官方推荐量子加密版 pip install mysql-con…

【算法】002、编程实现社会问题

【算法】002、编程实现社会问题 文章目录 一、模拟1.1 模拟 二、多语言解法 // 一开始有100个人,每个人都有100元 // 在每一轮都做如下的事情 : // 每个人都必须拿出1元钱给除自己以外的其他人,给谁完全随机 // 如果某个人在这一轮的钱数为0&#xff0c…

【护网行动-红蓝攻防】第一章-红蓝对抗基础 认识红蓝紫

1.实战攻防演练 1.1为什么要进行实战攻防演练? 军事上的演练,是除了实战以外最能检验军队战斗力的一种考核方式,他可以模拟面对外部势力的攻击时候,如何更好的去维护国家和主权的安全。同样的,在网络上面,…

黑客疑入侵OmniGPT:3400万用户数据遭泄露

一名黑客声称已成功入侵 OmniGPT——一个由人工智能驱动的知名聊天机器人和生产力平台。此次事件导致3万名用户的电子邮件、电话号码以及超过 3400 万条(34270455)用户对话被泄露。这些数据由一位化名为“Gloomer”的黑客于2月9日上午在 Breach Forums 上…

Promptic:Python 中的 LLM 应用开发利器

Promptic 是一个基于 Python 的轻量级库,旨在简化与大型语言模型(LLMs)的交互。它通过提供简洁的装饰器 API 和强大的功能,帮助开发者高效地构建 LLM 应用程序。Promptic 的设计理念是提供 90% 的 LLM 应用开发所需功能,同时保持代码的简洁和易用性。 1. Promptic 的核心…