一、运行环境

腾讯轻量应用服务器:2CPU + 2GB + OpenCloudOS 8.6。

二、安装Docker

要开始使用 CentOS 上的 Docker 引擎,请确保满足先决条件,然后按照安装步骤操作。官方文档

2.1、更新系统

由于本机已经使用 root 账户连接服务器,不需要再使用 sudo 命令提权。

  • 更新系统
1
yum update -y
  • 删除yum缓存
1
yum clean all
  • 重启服务器
1
reboot

2.2、卸载旧版本

1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

yum 可能会报告您没有安装这些软件包。

2.3、使用 rpm 存储库安装

在新主机上首次安装 Docker 引擎之前,您需要 需要设置 Docker 存储库。之后,您可以安装和更新 存储库中的 Docker。

  • 设置存储库

  • 安装软件包(提供实用程序)并设置存储库。yum-utilsyum-config-manager

1
2
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2.4、安装 Docker 引擎

2.4.1、要安装最新版本,请运行

1
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果系统提示接受 GPG 密钥,请验证指纹是否和官方文档里的匹配,如果是,请接受它。

此命令安装 Docker,但不启动 Docker。它还会创建一个组,但是,默认情况下不会向该组添加任何用户。

2.4.2、启动 Docker

1
sudo systemctl start docker

2.4.3、设置 Docker 开机启动

1
sudo systemctl enable docker

2.4.4、设置容器自动重启

1、创建容器时设置

1
2
3
4
5
6
7
8
9
10
docker run -d --restart=always --name 设置容器名 使用的镜像
(上面命令 --name后面两个参数根据实际情况自行修改)

# Docker 容器的重启策略如下:
--restart具体参数值详细信息:
no        // 默认策略,容器退出时不重启容器;
on-failure   // 在容器非正常退出时(退出状态非0)才重新启动容器;
on-failure:3 // 在容器非正常退出时重启容器,最多重启3次;
always     // 无论退出状态是如何,都重启容器;
unless-stopped // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。

2、修改已有容器,使用 update

如果创建时未指定 –restart=always,可通过 update 命令设置。

1
2
docker update --restart=always 容器ID(或者容器名)
(容器ID或者容器名根据实际情况修改)

2.4.5、删除 Docker 镜像和容器

删除 Docker 镜像

1、Docker rmi

docker rmi 通过镜像的 ID 删除镜像。

要删除镜像,首先需要列出所有镜像以获取镜像的 ID,镜像的名称和其他详细信息。 运行简单的命令 docker images -a 或 docker images。

1
docker images -a
1
docker images

之后,明确要删除哪个镜像,然后执行简单命令 docker rmi your-image-id。然后,列出所有镜像并检查,可以确认镜像是否已删除。

2、一次删除多张镜像

当你要一次删除多张镜像时,可以使用一种方法。首先只需列出镜像即可获取镜像的 ID,然后执行简单的命令。

1
docker rmi <your-image-id> <your-image-id> ...

列出镜像的 ID,每个 ID 之间留一个空格。

3、一次删除所有镜像

要删除所有镜像,有一个简单的命令可以做到:docker rmi $(docker images -q)。

1
docker rmi $(docker images -q)
  • 在上面的命令中,有两个命令,第一个在 $() 中执行的命令是 shell 语法,返回以该执行的结果。
  • 然后,-q- 是一个选项,用于返回唯一的 ID。
  • $() 返回镜像 ID 的结果,然后 docker rmi 删除所有这些镜像。

4、更多信息

删除 Docker 容器

1、Docker rm

docker rm 根据容器的名称或者 ID 来删除容器。

如果 Docker 容器正在运行,你在删除它们之前需要先停止运行。

停止所有容器运行:docker stop $(docker ps -a -q)

1
docker stop $(docker ps -a -q)

删除所有停止运行的容器:docker rm $(docker ps -a -q)

1
docker rm $(docker ps -a -q)

2、删除多个容器

你可以通过向命令传递要删除的容器列表来停止和删除多个容器。shell 语法 $() 返回括号中执行的任何结果。因此,你可以在其中创建容器列表,以传递给 stop 和 rm 命令。

3、docker ps -a -q 分解

  • docker ps 列出容器。

  • -a 这个选项用于列出所有容器,包括停止运行的。如果没有这个选项,则默认只列出在运行的容器。

  • -q 这个选项列出容器的数字 ID,而不是容器的所有信息。

三、部署 Halo

Halo官方截至到2023/07/25日已经更新到2.7版本,但是由于目前的主题适配等因素,先不升级2.0版本,还是先使用1.6.1版本部署。

3.1、使用 Docker 镜像

Halo 在 Docker Hub 上发布的镜像为 halohub/halo

3.1.1 创建工作目录

1
mkdir ~/.halo && cd ~/.halo

3.1.2 下载示例配置文件到工作目录

1
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

3.1.3 编辑配置文件,配置数据库或者端口等,如需配置请参考 配置参考

1
vim application.yaml

按 i 进入编辑模式,修改数据库用户名和密码,并妥善保存(此用户名和密码在 Halo 第一次启动的时候将自动创建。并且不支持首次启动后,通过修改配置文件中的账户或者密码,如果修改,再次启动将提示用户名或者密码错误。)。修改完成后按 ESC 退出编辑模式,然后输入 :wq 退出。

3.1.4 拉取 Halo1.6.1 镜像

1
docker pull halohub/halo:1.6.1

3.1.5 创建容器

1
docker run -it -d --name halo1.6.1 -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.6.1

注意:此命令默认使用自带的 H2 Database 数据库。如需使用 MySQL,请参考:使用 Docker 部署 Halo 和 MySQL

  • -it: 开启输入功能并连接伪终端
  • -d: 后台运行容器
  • –name: 为容器指定一个名称
  • -p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
  • -v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
  • –restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。

3.1.6 打开 http://ip:端口号 即可看到安装引导界面

如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 http://ip:端口号 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。

3.2、反向代理

域名审核中,暂无法实用,按照官方文档配置即可。

3.3、版本升级

我部署使用的是固定版本,升级步骤只做演示。

3.3.1 停止并删除当前运行中的容器

1
docker stop halo1.6.1
1
docker rm -f halo1.6.1

你的容器名称不一定为 halo1.6.1,在执行前可以先执行 docker ps -a 查看一下。

3.3.2 备份数据(重要)

1
cp -r ~/.halo ~/.halo.archive

需要注意的是,.halo.archive 文件名不一定要根据此文档命名,这里仅仅是个示例。

3.3.3 清空 leveldb 缓存(如果有使用 leveldb 作为缓存策略)

1
rm -rf ~/.halo/.leveldb

3.3.4 拉取 Halo1.6.1 镜像

1
docker pull halohub/halo:1.6.1

3.3.5 创建容器

1
docker run -it -d --name halo1.6.1 -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.6.1
  • -it: 开启输入功能并连接伪终端
  • -d: 后台运行容器
  • –name: 为容器指定一个名称
  • -p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
  • -v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
  • –restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。