Docker相关的概念
“核心软件” vs 基于“核心软件”的UI
Docker engine:通常说的Docker都是指Docker engine,以命令行形式交互,常见于Linux
Docker desktop:在桌面操作系统中使用的Docker,通过图形界面交互,常见于Windows、MacOS
“模板” vs 基于“模板”的“成品”
Docker image:包含了创建容器(container)所需要的全部文件,包含程序、库文件等。是容器的“模板”。
Docker container:基于镜像(image)创建的独立进程,其运行环境与其他的容器、宿主机都是独立的。是基于“模板”的“成品”。
# 基于hello-world镜像运行一个容器 可以指定其他命令 如果镜像不存在则自动拉取 详见docker run --help
docker run hello-world
# 查看本地已有的所有镜像
docker images
# 拉取一个镜像
docker pull hello-world:linux
“模板仓库”
Docker registry
示例:docker hub hello-world image
让多个“成品”协同运行
Docker compose
示例:docker compose: wordpress-mysql
Docker原理
Docker利用Linux内核提供的Namespace隔离与Cgroups限制,实现轻量容器化运行,并通过分层镜像技术实现快速部署与复用。
# 查看内核版本
uname -r
# 查看容器内核版本 确认是否一致
docker run ubuntu:18.04 uname -r
# 或
docker run ubuntu:18.04 bash
uname -r
Docker使用场景
- 应用隔离
- 多版本环境共存
- 便捷打包和部署
Docker操作
image管理
docker build / Dockerfile
作用:根据Dockerfile文件构建镜像
示例:Dockerfile 和 docker compose.yml
# 构建一个包含curl命令的ubuntu镜像 命名为myubuntu:1.0
# 确认原版镜像不带curl命令
docker run ubuntu:18.04 curl -V
# Dockerfile myubuntu:1.0
FROM --platform=$BUILDPLATFORM ubuntu:18.04 AS base
WORKDIR /app
RUN apt-get update && apt-get install curl -y
# 构建myubuntu:1.0
docker build -t myubuntu:1.0 .
docker run myubuntu:1.0 curl -y
docker pull [ image ]
作用:拉取镜像到本地
示例:docker hub hello-world image
docker pull python:3.11.14-alpine3.23
docker image ls / docker images
简写:docker images
作用:显示本地镜像列表
docker image rm [ image ]
简写:docker rmi
作用:删除镜像
docker image inspect [ image ]
简写:docker inspect
作用:检视镜像信息
# Dockerfile myubuntu:2.0
FROM --platform=$BUILDPLATFORM ubuntu:18.04 AS base
WORKDIR /app
RUN apt-get update && apt-get install curl -y
CMD curl -V
# docker build myubuntu:2.0
docker build -t myubuntu:2.0 .
docker inspect mybuntu:1.0
docker inspect mybuntu:2.0
*docker image save [ image ]
简写:docker save
作用:保存镜像为tar文件,与docker load搭配使用
*docker image load [ image ]
简写:docker load
作用:将镜像tar文件载入docker,与docker save搭配使用
*docker image import [ image ]
简写:docker import
作用:将tar文件载入docker,原来定义的镜像层、命令会失效,变为一层新创建的镜像层
container管理
docker container run
简写:docker run
作用;创建新容器
参数:
- -i, –interactive
- -t, –tty
- -d, –detach
- -e, –env
- -v, –volume
- –restart
- –gpus
- –privileged
- –network
- host
- bridge 默认
- Networking
- –rm
- -p, –publish
docker run --rm -it -v ~/project/docker-101/getting-started:/data myubuntu:2.0 bash
docker container rm
简写:docker rm
作用:删除容器
docker container start / stop
简写:docker start / docker stop
作用:启动/停止容器
docker container ls / docker ps
简写:docker ps
作用:查看容器状态
docker container inspect
简写:docker inspect
作用:检视容器信息
docker container update / rename
简写:docker update / rename
作用:更新容器配置
docker compose
作用:根据docker-compose文件运行多个容器
示例:docker compose: wordpress-mysql
*docker container commit
简写:docker commit
作用:根据当前容器创建新镜像,保留原镜像分层、Entrypoint等原镜像信息,以及修改后的文件系统
docker
docker container export
简写:docker export
作用:将当前容器的文件系统导出为tar文件,不保留原镜像分层、Entrypoint等原镜像信息,但有修改后的文件系统
*volume管理
volume是docker中用于持久化数据的机制,可挂载在多个容器中共享、复用,作为docker run -v的补充
docker volume create
作用:创建数据卷
docker volume inspect
作用:检视数据卷
docker volume ls
作用:查看所有数据卷
docker volume rm
作用:删除数据卷
*比较save / load / export / import
| 命令 | 对象 | 是否保留镜像层 | 是否包含历史、环境变量、ENTRYPOINT | 用途 |
|---|---|---|---|---|
docker save |
镜像 | ✔ | ✔ | 镜像备份、迁移 |
docker load |
导入镜像 | — | — | 恢复 save 导出的镜像 |
docker export |
容器 | ❌ 单层 | ❌ 丢失元数据 | 导出容器文件系统 |
docker import |
生成镜像 | ❌ 单层生成 | ❌ 不含构建历史 | 基于容器快照构建镜像 |
*比较commit / export
| 特性 | docker commit | docker export + import |
|---|---|---|
| 操作对象 | 容器 | 容器 |
| 是否包含容器修改 | ✔ 包含 | ✔ 包含 |
| 是否保留镜像分层 | ✔ 保留(可增加新层) | ❌ 丢失,只有一层 |
| 是否保留元数据(CMD/ENV/EXPOSE等) | ✔ 保留 | ❌ 丢失(全部清空) |
| 是否有构建历史 | ✔ 有(但不如 Dockerfile 可控) | ❌ 无构建历史 |
| 得到镜像方式 | 直接生成新镜像 | export 后再 import |
| 常用场景 | 快速固化容器成果 | 制作最小化镜像、备份文件系统 |
文档结构
- Get started:入门介绍 Get started
- Guides:一些针对特定主题的使用向导 https://docs.docker.com/guides/
3. Manuals:使用手册 https://docs.docker.com/manuals/
1.
4. Reference:类似命令文档,方便查阅。主要看CLI reference docker
1.
拓展
- 在docker容器中使用nvidia-smi验证显卡配置正常
- 需要另外安装container toolkit
- 在自己的电脑上运行不同版本的CUDA容器
- 直接运行容器,docker兼容