哈喽,大家好,我是左手python!
Linux 是 Docker 的主要运行环境,支持大多数流行的 Linux 发行版。以下是基于 Ubuntu/Debian 系统的安装步骤:
-
更新包索引
更新系统的包索引以确保可以访问最新的软件包:sudo apt update
-
安装前置依赖
安装必要的依赖包,以便可以通过 HTTPS 添加 Docker 存储库:sudo apt install apt-transport-https ca-certificates curl software-properties-common
-
添加 Docker 官方存储库
添加 Docker 的官方存储库地址:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
安装 Docker 引擎
更新包索引后,安装 Docker 引擎、containerd 和 Docker Compose:sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
验证安装
安装完成后,验证 Docker 是否正确安装。运行以下命令,应该可以看到 Docker 的版本信息:docker --version
-
运行测试容器
运行一个测试容器以确保 Docker 正常工作:sudo docker run -it --rm hello-world
在 Windows 上安装 Docker
Windows 用户可以通过 Docker Desktop 来安装和使用 Docker。以下是安装步骤:
-
下载 Docker Desktop
访问 Docker 官方网站(https://www.docker.com/get-docker/),下载适用于 Windows 的 Docker Desktop 安装包。 -
安装 Docker Desktop
双击下载的安装包,按照提示完成安装。安装完成后,Docker Desktop 会自动启动。 -
验证安装
打开 PowerShell 或命令提示符,运行以下命令验证 Docker 是否安装成功:docker --version
-
运行测试容器
运行以下命令,验证 Docker 容器是否可以正常运行:docker run -it --rm hello-world
Docker 的基本概念与常用命令
Docker 的核心概念
-
镜像(Image)
Docker 镜像是一个只读的模板,包含了构建 Docker 容器的所有必要信息。镜像可以通过 Dockerfile 定义,并且可以在 Docker Hub 等镜像仓库中存储和共享。 -
容器(Container)
Docker 容器是镜像的运行实例。容器是一个隔离的环境,包含了应用程序及其依赖项。容器之间是互相隔离的,但它们共享同一个宿主机的内核。 -
仓库(Repository)
Docker 仓库是存储 Docker 镜像的位置。Docker Hub 是 Docker 官方提供的公共仓库,用户可以在其中查找和下载各种镜像。 -
卷(Volume)
Docker 卷是用于持久化容器数据的机制。卷可以在容器之间共享,并且可以在容器删除后保留数据。 -
网络(Network)
Docker 网络用于容器之间的通信。Docker 提供了多种网络驱动,包括桥接网络、主机网络和覆盖网络。
常用 Docker 命令
-
镜像相关命令
docker images
:列出本地的 Docker 镜像。docker pull <image-name>
:从 Docker Hub 拉取镜像。docker push <image-name>
:将镜像推送到 Docker Hub。docker rmi <image-name>
:删除本地的 Docker �镜像。
-
容器相关命令
docker ps
:列出正在运行的容器。docker run -it --rm <image-name>
:运行一个新的容器,并进入容器的交互式 shell。docker stop <container-id>
:停止一个容器。docker rm <container-id>
:删除一个容器。docker logs <container-id>
:查看容器的日志。
-
卷相关命令
docker volume create
:创建一个新的卷。docker volume ls
:列出所有的卷。docker volume rm <volume-name>
:删除一个卷。
-
网络相关命令
docker network create
:创建一个新的网络。docker network ls
:列出所有的网络。docker network rm <network-name>
:删除一个网络。
容器化应用开发
编写 Dockerfile
Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程。以下是一个示例 Dockerfile:
# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录的 requirements.txt 到工作目录
COPY requirements.txt .
# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 8000
# 设置环境变量
ENV PYTHONUNBUFFERED=1
# 运行命令
CMD ["python", "app.py"]
构建 Docker 镜像
在编写好 Dockerfile 后,可以使用以下命令构建 Docker 镜像:
docker build -t my-python-app .
运行 Docker 容器
构建完成后,可以使用以下命令运行容器:
docker run -p 8000:8000 my-python-app
持久化数据管理
使用 Volume 持久化数据
Docker 容器中的数据在容器停止或删除后会丢失。为了持久化数据,可以使用 Docker 的 Volume 功能。以下是创建和挂载 Volume 的示例:
-
创建 Volume
docker volume create my-volume
-
运行容器并挂载 Volume
docker run -it --rm -v my-volume:/app/data my-python-app
使用 Bind Mount 挂载主机目录
除了 Volume,Docker 还支持 Bind Mount,即将主机上的目录挂载到容器内。以下是使用 Bind Mount 的示例:
docker run -it --rm -v $(pwd)/data:/app/data my-python-app
Docker 网络配置
Docker 的网络模式
Docker 提供了以下几种网络模式:
-
bridge(桥接网络)
这是 Docker 的默认网络模式。容器在桥接网络中运行,可以通过 Docker 主机的 IP 地址和不同的端口进行通信。 -
host(主机网络)
在主机网络模式下,容器将使用主机的网络栈,容器和主机共享相同的 IP 地址和端口。 -
none(无网络)
在无网络模式下,容器将没有网络连接,适用于不需要网络通信的场景。 -
overlay(覆盖网络)
覆盖网络用于 Swarm 集群,允许多个 Docker 主机上的容器之间进行通信。
自定义网络
以下是创建自定义网络的示例:
-
创建网络
docker network create my-network
-
运行容器并连接到自定义网络
docker run -it --rm --net my-network my-python-app
Docker 安全与优化
Docker 安全
-
运行时安全
- 避免使用
--privileged
标志,因为这会授予容器过多的权限。 - 使用非 root 用户运行容器。
- 定期更新 Docker 和依赖项以修复安全漏洞。
- 避免使用
-
镜像安全
- 使用官方镜像,避免使用不可信的第三方镜像。
- 定期扫描镜像中的漏洞。
-
数据安全
- 使用加密的卷来存储敏感数据。
- 避免在 Dockerfile 中硬编码敏感信息。
Docker 优化
-
镜像优化
- 使用多阶段构建(Multi-Stage Build)来减小镜像体积。
- 避免在镜像中安装不必要的依赖项。
-
资源限制
- 使用
--cpuset-cpus
限制容器使用的 CPU 核心。 - 使用
--memory
限制容器使用的内存。
- 使用
-
日志管理
- 配置 Docker 日志驱动,将日志输出到文件或其他日志管理工具。
- 定期清理日志文件以释放磁盘空间。
查看容器日志
Docker 提供了 docker logs
命令来查看容器的日志。以下是一些常用的日志查看命令:
-
查看实时日志
docker logs -f <container-id>
-
查看最新的日志
docker logs --tail=100 <container-id>
-
查看日志的时间戳
docker logs --timestamps <container-id>
Docker 扩展与集群管理
Docker Compose
Docker Compose 是用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件(docker-compose.yml
),可以定义应用的各个服务及其配置。
以下是一个示例的 docker-compose.yml
文件:
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:password@db:5432/database
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=database
volumes:
postgres_data:
Docker Swarm
Docker Swarm 是 Docker 的集群管理工具,用于管理多个 Docker 主机上的容器。以下是初始化 Swarm 集群的步骤:
-
初始化 Swarm 集群
docker swarm init
-
加入 Swarm 集群
在其他节点上运行以下命令:docker swarm join --token <token> <manager-ip>:2377
-
部署服务
使用docker service
命令部署服务:docker service create --name my-service --replicas=3 my-image
-
查看服务状态
docker service ls
-
扩展服务
docker service scale my-service=5
-
更新服务
docker service update --image new-image:latest my-service
-
删除服务
docker service rm my-service
我是左手python,感谢各位童鞋的点赞、收藏,我们下期更精彩!