离线安装必要性
Docker 离线安装的必要性主要体现在以下几个方面:
-
安全合规性:某些组织或企业的服务器出于安全政策的考虑,不允许连接到互联网。在这种情况下,为了遵守安全规定,需要采用离线安装的方式来部署 Docker。
-
网络限制:在一些特定的网络环境中,服务器可能因为网络隔离或限制而无法访问外部网络资源,这就需要通过离线方式来安装所需的软件。
-
稳定性和版本控制:在生产环境中,为了确保系统的稳定性,可能需要使用特定版本的 Docker,而这个版本可能不是最新版本。通过离线安装,可以确保安装的 Docker 版本是经过测试和验证的。
-
避免潜在风险:在线安装过程中可能会受到网络攻击或恶意软件的威胁,而离线安装可以在一个受控的环境中进行,降低这些风险。
总之,Docker 离线安装提供了一种灵活、安全、可控的部署方式,尤其适用于那些对网络安全性、稳定性和合规性有特殊要求的场景。
分步安装法
-
下载 Docker 离线安装包
- 在一台可以访问互联网的电脑上,从清华镜像源下载 Docker 的 tar.gz 格式的安装包。
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-24.0.6.tgz
-
上传到服务器
- 使用文件传输工具(如 WinSCP)将下载的 Docker 安装包上传到目标服务器的
/opt/software/
目录下。
- 使用文件传输工具(如 WinSCP)将下载的 Docker 安装包上传到目标服务器的
-
解压安装包
tar -zxvf docker-24.0.6.tgz
-
复制文件
sudo cp ./docker/* /usr/bin
-
创建 Docker 服务文件
sudo cd /etc/systemd/system/ sudo touch docker.service
-
编辑 Docker 服务文件
- 打开
docker.service
文件,例如使用sudo vim docker.service
。 - 将以下内容复制到
docker.service
文件中。[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 --selinux-enabled=false ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
- 打开
-
添加执行权限
sudo chmod +x docker.service
-
加载并启动 Docker 服务
sudo systemctl daemon-reload sudo systemctl start docker
-
设置开机自启动
sudo systemctl enable docker.service
-
验证 Docker 安装
sudo systemctl status docker docker --version
一键安装法
-
创建软件安装目录
sudo mkdir -p /opt/software/docker
-
上传安装软件
- 将安装软件上传到
/opt/software/docker
目录。
- 将安装软件上传到
-
创建 Docker 服务文件
- 在
/opt/software/docker
目录下创建docker.service
文件, 内容参考分步安装第6步
。
- 在
-
编写一键安装脚本
- 在 Docker 安装包所在目录下创建
install.sh
脚本文件,并填入以下内容:#!/bin/sh echo '解压tar包' tar -xvf $1 echo '将docker目录下所有文件复制到/usr/bin目录' cp docker/* /usr/bin rm -rf docker/* echo '将docker.service 复制到/etc/systemd/system/目录' cp docker.service /etc/systemd/system/ echo '添加文件可执行权限' chmod +x /etc/systemd/system/docker.service echo '重新加载配置文件' systemctl daemon-reload echo '启动docker' systemctl start docker echo '设置开机自启' systemctl enable docker.service echo 'docker安装成功' docker --version
- 在 Docker 安装包所在目录下创建
-
编写一键卸载脚本
- 在 Docker 安装包所在目录下
/opt/software/docker
创建uninstall.sh
脚本文件,并填入以下内容:#!/bin/bash # 卸载 Docker 脚本 # 步骤一:停止 Docker 服务 echo "停止 Docker 服务..." sudo systemctl stop docker # 步骤二:删除 Docker 服务 echo "移除 Docker 开机自启动..." sudo systemctl disable docker.service echo "删除 Docker 服务文件..." sudo rm -f /etc/systemd/system/docker.service # 步骤三:删除 Docker 相关命令和文件 echo "删除 Docker 相关命令..." sudo rm -f /usr/bin/docker* sudo rm -f /usr/bin/containerd* sudo rm -f /usr/bin/ctr sudo rm -f /usr/bin/runc echo "删除 Docker 目录和容器相关文件..." sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd # 步骤四:验证是否已成功卸载 Docker echo "验证 Docker 是否已成功卸载..." if ! docker --version &> /dev/null; then echo "Docker 卸载成功。" else echo "Docker 卸载失败,请检查。" fi
- 在 Docker 安装包所在目录下
-
赋予脚本执行权限
chmod +x install.sh chmod +x uninstall.sh
-
执行安装脚本
./install.sh docker-24.0.6.tgz
-
验证 Docker 安装
sudo systemctl status docker docker --version
-
卸载Docker安装
./uninstall.sh
离线镜像加载
以 Docker 中的 MySQL 5.7 镜像为例,演示镜像离线加载的步骤, 包括从拉取(pull)到保存(save)再到加载(load)的步骤:
-
拉取 MySQL 5.7 镜像
在有网络连接的机器上,首先使用docker pull
命令来下载 MySQL 5.7 镜像。docker pull mysql:5.7
-
保存 MySQL 5.7 镜像为 tar 文件
下载完成后,使用
docker save
命令将 MySQL 5.7 镜像打包为 tar 文件。docker save -o mysql-5.7.tar mysql:5.7
-
传输 tar 文件
将生成的mysql-5.7.tar
文件传输到目标机器。你可以使用scp
、USB 驱动器或其他文件传输方法。下面以scp
为例:scp mysql-5.7.tar username@host:/opt/software/docker
username@host
替换成你的服务器的用户名和IP地址。
-
在目标机器上加载 tar 文件为镜像
在目标机器上,使用docker load
命令来从 tar 文件中加载 MySQL 5.7 镜像。docker load -i mysql-5.7.tar
-
验证镜像是否加载成功
使用docker images
命令来检查 MySQL 5.7 镜像是否已经成功加载到本地镜像库中。docker images
你应该能够在列出的镜像中看到
mysql:5.7
。 -
运行 MySQL 5.7 容器
如果你想要在 Docker 中运行 MySQL 5.7,可以使用以下命令:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
这里,
mysql
是你给容器指定的名称,123456
是你设置的 MySQL root 用户的密码,-d
表示以 detached 模式运行容器。
注意事项
- 确保在执行这些步骤之前,你有足够的权限(可能需要
sudo
)来执行这些命令,并且服务器的防火墙设置允许 Docker 服务的正常运行。