Docker 是一款开源容器化工具,核心作用:把应用和依赖打包成独立容器,实现一次打包、到处运行,解决环境不一致、部署繁琐问题。
核心类比
- 传统虚拟机:整台 "虚拟电脑",体积大、启动慢、资源占用高。
- Docker 容器:轻量化应用沙箱,共享宿主机内核,秒级启动、体积小、开销极低。
一、三大核心概念
1.镜像(Image)
- 只读模板,相当于应用安装包(包含代码、运行环境、库、配置),是创建容器的模板。
2.容器(Container)
- 镜像运行后的实例,独立运行、相互隔离,一个镜像可启动多个容器。
3.仓库(Registry)
- 存放镜像的平台,官方公共仓库:Docker Hub,也可搭建私有仓库。
二、工作流程
- 编写代码 / 配置 → 编写 Dockerfile(镜像构建脚本)
- 根据 Dockerfile 构建镜像
- 基于镜像 启动容器 对外提供服务
- 镜像可推送至仓库,其他服务器拉取、快速部署
三、在线安装
1.CentOS 7/8/9 安装
bash
# 卸载旧版本
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖 & 镜像源
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker Engine
yum install -y docker-ce docker-ce-cli containerd.io
# 启动 & 开机自启
systemctl start docker
systemctl enable docker
# 验证
docker --version
docker run hello-world
2.Ubuntu 18.04/20.04/22.04 安装
bash
# 更新源+安装依赖
apt update && apt install -y ca-certificates curl gnupg lsb-release
# 添加Docker GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 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" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装
apt update && apt install -y docker-ce docker-ce-cli containerd.io
# 启动+自启
systemctl start docker
systemctl enable docker
3.一键配置国内源(/etc/docker/daemon.json)
bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"http://hub-mirror.c.163.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:
- 验证是否生效
docker info
- 直接拉取示例(不用改配置也行)
用轩辕加速拉 nginx
docker pull docker.xuanyuan.me/library/nginx
用 DaoCloud 拉 k8s 镜像
docker pull docker.m.daocloud.io/k8s.gcr.io/pause:3.9
四、离线安装
bash
#!/bin/bash
set -euo pipefail
# ==================== 配置项 ====================
DOCKER_VERSION="29.5.3"
MIRROR_URL="https://mirrors.aliyun.com"
DOCKER_TAR="docker-${DOCKER_VERSION}.tgz"
DOCKER_MIRROR="https://docker.m.daocloud.io"
# ================================================
# 统一输出函数
info() {
echo -e "\033[32m[INFO] $1\033[0m"
}
error() {
echo -e "\033[31m[ERROR] $1\033[0m"
exit 1
}
# 检查是否为 root 用户
check_root() {
if [[ $EUID -ne 0 ]]; then
error "请使用 root 权限执行此脚本!"
fi
}
# 下载 Docker 静态包
prepare() {
info "开始检查并下载 Docker 静态安装包: ${DOCKER_TAR}"
if [[ ! -f ${DOCKER_TAR} ]]; then
wget -c "${MIRROR_URL}/docker-ce/linux/static/stable/x86_64/${DOCKER_TAR}" || error "Docker 安装包下载失败"
else
info "本地已存在安装包,跳过下载"
fi
}
# 安装 Docker 二进制 + systemd 服务 + 镜像加速
install_docker() {
info "解压 Docker 二进制文件到 /usr/local"
tar -zxf "${DOCKER_TAR}" -C /usr/local/
info "拷贝二进制文件到 /usr/bin"
cp -rf /usr/local/docker/* /usr/bin/
info "写入 docker systemd 服务文件"
cat > /lib/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock
ExecReload=/bin/kill -s HUP \$MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
info "配置 Docker 镜像加速"
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["${DOCKER_MIRROR}"]
}
EOF
info "重载 systemd 配置并重启 Docker"
systemctl daemon-reload
systemctl restart docker
}
# 开机自启 + 验证版本
start_docker() {
info "设置 Docker 开机自启并启动服务"
systemctl enable --now docker
info "Docker 安装完成,版本信息如下:"
docker version
}
# 主流程
main() {
check_root
prepare
install_docker
start_docker
info "====== Docker 部署全部完成 ======"
}
main
五、Docker 核心常用命令
(一)镜像操作
1.查看本地镜像
bash
docker images
docker images -a # 查看所有镜像(含虚悬)
2.搜索镜像
bash
docker search 镜像名
3.拉取镜像
bash
docker pull 镜像名:标签
# 示例:拉取nginx最新版
docker pull nginx:latest
4.删除镜像
bash
docker rmi 镜像ID/镜像名
# 强制删除
docker rmi -f 镜像ID
# 清理无用镜像
docker image prune
5.导出 / 导入镜像
bash
# 导出
docker save -o 文件名.tar 镜像名
# 导入
docker load -i 文件名.tar
(二)容器操作
1.查看容器
bash
docker ps # 运行中的容器
docker ps -a # 所有容器(含停止)
docker ps -q # 只显示容器ID
2.创建并启动容器
bash
# 基础格式
docker run [参数] 镜像名:标签
# 常用参数说明
# -d 后台运行(守护进程)
# --name 指定容器名称
# -p 宿主机端口:容器端口 端口映射
# --restart=always 开机自动重启容器
# -v 宿主机目录:容器目录 数据卷挂载
# -it 交互式进入容器
# 示例1:启动nginx,端口80映射,后台运行
docker run -d --name mynginx -p 80:80 nginx
# 示例2:交互式进入centos
docker run -it --name mycentos centos /bin/bash
3.启动 / 停止 / 重启容器
bash
docker start 容器名/ID
docker stop 容器名/ID
docker restart 容器名/ID
# 强制停止
docker kill 容器名/ID
4.进入正在运行的容器
bash
docker exec -it 容器名/ID /bin/bash
# 退出容器:exit
5.删除容器
bash
docker rm 容器名/ID
# 强制删除运行中容器
docker rm -f 容器名/ID
# 批量删除所有停止的容器
docker container prune
6.查看容器日志
bash
docker logs 容器名/ID
# 实时滚动日志
docker logs -f 容器名/ID
# 查看最后100行
docker logs --tail 100 容器名/ID
(三)文件拷贝(宿主机 ↔ 容器)
bash
# 宿主机 → 容器
docker cp 宿主机文件路径 容器ID:容器内路径
# 容器 → 宿主机
docker cp 容器ID:容器内文件路径 宿主机路径
(四)数据卷 & 信息查看
1.查看数据卷
bash
docker volume ls
2.查看容器 / 镜像详细信息
bash
docker inspect 容器ID/镜像ID
3.查看容器资源占用
bash
docker stats
(五)打包镜像(容器转镜像)
把运行中的容器保存为新镜像:
bash
docker commit 容器ID 新镜像名:标签
六、快速排错 / 清理常用组合
bash
# 停止所有容器
docker stop $(docker ps -q)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有镜像(谨慎使用)
docker rmi $(docker images -q)