序1:Docker 常用命令
docker
# 列出所有镜像
docker images
# 拉取镜像
docker pull <image_name>:<tag>
# 删除镜像
docker rmi <image_name>:<tag>
docker rmi <image_id>
# 查看镜像信息
docker manifest inspect <image_name>:<tag>
# 启动容器并进入 shell 环境,开发和测试用
docker run -it <image_name>:<tag> # 退出后手动清理
docker run -it --rm <image_name>:<tag> # 退出后自动清理
docker run -it --entrypoint /bin/bash <image_name>:<tag>
# 启动容器,后台运行
docker run -d <image_name>:<tag>
docker run -d --name <container_name> <image_name>:<tag> # 指定容器名称
# 停止运行
docker stop <container_name_or_id>
# 删除容器
docker rm <container_name_or_id>
# 进入运行中容器的 shell 环境
docker exec -it <container_name_or_id> /bin/bash
docker exec -it <container_name_or_id> /bin/sh
# 查看日志,追踪模式
docker logs -f <container_name_or_id>
# 构建镜像,设置标签,最后一个'.'将使用当前目录
docker build -t <image_name>:<tag> .
# 导出镜像
docker save -o <tar_name>.tar <image_name>:<tag>
# 导入镜像
docker load -i <tar_name>.tar
docker compose
# 全部重启 restart.sh
#!/bin/sh
sudo docker compose -f docker-compose.yml down # 停止
sudo docker compose -f docker-compose.yml up --detach # 启动
# 单个重启 restart1.sh
#!/bin/sh
if [ -z "${1}" ]; then
echo "error: server-name is empty."
exit 1
fi
sudo docker compose -f docker-compose.yml stop ${1} # 停止
yes | sudo docker compose -f docker-compose.yml rm ${1} # 删除
sudo docker compose -f docker-compose.yml up ${1} --detach # 启动
序2:PostgreSQL 常用命令
\du # 列出全部用户
\l # 列出全部数据库
\c <db_name> # 切换数据库
\q # 退出
select rolname, rolpassword from pg_authid; # 查看用户密码状态
拉取资源
sudo docker pull linuxserver/nginx:latest
sudo docker pull postgres:15
sudo docker pull halohub/halo:2.20
sudo docker images # 查看已安装镜像
编写 docker-compose 配置文件
mkdir docker-compose && cd docker-compose # 之后所有操作都在此文件夹下进行
mkdir docker-volume
touch docker-compose.yml # docker-compose 配置文件
PostgreSQL15 容器配置
services:
postgresql15:
image: postgres:15
container_name: postgresql15
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: "P@ssword123"
volumes:
- ./docker-volume/postgresql/data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- app_net
networks:
app_net:
ipam:
driver: default
config:
- subnet: "172.16.240.0/24"
环境变量中的账密只作用于首次启动时的初始化操作,之后再修改这里并不能同步修改数据库的账密。
sudo docker compose -f docker-compose.yml up postgresql15 --detach
,启动 PG15 容器。
sudo docker ps
,等待 PG15 状态变成 healthy,开始初始化 halo 数据库:
sudo docker exec -it postgresql15 psql -U postgres # 进入容器,并使用默认用户登录
CREATE USER halo WITH PASSWORD 'P@ssword123'; # 创建 halo 账密
CREATE DATABASE halo2_db OWNER halo; # 创建 halo2_db 数据库
GRANT ALL PRIVILEGES ON DATABASE halo2_db TO halo; # 授权
exit # 退出容器
Nginx、Halo2 容器配置
services:
nginx:
image: linuxserver/nginx:latest
container_name: nginx
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./docker-volume/nginx/config:/config
ports:
- 8902:8902 # http
- 8904:8904 # https
restart: unless-stopped
networks:
- app_net
halo2:
image: halohub/halo:2.20
container_name: halo2
depends_on:
postgresql15:
condition: service_healthy
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://postgresql15/halo2_db
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=P@ssword123
- --spring.sql.init.platform=postgresql
- --halo.external-url=http://localhost:8090/
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
- JVM_OPTS=-Xmx256m -Xms256m
volumes:
- ./docker-volume/halo2:/root/.halo2
restart: unless-stopped
networks:
- app_net
postgresql15:
image: postgres:15
container_name: postgresql15
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: "P@ssword123"
volumes:
- ./docker-volume/postgresql/data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- app_net
networks:
app_net:
ipam:
driver: default
config:
- subnet: "172.16.240.0/24"
sudo docker compose -f docker-compose.yml up --detach
,启动全部容器,用于自动创建挂载卷的文件夹。
vim docker-volume/nginx/config/nginx/site-confs/default.conf
,编辑 Nginx 配置:
server {
listen 8902 default_server;
listen [::]:8902 default_server;
listen 8904 ssl default_server;
listen [::]:8904 ssl default_server;
server_name _;
include /config/nginx/ssl.conf;
# halo2
location / {
proxy_pass http://halo2:8090/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
生成自签证书:
openssl genpkey -algorithm RSA -out docker-volume/nginx/config/keys/cert.key
openssl req -x509 -key docker-volume/nginx/config/keys/cert.key -out docker-volume/nginx/config/keys/cert.crt -days 3650 # 有效期 10 年,按实际情况填写其余信息
重启全部容器,生效修改的配置:
sudo docker compose -f docker-compose.yml down
sudo docker compose -f docker-compose.yml up --detach
其他
访问 http://127.0.0.1:8902 或 https://127.0.0.1:8904,完成 Halo2 初始化。
默认主题遇到 404 时,显示的返回首页按钮指向的 URL 是 localhost 而不是真实对外 IP,可以直接隐藏掉按钮。编辑
docker-volume/halo2/themes/theme-earth/templates/error/error.html
,注释掉包含<span th:text="#{page.error.backToHome}">
的整个<a>
标签。
Hello Halo
Hello Halo
如果你看到了这一篇文章,那么证明你已经安装成功了,感谢使用 Halo 进行创作,希望能够使用愉快。
相关链接
在使用过程中,有任何问题都可以通过以上链接找寻答案,或者联系我们。
这是一篇自动生成的文章,请删除这篇文章之后开始你的创作吧!