Docker部署 halo|青训营

261 阅读7分钟

抽一点时间整理下部署 halo 框架的流程、相信笔记对于刚入门的伙伴会受益匪浅

首先需要一台公网服务器,需要备案,然后购买域名解析服务器

熟悉 docker 命令就可以部署 halo 博客框架啦

Docker是一个用于构建、部署和运行应用程序的开源平台。它利用容器技术来实现应用。 有以下几个特性:

  1. 容器: 容器是 Docker 的核心组件,它是一个封装了应用程序及其所有依赖的运行时环境。容器隔离了应用程序的文件系统、进程空间和网络,使其能够在不同环境中保持一致的行为。每个容器都是独立运行的实体,互不影响。
  2. 镜像: 镜像是容器的模板,它包含了一个完整的文件系统、应用程序代码、依赖和运行配置。开发者可以通过编写 Dockerfile 来定义镜像的构建过程,然后使用这个镜像创建容器。镜像可以通过 Docker Hub 或私有仓库进行共享和分发。
  3. 容器编排: Docker 提供了一些工具用于管理多个容器的编排,例如 Docker Compose 和 Kubernetes。这些工具可以定义容器之间的关系、依赖和扩展规则,从而实现复杂应用程序的部署和管理。
  4. 跨平台性: Docker 的容器可以在不同操作系统和云平台上运行,保持一致的行为。这种跨平台性使得开发、测试和部署都更加便捷。
  5. 快速启动和部署: Docker 容器的轻量级特性和快速启动时间使得应用程序可以在几秒钟内部署和启动,加快了开发和测试周期。
  6. 版本控制: Docker 的镜像可以通过版本控制进行管理,开发者可以轻松地回滚到之前的版本,保证应用程序的可靠性。
  7. 微服务架构支持: Docker 容器非常适合支持微服务架构,每个容器可以运行一个小而独立的服务,便于扩展和维护。
  8. 安全性: Docker 提供了一些安全机制,使容器之间隔离运行,从而减少潜在的安全风险。

总之,Docker 是一种现代化的应用程序交付和运维方法,使开发者能够更高效地构建、部署和管理应用程序。它在开发、测试、生产等环境中都有广泛的应用,成为现代应用开发的重要工具之一。

一、安装 Docker

首先需要在服务器安装 docker。

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

这边列出了:Docker 使用文档

我在部署的过程中遇到的问题贴图

sudo groupadd docker #添加docker用户组

sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中

newgrp docker #更新用户组

docker images #测试docker命令是否可以使用sudo正常使用

安装好 docker 后,使用 Docker 命令部署

docker run \
  -it -d \
  --name halo \
  -p 8090:8090 \ 
  -v ~/.halo2:/root/.halo2 \
  halohub/halo:2.8 \
  --halo.external-url=http://localhost:8090/ \
  --halo.security.initializer.superadminusername=wangyubao \
  --halo.security.initializer.superadminpassword=mysql

halo 配置文件

      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=https://gavinking.top:443/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=wangyubao
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=wangyubaodehalo

  halodb:
    image: mysql:8.0.31
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:
-- INSERT --                                                                                                                                            30,50         Bot

二、Docker命令及用法

Docker 日常命令大全(完整详细版)

Docker 常用命令命令说明具体用法
docker run创建一个新的容器并运行一个命令具体用法
docker start启动一个或多个已经被停止的容器docker start 容器名称 / 容器ID
docker stop停止一个运行中的容器docker stop 容器名称 / 容器ID
docker restart重启容器docker restart 容器名称 / 容器ID
docker kill杀掉一个运行中的容器docker kill -s KILL 容器名称 / 容器ID
docker rm删除一个或多个容器docker rm -f 容器名称 / 容器ID
docker pause暂停容器中所有的进程docker pause 容器名称 / 容器ID
docker unpause恢复容器中所有的进程docker unpause 容器名称 / 容器ID
docker create创建一个新的容器但不启动它具体用法
docker exec在运行的容器中执行命令具体用法
docker ps列出容器具体用法
docker logs获取容器的日志具体用法
docker login登陆Docker镜像仓库,默认为官方仓库 Docker Hub具体用法
docker logout登出Docker镜像仓库,默认为官方仓库 Docker Hubdocker logout
docker pull从镜像仓库中拉取或者更新指定镜像docker pull xxx 下载 xxx
docker search从Docker Hub查找镜像docker search 容器名称
docker images列出本地镜像检查当前所有Docker下载的镜像
docker build命令用于使用 Dockerfile创建镜像 具体用法
docker info显示 Docker 系统信息,包括镜像和容器数docker info
docker version显示 Docker 版本信息docker version
问题解决
文件或者目录不能删除rm: cannot remove 'xxx': Is a directory
可以采用强制删除的办法rm -rf xxx #递归删除文件名或目录
使用管理员权限删除sudo rm -d #-d删除文件夹
重启systemctl restart docker

