← 返回首页

docker基本用法

📝 _

本文系统梳理 Docker 核心概念、安装配置、常用命令,适合从零开始学习容器化部署的开发者。

一、核心基础概念

1.1 什么是 Docker

Docker 是一款开源的容器化部署工具,基于 Linux 容器技术开发,能够将应用程序及其依赖、环境、配置统一打包到容器中,实现一次打包、随处运行。

彻底解决开发、测试、生产环境不一致导致的"本地能跑,线上报错"问题,是目前后端开发、微服务、自动化部署的核心工具。

1.2 容器 vs 虚拟机(核心区别)

特性虚拟机Docker 容器
底层原理模拟完整硬件,搭载独立操作系统共享宿主机操作系统内核
体积GB 级MB 级
启动速度分钟级秒级
资源占用高低
隔离性强(完全隔离)轻量(进程级隔离)
核心定位装系统装应用

一句话总结:虚拟机是装系统,Docker 是装应用。

1.3 Docker 三大核心组件

  • 镜像(Image):容器的模板,只读文件,包含应用、依赖、运行环境。相当于"系统安装包"。
  • 容器(Container):镜像运行后的实例,可读写、独立运行、相互隔离。相当于"运行中的系统程序"。
  • 仓库(Registry):存放镜像的远程仓库,默认官方仓库是 Docker Hub,也可搭建私有仓库。

二、安装教程

2.1 Linux 安装

debain系安装步骤

# 更新源索引
sudo apt update


# ca-certificates:https证书信任;curl:用来下载GPG公钥 
sudo apt install -y ca-certificates curl

# 创建 /etc/apt/keyrings 目录,权限0755 
sudo install -m 0755 -d /etc/apt/keyrings
 
# 下载docker官方gpg公钥
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc 

# 添加读权限,让apt可以读取这个密钥文件 
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加 Docker APT 软件源(这里使用清华镜像源)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \

# Ubuntu换成下面这条命令
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \


# 把 apt 源配置写入 docker.list 文件
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新 apt 索引
sudo apt update

# 安装 docker 全套组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 开机自动启动
docker sudo systemctl enable docker
 
# 立刻启动docker服务 
sudo systemctl start docke

# 查看版本 
docker --version 

# 运行hello-world测试容器 
sudo docker run hello-world

红帽系安装步骤


# 安装dnf工具包,提供dnf-config-manager命令,用来管理yum源
sudo dnf install -y dnf-plugins-core

# 添加docker官方yum源(清华镜像)
sudo dnf config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/docker-ce.repo


# 更新dnf源缓存索引(相当于apt update)
sudo dnf makecache

# 安装docker全套组件,包名和Debian保持一致!
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 设置开机自启docker
sudo systemctl enable docker

# 立即启动docker服务
sudo systemctl start docker

# 查看docker版本
docker --version

# 运行hello-world测试容器
sudo docker run hello-world

2.2 配置国内镜像

sudo tee /etc/docker/daemon.json <<EOF

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

EOF
# 生效
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证
docker info

国内常用镜像列表

  • https://docker.m.daocloud.io DaoCloud 镜像
  • https://docker.1ms.run 毫秒镜像
  • https://docker.xuanyuan.me 轩辕镜像
  • 腾讯云内网:https://mirror.ccs.tencentyun.com(仅腾讯云服务器内可用)

三、docker常用命令

3.1 基础信息命令

# 查看 Docker 版本
docker --version

# 详细版本(客户端+服务端)
docker version 

# 查看详细信息(docker环境信息)
docker info

# 检查命令帮助
docker 命令名 --help

3.2 镜像操作命令

# 搜索镜像(Docker Hub)
docker search 镜像名

# 下载镜像(默认最新版 latest)
docker pull 镜像名:版本号
# 示例:下载 nginx 1.21 版本
docker pull nginx:1.21

# 查看本地所有镜像
docker images

# 删除本地镜像
docker rmi 镜像ID/镜像名

# 强制删除镜像
docker rmi -f 镜像ID

# 查看镜像详细信息
docker inspect 镜像ID

 
# 清理所有未使用镜像
docker image prune -a

3.3 容器操作命令

# 1. 运行容器(核心命令)
docker run [参数] 镜像名:版本
参数说明
-d后台运行容器(守护进程)
-p 宿主机端口:容器端口端口映射
--name 名称自定义容器名称
--restart=always开机自启容器
-v 宿主机目录:容器目录数据挂载
# 示例:后台运行 nginx,映射 80 端口
docker run -d --name nginx-demo -p 80:80 nginx:1.21

# 2. 查看正在运行的容器
docker ps
# 查看所有容器(包含已停止)
docker ps -a

# 3. 启动/停止/重启容器
docker start 容器ID/容器名
docker stop 容器ID/容器名
docker restart 容器ID/容器名

# 4. 删除容器(必须先停止)
docker rm 容器ID/容器名
# 强制删除运行中的容器
docker rm -f 容器ID/容器名

# 5. 查看容器日志
docker logs 容器ID/容器名

# 实时查看日志
docker logs -f 容器ID/容器名

# 6. 进入容器内部
docker exec -it 容器ID/容器名 /bin/bash

四、数据持久化

docker数据持久化有3种方式:Bind Mount、Volume、tmpfs mount

4.1 Bind Mount(绑定挂载)

直接映射宿主机指定目录 / 文件到容器;数据位置自己掌控,适合开发代码热加载、挂载配置文件;缺点:强依赖宿主机路径,移植差

4.2 Volume(数据卷)

Docker 自行管理,默认存放在 /var/lib/docker/volumes,分命名卷、匿名卷;容器删除卷还在;支持远程驱动(NFS、云盘),可多容器共享

匿名卷((Anonymous Volume))

  • 只写容器内路径,不写冒号前面名字
# 匿名卷
docker run -v 容器内路径 镜像名
  • Docker 自动生成一长串 UUID 作为卷名,比如:abc123xxxx...
  • 位置:/var/lib/docker/volumes/UUID/_data
  • 特点:
    1. 属于 volume,容器删除默认卷还在 。
    2. 名字是随机 UUID,很难手动找到、不好复用、不好备份。
    3. 容易堆积垃圾,清理麻烦
    4. 典型场景:临时测试、不想自己起名、只给当前容器用
  • 清理匿名卷
# 只清理没有被容器引用的匿名卷
docker volume prune

命名卷(Named Volume)

  • 创建方法:冒号前面自己指定名字
# 先创建(可选)
docker volume create 卷名
# 使用命名卷
docker run -v 卷名:容器内路径 镜像名
  • 位置:/var/lib/docker/volumes/卷名/_data

  • 特点:

    1. 名字自己定义,可读性强,多个容器直接共享同一个卷
    2. 方便备份、迁移、查看
    3. 需要自己管理名字,不要重名冲突

4.3 tmpfs mount(内存挂载,不持久化)

数据放在宿主机内存,不落磁盘;容器停止 / 重启数据直接丢失;适合临时敏感数据、缓存