您是否仍在构建Dockerfile并手动撰写文件的Python开发人员?如果答案是“是”,那么您肯定会错过一个必不可少的工具,该工具可以显着简化开发工作流程。
Docker推出了一个强大的功能,称为“ Docker Init”,专为Python开发人员设计,以简化创建Docker资产的过程。借助Docker Init,您可以告别手动配置,并享受更高效,富有成效的发展经验。让我们探索该工具如何使Python开发人员受益并增强其DockerWorkflows.ð
docker init命令是Docker Desktop version 4.18中引入的Docker CLI(命令行接口)命令。它有助于为项目创建Docker资产,从而更容易创建Docker Images和Containers。
当您在项目目录中运行docker init
命令时,它会引导您完成具有明智的默认值的必要文件的过程。这些文件通常包括:
-
.dockerignore:此文件指定文件和目录的模式,以在构建Docker映像时排除。它通过排除不必要的文件来帮助优化构建过程。
-
dockerfile:此文件包含构建Docker映像的说明。它指定基本图像,应用程序的依赖项,任何必要的配置以及在容器启动时运行的命令。
-
docker-compose.yaml:此文件定义了使用Docker Compose的多容器应用程序。它允许您指定运行应用程序所需的服务,网络,卷和其他配置。
docker init命令还提供了提示,以选择您的项目使用的应用程序平台(例如Python,Go,Node,Rust或Other)和主包的相对目录。这些选择有助于命令生成针对您项目要求的适当的Docker资产。
通过自动创建Docker文件,docker init
命令简化了Docker设置过程,并确保遵循最佳实践。它节省了时间和精力,尤其是对于想要快速创建和管理Docker资产而无需手动配置所有内容的开发人员。
Docker Init的前5名好处
1.简化的Docker资产创建
docker init
命令简化了必要的Docker文件的创建,减少了错误的机会并确保遵循最佳实践。它提供了一个指导过程,可以通过明智的默认值生成文件,从而使您免于手动配置它们。
2.节省时间和精力
使用默认设置和docker init
的指导提示,开发人员可以快速创建Docker资产,而无需大量了解Docker或其语法。它消除了对手动设置的需求,使您可以更多地专注于开发应用程序。
3.改进的项目组织
docker init
生成的文件为您的项目提供了标准化和有组织的结构。该组织使开发人员更容易随着时间的推移理解和维护项目。它通过遵循推荐的文件结构和实践来确保整个项目的一致性。
4.增强的便携性
通过使用使用docker init
创建的Docker资产,您的项目在不同环境中变得更加便携。 Docker允许您将应用程序及其依赖项包装到容器中,从而确保其始终如一地运行,而不管基础主机系统如何。此可移植性简化了部署,并有助于将项目从开发环境转变为生产环境。
5.提高协作和可重复性
Docker Init生成的Docker资产可以与团队成员共享,实现协作和可重复性。使用相同的Docker文件,任何人都可以以一致且可重复的方式构建和运行该应用程序,从而减少与开发环境差异有关的问题。
在Nutshell中,docker init
命令简化了创建Docker资产,节省时间和精力,改善项目组织,增强可移植性并促进开发人员之间的协作的过程。对于那些想快速为其项目设置Docker而不必手动配置所有内容的人,这是特别有益的。
入门
先决条件:
- 下载并安装Docker Desktop 4.18及以上
步骤1.克隆存储库
要展示Docker Init命令行接口的功能,我们将选择一个GIT存储库。它包含一个简单的Python代码,该代码定义了一个处理程序,该处理程序响应以获取指定文本的请求,并在端口8080上启动HTTP服务器。运行脚本时,您可以在http://localhost:8080上访问服务器,并查看与Python相同的消息程序。
git clone https://github.com/dockersamples/helloworld-demo-python
步骤2.初始化Docker资产
将目录更改为hello-world-go-demo并运行docker init命令
docker init
此实用程序将引导您通过为项目的明智默认值创建以下文件:
- .dockerignore
- dockerfile
- docker-compose.yaml
结果:
Welcome to the Docker Init CLI!
This utility will walk you through creating the following files with sensible defaults for your project:
- .dockerignore
- Dockerfile
- compose.yaml
Let's get started!
WARNING: The following Docker files already exist in this directory:
- .dockerignore
- Dockerfile
? Do you want to overwrite them? Yes
? What application platform does your project use? [Use arrows to move, type to filter]
> Python - (detected) suitable for a Python server application
Go - suitable for a Go server application
Node - suitable for a Node server application
Rust - suitable for a Rust server application
Other - general purpose starting point for containerizing your application
Don't see something you need? Let us know!
Quit
Docker Init命令还允许您选择项目使用的应用程序平台和主包的相对目录。
从列表中选择Python。选择默认的3.11.3版本。
? What version of Python do you want to use? 3.11.3
选择此时间点运行应用程序的默认命令。
? What port do you want your app to listen on? 8080
? What is the command to run your app (e.g., gunicorn 'myapp.example:app' --bind=0.0.0.0:8080)? python3 ./app.py
CREATED: .dockerignore
CREATED: Dockerfile
CREATED: compose.yaml
✔ Your Docker files are ready!
Take a moment to review them and tailor them to your application.
WARNING: No requirements.txt file found. Be sure to create one that contains the dependencies for your application, including an entry for the gunicorn package, before running your application.
When you're ready, start your application by running: docker compose up --build
Your application will be available at http://localhost:8000
ajeetsraina@Ajeets-MacBook-Pro python %
文件结构看起来像这样
tree
.
├── Dockerfile
└── compose.yaml
1 directory, 2 files
在这里创建的Dockerfile的内容:
# syntax=docker/dockerfile:1
# Comments are provided throughout this file to help you get started.
# If you need more help, visit the Dockerfile reference guide at
# https://docs.docker.com/engine/reference/builder/
ARG PYTHON_VERSION=3.11.3
FROM python:${PYTHON_VERSION}-slim as base
# Prevents Python from writing pyc files.
ENV PYTHONDONTWRITEBYTECODE=1
# Keeps Python from buffering stdout and stderr to avoid situations where
# the application crashes without emitting any logs due to buffering.
ENV PYTHONUNBUFFERED=1
WORKDIR /app
# Create a non-privileged user that the app will run under.
# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user
ARG UID=10001
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser
# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.
# Leverage a bind mount to requirements.txt to avoid having to copy them into
# into this layer.
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=bind,source=requirements.txt,target=requirements.txt \
python -m pip install -r requirements.txt
# Switch to the non-privileged user to run the application.
USER appuser
# Copy the source code into the container.
COPY . .
# Expose the port that the application listens on.
EXPOSE 8080
# Run the application.
CMD python3 ./app.py
在此创建的默认组合文件:
services:
server:
build:
context: .
ports:
- 8080:8080
步骤3.运行容器服务
docker compose up -d --build
步骤4.访问Python应用程序
curl localhost:8080
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
{ / ===-
\______ O __/
\ \ __/
\____\_______/
Hello from Docker!