Docker 简介
- Docker 在 2013 年 3 月 20 日发布第一个版本,使用 Go 语言开发, 利用 Linux 内核的资源隔离机制(groups, namespaces )提供一个比虚拟机更轻量级的的容器隔离解决方案。
- 解决 PaaS 服务 部署发布需要繁琐的配置问题,做到 一次打包,处处运行。
- 概念:
- 镜像:把相关可执行程序,依赖库,配置文件都“打包”在一起的特殊文件系统
- 容器:在一个资源可控的隔离环境中运行的镜像实例
Python 镜像的选择
-
Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 9,161,494 的镜像。大部分服务都可以通过在 Docker Hub 中直接下载镜像来实现。
-
Dokcer 官方 Python 提供了很多 tags:
名称 大小 3.10.5-alpine3.16 47.63MB 3.10.5-bullseye 919.73MB 3.10.5-slim-bullseye 124.97MB -
alpine: 基于 musl libc 和 busybox 适用于容器的 Linux 版本, CPython 运行慢且可能有包兼容问题
-
bullseye : debian(11) 完整镜像,包含 gcc 等编译工具 和 常用的 lib 库
-
slim-bullseye: 精简版 debian: 只包含运行 Python 所需要的最小依赖
构建 Docker 镜像
- 构建镜像 :docker build -f Dockerfile -t hello_python:v1 .
- 运行容器: docker run -d --name hello -p 80:8000 hello_python
1 | FROM python:3.10.5-slim-buster |
- .dockerignore 忽略配置 减小镜像体积
- 更多: https://docs.docker.com/engine/reference/builder/
Docker 常用命令
1 | docker pull <image-name> # 拉取镜像 |
Docker Compose
- 通过编写 docker-compose.yml 进行一组容器服务的编排
1 | docker-compose up -d # 后台运行 一组容器 |
- 概念
- 服务 (service):一个应用容器,实际上可以运行多个相同镜像的实例。
1 | version: "1.0" |
其他
- 安装: https://docs.docker.com/get-docker/
- 更多:
- 《Docker — 从入门到实践》 https://yeasy.gitbook.io/docker_practice/
- Python Docker 相关: https://pythonspeed.com/docker/
- 官网: https://docs.docker.com/