1.6 启动并启用Docker
安装完成后,启动Docker服务并设置开机自启动:
sudo systemctl start docker
sudo systemctl enable docker
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1.7 验证Docker安装
可以使用以下命令验证Docker是否安装成功:
docker --version
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
这将显示Docker的版本信息,类似于:
Docker version 20.10 .7, build f0df350
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
此外,你还可以运行docker info
来查看Docker的详细信息。
在这个示例中,我们将创建一个简单的Python脚本,它打印一条消息。假设我们有一个名为hello.py
的Python脚本,内容如下:
print ( "Hello from Docker!" )
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
将此脚本保存为 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"]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
在这个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 .
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
解释:
-t my-python-app
:我们为镜像指定一个标签(标签就是镜像的名字)。你可以根据自己的需求更改名字。.
:表示当前目录,这意味着Docker会读取当前目录下的Dockerfile
文件并根据其内容构建镜像。
4.2 查看镜像构建情况
构建过程可能需要几分钟,取决于网络连接和机器性能。构建完成后,你可以通过以下命令查看本地Docker镜像:
docker images
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
输出应该类似如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-python-app latest e3f3a732e6c3 10 seconds ago 122MB
python 3.9 -slim 0e3db5a07b8d 2 weeks ago 122MB
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
其中,my-python-app
就是我们刚才构建的镜像。
5. 运行Docker容器
现在,我们有了Docker镜像,可以启动一个容器并执行Python脚本。
5.1 运行容器
使用以下命令运行容器:
docker run my-python-app
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
这将启动一个新的容器并执行CMD
指定的命令,即运行hello.py
脚本。你应该能看到如下输出:
Hello from Docker!
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
5.2 运行容器并查看日志
如果你希望查看容器的日志输出(如执行Python脚本时的输出),可以使用docker logs
命令。
首先,你需要获取容器ID,运行以下命令:
docker ps
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
输出类似如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7f84bc8e78e my-python-app "python hello.py" 30 seconds ago Up 29 seconds gifted_babbage
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
然后,你可以使用容器ID来查看日志:
docker logs d7f84bc8e78e
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
这会输出:
Hello from Docker!
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
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"]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
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"]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
这种方法能有效地减少最终镜像的大小,只包含必要的部分。
7. 总结
在Linux上创建一个Docker容器并在其中执行Python脚本是一个非常有用的技能,可以帮助开发者在不同环境之间迁移应用,简化部署过程。通过上述步骤,我们:
安装并配置了Docker。 编写了一个简单的Python脚本和相应的Dockerfile
。 构建并运行了Docker镜像和容器。
data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://click.blog.csdn.net/article/details/145786172","extend1":"pc","ab":"new"}">>
id="blogExtensionBox" style="width:400px;margin:auto;margin-top:12px" class="blog-extension-box"> class="blog_extension blog_extension_type1" id="blog_extension">
class="blog_extension_card" data-report-click="{"spm":"1001.2101.3001.6470"}" data-report-view="{"spm":"1001.2101.3001.6470"}">
class="blog_extension_card_left">
class="blog_extension_card_cont">
class="blog_extension_card_cont_l">
编程是艺术
class="blog_extension_card_cont_r">
微信公众号
文章主要分享软件开发和编程学习方面的知识
评论记录:
回复评论: