Docker简介及安装

Docker 是一款开源容器化工具,核心作用:把应用和依赖打包成独立容器,实现一次打包、到处运行,解决环境不一致、部署繁琐问题。

核心类比

  • 传统虚拟机:整台 "虚拟电脑",体积大、启动慢、资源占用高。
  • Docker 容器:轻量化应用沙箱,共享宿主机内核,秒级启动、体积小、开销极低。

一、三大核心概念

1.镜像(Image)

  • 只读模板,相当于应用安装包(包含代码、运行环境、库、配置),是创建容器的模板。

2.容器(Container)

  • 镜像运行后的实例,独立运行、相互隔离,一个镜像可启动多个容器。

3.仓库(Registry)

  • 存放镜像的平台,官方公共仓库:Docker Hub,也可搭建私有仓库。

二、工作流程

  1. 编写代码 / 配置 → 编写 Dockerfile(镜像构建脚本)
  2. 根据 Dockerfile 构建镜像
  3. 基于镜像 启动容器 对外提供服务
  4. 镜像可推送至仓库,其他服务器拉取、快速部署

三、在线安装

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

注意:

  1. 验证是否生效

docker info

  1. 直接拉取示例(不用改配置也行)

用轩辕加速拉 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)
相关推荐
IT策士1 小时前
第50篇 k8s之系列总结 + 项目演示与后续扩展
云原生·容器·kubernetes
刘国华-平价IT运维课堂1 小时前
Ubuntu 26.04 LTS 发布,研发与运维需要关注什么?
linux·运维·服务器·人工智能·ubuntu
j_xxx404_1 小时前
MySQL数据库基础硬核解析:从 C/S 网络服务到磁盘文件与存储引擎
linux·运维·服务器·开发语言·数据库·mysql·ai
胖胖雕1 小时前
LLM增强的网易云API部署用于鸿蒙原生音乐app: Melotopia
docker·node.js·harmony
卧室小白1 小时前
K8S-Pod的生命周期与调度
云原生·容器·kubernetes
江华森1 小时前
Docker 基础实战完整指南
运维·docker·容器
fthux1 小时前
「装闭」-AI驱动的开源装修闭坑系统
人工智能·docker·开源
likerhood1 小时前
服务器下载 Hugging Face 模型笔记:以 Qwen2.5-Coder-7B-CL 为例
运维·服务器·笔记
峥无10 小时前
Linux进程信号:从基础概念到内核底层原理
linux·运维·服务器·信号处理