(1) 官方下载路径
- 官方下载地址: Index of linux/static/stable/x86_64/
- 阿里云镜像地址: https://mirrors.aliyun.com/docker-ce/
- 下载最新的 Docker 二进制文件:wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz
- 登录到阿里云服务器,解压上传的 Docker 安装包:
(2) 将解压后的文件移动到系统路径
-
tar -xvf docker-20.10.23.tgz
将解压后的文件复制到
/usr/bin
目录下:sudo cp docker/* /usr/bin/
(3) 配置 Docker 服务
创建一个 Systemd 服务文件,以便管理 Docker:
sudo vi /etc/systemd/system/docker.service
在文件中添加以下内容:
[Unit]
Description=Docker Application Container Engine
# 描述信息,说明这个服务是 Docker 容器引擎。
Documentation=https://docs.docker.com
# 提供 Docker 的官方文档链接,方便用户查阅相关文档。
After=network-online.target firewalld.service
# 表示该服务在 `network-online.target` 和 `firewalld.service` 之后启动。
# 确保网络已经准备好,并且防火墙服务(如果存在)已经启动。
Wants=network-online.target
# 表示该服务希望 `network-online.target` 被启动,但不是强制依赖。
# 如果 `network-online.target` 启动失败,Docker 服务仍然会尝试启动。
[Service]
Type=notify
# 表示 Docker 服务支持通知机制,当服务完全启动后会通知 systemd。
# 这种类型通常用于需要长时间运行的服务。
ExecStart=/usr/bin/dockerd
# 指定启动 Docker 服务时执行的命令:`/usr/bin/dockerd` 是 Docker 守护进程的可执行文件。
ExecReload=/bin/kill -s HUP $MAINPID
# 指定重新加载服务时执行的命令。这里发送 `HUP` 信号给主进程(`$MAINPID`),让 Docker 重新加载配置。
LimitNOFILE=infinity
# 设置文件描述符的最大数量为无限制(infinity)。Docker 可能需要打开大量的文件或连接。
LimitNPROC=infinity
# 设置进程的最大数量为无限制(infinity)。确保 Docker 不会因为进程数限制而受到影响。
TimeoutStartSec=0
# 设置服务启动超时时间为 0,表示不限制启动时间。
# 如果设置为某个具体值(如 60 秒),系统会在超时后认为服务启动失败。
Delegate=yes
# 允许 Docker 自己管理其 cgroups(控制组),而不是由 systemd 直接管理。
# 这对于容器化环境非常重要,因为 Docker 需要对资源进行细粒度控制。
KillMode=process
# 指定当停止服务时,只终止主进程(`dockerd`),而不影响其子进程。
# 这可以避免误杀正在运行的容器。
Restart=on-failure
# 表示如果服务因非正常原因退出(例如崩溃),systemd 会自动重启该服务。
# 如果服务正常退出(例如手动停止),则不会重启。
StartLimitBurst=3
# 在指定的时间间隔内,允许服务最多重启 3 次。
# 如果超过这个次数,systemd 将不再尝试重启服务。
StartLimitInterval=60s
# 设置时间间隔为 60 秒。与 `StartLimitBurst` 配合使用,表示在 60 秒内最多允许 3 次重启。
[Install]
WantedBy=multi-user.target
# 表示该服务会在进入多用户模式(multi-user.target)时被启动。
# 多用户模式是 Linux 系统的标准运行级别之一,通常用于服务器环境。
保存并退出。
安装包下载的路径是root/tool/A001_Docker/docker,所以我的配置文件里面的这句需要修改ExecStart=/usr/bin/dockerd
ExecStart=/root/tool/A001_Docker/docker/
启动 Docker 服务
启动 Docker 并检查状态:sudo systemctl start docker sudo systemctl status docker
(4) 启动 Docker 服务
重新加载 Systemd 配置并启动 Docker:
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
(5) 验证安装
docker --version
4. 使用阿里云镜像加速(可选)
为了加快 Docker 镜像的拉取速度,可以配置阿里云的镜像加速器。
登录阿里云控制台,进入 容器镜像服务,找到你的专属镜像加速地址。
(2) 配置 Docker Daemon
编辑 Docker 的配置文件:
sudo mkdir -p /etc/docker sudo vi /etc/docker/daemon.json
在文件中添加以下内容(替换 <你的加速地址>
为实际的加速地址):
{ "registry-mirrors": ["<你的加速地址>"] }
(3) 重启 Docker
sudo systemctl restart docker
测试 Docker
docker run hello-world
拉取mysql镜像
docker pull mysql:5.7
# 或
docker pull mysql:8.0
(1) 启动容器
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:latest
--name mysql-container
:为容器指定一个名称(这里是mysql-container
)。-e MYSQL_ROOT_PASSWORD=my-secret-pw
:设置 MySQL 的 root 用户密码为my-secret-pw
。-d
:以后台模式运行容器。-p 3306:3306
:将宿主机的 3306 端口映射到容器的 3306 端口。mysql:latest
:使用的 MySQL 镜像版本(这里是最新的版本)。
(2) 使用 Docker 内部连接
进入正在运行的 MySQL 容器:
docker exec -it mysql-container mysql -uroot -p
数据持久化
创建数据卷
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 -v /path/to/your/data:/var/lib/mysql mysql:latest
测试数据持久化
即使删除容器,数据仍然会保存在 /path/to/your/data
中。重新启动一个新的 MySQL 容器并挂载相同的目录即可恢复数据。
自定义配置文件
如果你需要自定义 MySQL 的配置文件(如 my.cnf
),可以将其挂载到容器中。
(1) 创建自定义配置文件
创建一个名为 my.cnf
的文件,内容如下(可以根据需求修改):
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=200
(2) 挂载配置文件
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 \
-v /path/to/your/my.cnf:/etc/mysql/my.cnf \
-v /path/to/your/data:/var/lib/mysql \
mysql:latest
7. 停止和删除容器
(1) 停止容器
docker stop mysql-container
(2) 删除容器
docker rm mysql-container
注意:删除容器不会删除挂载的数据卷中的数据。