查看当前占用端口

netstat -tanlp

杀死进程

kill 占用端口进程的PID

docker rmi xxxx 删除本地镜像

生成容器

docker run --name nginx -p 8090:80 -d nginx

将容器nginx.conf文件复制到宿主机

docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf

将容器conf.d文件夹下内容复制到宿主机

docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d

将容器中的html文件夹复制到宿主机

docker cp nginx:/usr/share/nginx/html /home/nginx/

三、docker安装mysql之后如何配置

Docker 容器是一种轻量级的虚拟化技术,它在操作系统层面将应用程序及其依赖项包装在完整的文件系统中,以便于移植和部署。MySQL 是一个流行的开源数据库,使用 Docker 部署 MySQL 可以简化数据库环境的安装和管理。然而,Docker 容器与传统的虚拟机不同,安装和配置过程可能需要一些额外的步骤。在本文中,我们将介绍如何在 Docker 容器中安装和配置 MySQL。

1、安装 MySQL 镜像

  1. 打开终端(Terminal)或控制台(Console),确保 Docker 已经正确地安装在系统中。
  2. 运行以下命令以从 Docker Hub 中下载 MySQL 镜像:

docker pull mysql

这将从 Docker Hub 中下载最新版本的 MySQL 镜像。可以通过 docker images 命令查看已安装的镜像列表。

二、创建 MySQL 容器

  1. 运行以下命令创建一个 MySQL 容器:

docker run --name=mysql-container-name -e MYSQL_ROOT_PASSWORD=mysql -d mysql:latest

其中,mysql-container-name 可以是容器的名称,your_password 是 MySQL 的 root 用户的密码。该命令将创建一个 MySQL 容器,并将其设置为在后台运行。

  1. 检查容器是否已经成功创建:

docker ps

该命令将列出所有正在运行的容器。确保刚刚创建的 MySQL 容器正常运行。

三、配置 MySQL 容器

  1. 进入 MySQL 容器:

docker exec -it mysql-container-name bash

其中,mysql-container-name 是容器的名称。

  1. 连接到 MySQL 服务器:

mysql -u root -p

输入刚刚设置的 root 密码。

  1. 创建新用户并授予权限:

CREATE USER 'wangyubao'@'%'IDENTIFIED BY 'mysql';GRANT ALL PRIVILEGES ON . TO 'wangyubao'@'%'WITH GRANT OPTION;FLUSH PRIVILEGES;

其中,_username 是要创建的新用户的名称,_password 是该用户的密码。

  1. 修改 MySQL 配置文件:
vim /etc/mysql/my.cnforvim /etc/my.cnf

在 MySQL 配置文件的 [mysqld] 标签下添加以下内容:

[mysqld]character-set-server=utf8mb4collation-server=utf8mb4_unicode_ci

这将设置 MySQL 的字符集和排序规则。

  1. 重启 MySQL:

service mysql restart

现在,MySQL 容器已经安装并正确配置,可以通过相应的客户端工具连接到 MySQL 服务器。

四、docker 安装 nginx 之后如何配置

无法使用 vi/vim 怎么办?

先更新:apt-get update

再安装:apt-get install vim

安装工具源

sudo yum -y install epel-release

docker-compose依赖python,安装 python-pip 模块

sudo yum install python-pip

下载docker-compose 安装包

wget github.com/docker/comp…

重命名工具 docker-compose 名称,并移动到系统可执行目录

mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

修改文件的可执行属性

chmod +x /usr/local/bin/docker-compose

验证:docker-compose -version