CentOS 使用 Docker 部署 Halo 博客
一、运行环境
腾讯轻量应用服务器: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 | sudo yum remove docker \ |
yum 可能会报告您没有安装这些软件包。
2.3、使用 rpm 存储库安装
在新主机上首次安装 Docker 引擎之前,您需要 需要设置 Docker 存储库。之后,您可以安装和更新 存储库中的 Docker。
设置存储库
安装软件包(提供实用程序)并设置存储库。yum-utilsyum-config-manager
1 | sudo yum install -y yum-utils |
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 | docker run -d --restart=always --name 设置容器名 使用的镜像 |
2、修改已有容器,使用 update
如果创建时未指定 –restart=always,可通过 update 命令设置。
1 | docker update --restart=always 容器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 容器。