文章目录
- [1 简介](#1 简介)
-
- [1.1 核心概念](#1.1 核心概念)
- [1.2 Docker工作流程](#1.2 Docker工作流程)
- [2 安装](#2 安装)
- [3 启动](#3 启动)
- [4 镜像](#4 镜像)
-
- [4.1 拉取](#4.1 拉取)
- [4.2 查看](#4.2 查看)
- [4.3 标签](#4.3 标签)
- [4.4 导出和导入](#4.4 导出和导入)
- [4.5 删除](#4.5 删除)
- [5 容器](#5 容器)
-
- [5.1 创建](#5.1 创建)
- [5.n 日志](#5.n 日志)
1 简介
1.1 核心概念
- 容器(Container) 是Docker技术的核心运行单元,与传统的虚拟机不同,容器不需要模拟完整的硬件环境,也不需要运行独立的操作系统内核。容器在运行时与其他容器和宿主机共享操作系统内核,容器之间相互独立,每个容器都拥有自己的文件系统、网络和进程空间。
- 镜像(Image) 是用于创建容器的模板,包含了运行应用所需的代码、库和配置文件,用户可以从Docker Hub下载镜像或自己构建。镜像采用分层存储结构,每一层代表一个修改步骤。镜像中不包含任何的动态数据,其内容在构建之后不再变动。
- Dockerfile是一个文本文件,写明了如何一步步构建镜像,通过执行其中的指令能够自动生成镜像。
- 镜像仓库(Image Repository) 是集中存储和分发镜像的地方。最常用的公共仓库是Docker Hub,提供了大量官方和社区维护的镜像。
1.2 Docker工作流程
- 开发者编写Dockerfile定义环境,构建Docker镜像。
- 将构建好的镜像推送到镜像仓库。
- 在任何支持Docker的机器上拉取镜像并运行容器。
2 安装
使用cat /etc/os-release命令查看操作系统信息:"Ubuntu 24.04.3 LTS"。
-
更新和安装工具
bash# 更新软件包索引 sudo apt update # 安装必要的依赖工具 sudo apt install -y \ ca-certificates \ curl \ gnupg \ lsb-release \ software-properties-common -
安装Moby
2017年,Docker公司决定将软件产品"Docker"和开源项目"Docker"区分开来,将开源项目"Docker"更名为"Moby",基于Moby构建Docker社区版和企业版等软件产品。
安装 Docker的多个组件,包括 Docker 引擎、命令行工具、构建镜像的插件工具、多容器应用的编排管理工具。
bashsudo apt install -y moby-engine moby-cli moby-buildx moby-compose检查安装:
bashdocker --version
3 启动
由于我是在容器化环境下、以"非服务形式"安装的,无需通过systemctl启动,可以直接运行。
bash
sudo systemctl enable docker
sudo systemctl start docker
使用docker ps命令验证。
常用的Docker服务命令包括:
| 命令 | 说明 |
|---|---|
systemctl start docker |
启动服务 |
systemctl stop docker |
停止服务 |
systemctl restart docker |
重启服务 |
systemctl enable docker |
设置开机启动服务 |
systemctl status docker |
查看服务状态 |
4 镜像
Docker 镜像是创建容器的基础模板,包含了运行应用所需的代码、库、环境变量和配置文件,用户可以直接使用现成的镜像,也可以基于现有镜像定制自己的镜像。
Docker Hub 是 Docker 官方的公共镜像仓库,提供了大量官方和社区维护的镜像。
4.1 拉取
bash
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS(可选):--all-tags/-a:下载指定镜像的所有标签。镜像标签是用来表示和管理镜像版本的重要工具,通常用于区分不同版本或环境。--disable-content-trust:跳过镜像签名验证。
NAME:镜像名称,通常包含注册表地址,不带注册表地址则默认从Docker Hub拉取。TAG(可选):镜像标签,默认为latest。DIGEST(可选):镜像的SHA256摘要。
举例,在Docker Hub中找到想拉取的镜像,从"Tag"中可以看到详细信息:


如上图,在命令行中输入:
bash
docker pull langchain/langchain:0.1.0

4.2 查看
-
使用
docker images查看本地所有镜像。 -
使用
docker inspect [镜像名(含标签)]查看镜像的详细信息。

-
使用
docker history [镜像名(含标签)]查看镜像的构建历史。 -
使用
docker system df查看磁盘使用情况。
4.3 标签
使用docker tag [原镜像名(含标签)] [新镜像名(含标签)]命令为镜像创建新标签。

4.4 导出和导入
- 导出 :
使用docker save -o [镜像名].tar [镜像名]命令将镜像打包成tar文件。 - 导入 :
使用docker load -i [镜像名].tar命令将镜像导入到Docker中。
4.5 删除
使用docker rmi [镜像名/镜像ID]命令删除镜像。当镜像有多个标签时,删除一个标签只会移除该标签引用,不会真正删除掉镜像数据,需要使用镜像ID才能彻底删除镜像文件。
Docker使用过程中会基类大量未使用的镜像缓存,通过docker image prune命令可以清理没有标签且不被任何镜像引用的悬空镜像,加上-a参数还会删除所有未被容器引用的镜像。
5 容器
5.1 创建
bash
docker run [OPTIONS] [IMAGE]
| OPTIONS | |
|---|---|
--name [name] |
指定容器名称 |
-it |
保持交互式终端连接 |
-v [主机目录]:[容器目录] |
将主机的目录挂载到容器中 |
--network |
指定容器的网络模式,设置为=host可以让容器共享主机的网络命名空间 |
--gpus |
all表示分配所有可用的GPU给容器 |
-m |
指定容器最多可以使用的内存,例如150G |
--oom-kill-disable=true |
禁用OOM(Out of Memory)杀手 |
ulimit memlock |
=-1表示不限制内存锁的大小 |
ulimit stack |
线程栈大小限制,例如64MB=67108864 |
shm-size |
设置容器中共享内存的大小,例如32GB |
-d |
以后台模式运行容器 |
-p |
端口映射,格式为[主机端口号]:[容器端口号] |
--rm |
容器停止时自动删除容器 |
--env [变量名]=[变量值] -e [变量名]=[变量值] |
设置环境变量 |
--restart |
容器的重启策略 |
-u [用户名] |
指定用户运行 |
例如,使用langchain/langchain:0.1.0镜像构建容器,指定容器名称为sweety_cake。
bash
docker run --name sweety_cake langchain/langchain:0.1.0 -it -v ~:/workspace --network=host --gpus all
5.n 日志
使用docker logs [容器名]查看容器的日志输出。
参考来源:
AIGC
Docker 万字教程:从入门到掌握
Ubuntu 24.04 国内环境下 Docker 安装完整指南
对于 Docker 改名 Moby ,大家怎么看?
Docker - 基础docker-compose命令