首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-07 21:22
  • 3439
  • 10730
blog.csdn.net

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

1. 安装Docker

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

1.1 更新系统软件包

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

sudo apt-get update
  • 1

1.2 安装Docker依赖

安装一些必要的依赖库:

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

1.3 添加Docker官方GPG密钥

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

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

1.4 添加Docker仓库

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

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

1.5 安装Docker

更新包信息并安装Docker:

sudo apt-get update
sudo apt-get install docker-ce
  • 1
  • 2

1.6 启动并启用Docker

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

sudo systemctl start docker
sudo systemctl enable docker
  • 1
  • 2

1.7 验证Docker安装

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

docker --version
  • 1

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

Docker version 20.10.7, build f0df350
  • 1

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

2. 创建Python脚本

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

# hello.py
print("Hello from Docker!")
  • 1
  • 2

将此脚本保存为 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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这个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 构建镜像

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

docker build -t my-python-app .
  • 1

解释:

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

4.2 查看镜像构建情况

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

docker images
  • 1

输出应该类似如下:

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

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

5. 运行Docker容器

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

5.1 运行容器

使用以下命令运行容器:

docker run my-python-app
  • 1

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

Hello from Docker!
  • 1

5.2 运行容器并查看日志

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

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

docker ps
  • 1

输出类似如下:

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

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

docker logs d7f84bc8e78e
  • 1

这会输出:

Hello from Docker!
  • 1

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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

7. 总结

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

  1. 安装并配置了Docker。
  2. 编写了一个简单的Python脚本和相应的Dockerfile。
  3. 构建并运行了Docker镜像和容器。
编程是艺术
微信公众号
文章主要分享软件开发和编程学习方面的知识
注:本文转载自blog.csdn.net的百锦再@新空间代码工作室的文章"https://blog.csdn.net/sixpp/article/details/145786172"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

120
运维
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top