# Docker(容器化平台) Docker 是一个 容器化平台,可以让你把应用程序和它运行所需的环境打包在一起,形成一个独立的“容器”。 简单来说,它就像一个轻量级的虚拟机,但比虚拟机更快、更省资源。 ## 概念 1. 镜像(Image) - 镜像是一个 只读模板,包含应用程序和依赖环境。 - 可以理解为应用的快照,像“配方”。 2. 容器(Container) - 容器是镜像的 运行实例,可以启动、停止、删除。 - 可以理解为根据配方做出来的“饭菜”。 3. Dockerfile - 用来定义镜像内容的文件,相当于“配方清单”。 - 里面写明了基础镜像、依赖、环境变量、运行命令等。 4. Docker Hub - 官方提供的镜像仓库,可以下载别人已经打包好的镜像,也可以上传自己的镜像。 ## 快速安装 轩辕提供的安装脚本: ```bash bash <(wget -qO- https://xuanyuan.cloud/docker.sh) ``` > 参考网站:https://zhuanlan.zhihu.com/p/24461370776 ## 脚本安装 ### 对于基于Debian的系统(如Ubuntu、Debian) ```bash #!/bin/bash # ------------------------- # 1️⃣ 卸载旧版本 Docker # ------------------------- sudo apt-get remove -y \ docker \ docker-engine \ docker.io \ containerd \ runc \ docker-ce \ docker-ce-cli \ containerd.io \ docker-compose-plugin # 可选:清理残留数据(慎用,会删除容器和镜像) # sudo rm -rf /var/lib/docker /var/lib/containerd echo "旧版本 Docker 已卸载(如果存在)" # ------------------------- # 2️⃣ 更新软件包列表并安装必要依赖 # ------------------------- sudo apt-get update sudo apt-get install -y ca-certificates curl software-properties-common lsb-release # ------------------------- # 3️⃣ 创建密钥存储目录 # ------------------------- sudo install -m 0755 -d /etc/apt/keyrings # ------------------------- # 4️⃣ 下载Docker官方GPG密钥 # ------------------------- sudo curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # ------------------------- # 5️⃣ 添加 Docker 仓库 # ------------------------- if [ "$(lsb_release -is)" = "Ubuntu" ]; then echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null elif [ "$(lsb_release -is)" = "Debian" ]; then echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null fi sudo apt-get update echo "Docker 仓库已添加。" # ------------------------- # 6️⃣ 安装 Docker 及相关组件 # ------------------------- sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin echo "Docker 安装完成 ✅" ``` ### 对于基于RHEL的系统(如CentOS、RHEL) ```bash #!/bin/bash # ------------------------- # 1️⃣ 卸载旧版本 Docker # ------------------------- sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-ce \ docker-ce-cli \ containerd.io \ docker-compose-plugin echo "旧版本 Docker 已卸载(如果存在)" # ------------------------- # 2️⃣ 安装 yum 配置管理工具 # ------------------------- sudo yum install -y yum-utils # ------------------------- # 3️⃣ 检测系统发行版并添加 Docker 仓库 # ------------------------- if [ -f /etc/centos-release ]; then # CentOS 系统 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo elif [ -f /etc/redhat-release ]; then # RHEL 系统 # 注意:RHEL 用户需要启用订阅管理仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo else echo "未识别的发行版,脚本退出。" exit 1 fi # ------------------------- # 4️⃣ 更新 yum 缓存 # ------------------------- sudo yum makecache fast echo "Docker 仓库已添加。" # ------------------------- # 5️⃣ 安装 Docker 及相关组件 # ------------------------- sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin echo "Docker 安装完成 ✅" ``` ### 通用脚本 ```bash #!/bin/bash set -e # ------------------------- # 1️⃣ 卸载旧版本 Docker # ------------------------- remove_old_docker() { if command -v apt-get >/dev/null 2>&1; then sudo apt-get remove -y docker docker-engine docker.io containerd runc docker-ce docker-ce-cli containerd.io docker-compose-plugin || true elif command -v yum >/dev/null 2>&1; then sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-ce \ docker-ce-cli \ containerd.io \ docker-compose-plugin || true fi echo "旧版本 Docker 已卸载(如果存在)" } # ------------------------- # 2️⃣ 安装 Docker(DEB 系统) # ------------------------- install_docker_deb() { local distro=$1 local codename=$2 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common lsb-release sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL "https://download.docker.com/linux/$distro/gpg" -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$distro $codename stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl enable --now docker } # ------------------------- # 3️⃣ 安装 Docker(RPM 系统) # ------------------------- install_docker_rpm() { local distro=$1 if [ "$distro" = "fedora" ]; then sudo dnf -y install dnf-plugins-core else sudo yum install -y yum-utils fi sudo yum-config-manager --add-repo "https://download.docker.com/linux/$distro/docker-ce.repo" sudo yum makecache fast sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable --now docker } # ------------------------- # 4️⃣ 主流程 # ------------------------- remove_old_docker # 检测 Linux 发行版 if [ -f /etc/os-release ]; then . /etc/os-release else echo "无法确定您的 Linux 发行版。" exit 1 fi case $ID in ubuntu|debian|raspbian) echo "检测到 $ID $VERSION_CODENAME,开始安装 Docker..." install_docker_deb $ID $VERSION_CODENAME ;; centos|rhel|fedora|sles) echo "检测到 $ID,开始安装 Docker..." install_docker_rpm $ID ;; *) echo "不支持的 Linux 发行版:$ID" exit 1 ;; esac echo "Docker 及 Docker Compose 安装完成 ✅" ``` ### 运行脚本 ```bash # 1.创建脚本 vim docker-script.sh # 2.输入内容 i 进行编辑模式, :wq 保存 # 3.赋予权限 chmod +x docker-script.sh # 4.运行脚本 ./docker-script.sh ``` ## 镜像设置 不设置镜像会导致拉取速度非常慢 访问 https://api.suoyinmulu.com/open/v1/docker-hub/seeded-up/lists 获取最新的docker镜像,将 list 中的内容拷贝到 docker 中的 registry-mirrors 中。 ```bash sudo vim /etc/docker/daemon.json ``` ```json { "registry-mirrors": [ // list ] } ``` 刷新: ```bash sudo systemctl daemon-reload && sudo systemctl restart docker ``` ## 问题 ### 权限不足 1. 添加docker用户组(默认有) ``` sudo groupadd docker ``` 2. 添加当前用户到docker组中 ``` sudo gpasswd -a $USER docker ``` 3. 更新用户组 ``` newgrp docker ``` 4. 重启生效 或 提前执行(建议重启) ``` sudo chown root:docker /var/run/docker.sock ```