在docker上运行publiccms指南

本文将详细探讨如何在docker上运行publiccms,操作系统为Ubuntu。该文章也试用于其他发行版的linux和window以及mac,只需做一些变通

首先是安装docker,如何安装请看安装docker指南 -

推荐的publiccms镜像安装命令是

sudo docker run --name publiccms -d --restart on-failure \

-p 8080:8080 \

-v /data/publiccms:/data/publiccms \

-e CONTEXTPATH= \

-e FILEPATH=/data/publiccms \

sanluan/publiccms

用这个就能运行publiccms最基本的镜像,不过不要急着安装,还要为publiccms准备个数据库。还有更优雅的方式将它们同时完成。

简单说明一下上面的命令,--name是指定运行中的镜像名称,方便镜像管理

-d 是声明这个镜像的的主命令在后台执行,如果没有这个参数,这个控制台就会被镜像的执行命令占用,如果按Ctrl+C中断,就会停止运行,这样的话当然也不会有自动启动的说法了。使用-d后,程序日志通过

sudo docker logs -f -t --tail 行数 运行中的镜像名

这个命令查看

--restart=on-fail说明非正常关闭都会重新启动,可以将值改成always

-p 后面指定端口映射,左边是需要定义的

-v 后面指定数据卷对应到宿主机的目录,意思是宿主机的/data/publiccms和publiccms镜像里面的/data/publiccms是共享的。publiccms镜像只靠这个保存状态,将程序发布时,原来的数据文件要拷贝到这个指定的文件夹

-e是声明环境变量,CONTEXTPATH是项目web路径,留空为根目录,如果想让其在/publiccms目录下,这个值就改为/publiccms

FILEPATH声明的是镜像里面数据卷的位置,个人觉得这个值让指定没有必要

sanluan/publicms是publicms镜像名,如果要指定版本就在后面加:+version


sanluan/publiccms镜像是不在内部提供数据库。这是因为hibernate支持多种数据库,所有publiccms不在内部提供数据库是为了让用户更好的自定义。

所以在docker上安装publiccms需要也准备一个数据库,可以通过以下方式提供:

1.宿主机安装,或其他主机,以及云服务提供

2.安装一个数据库镜像

4.使用docker-compose快速安装

除了第种方式,其他的都要按文章开始的命令安装publiccms镜像

第一种方式就不在这里就不进行介绍了

第二种方式是比较常用的方式,像上面安装publiccms镜像一样安装数据库,安装命令如下:

sudo docker run --name mariadb -d --restart on-failure \

-p 3306:3306 \

-v /data/mysql:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=password \

-e MYSQL_DATABASE=publiccms \

-e MYSQL_USER=yanggan \

-e MYSQL_PASSWORD=password \

mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

这里安装的mariadb,可以当成mysql用,配置和安装方法几乎和mysql一模一样,驱动也能够直接使用mysql的。

也可以把上面的mariadb换成mysql。但是要注意的是publiccms截至与文章写的时间,publiccms程序内置的驱动是不支持mysql 8.0以上的,请用低级版本,例如mysql:5.7.23

上面和publicccms镜像一样指定了数据卷,需要注意的是,重装镜像记得把数据卷清空

MYSQL_ROOT_PASSWORD环境变量是声明root账户的密码,可以远程登陆

MYSQL_DATABASE环境变量可以快速创建一个数据库,并且将所有权限和远程登陆赋予通过MYSQL_USER环境变量创建的用户,要注意的是这个root并没有这个数据库的所有权限,在publicccms中请使用MYSQL_USER创建的数据库

MYSQL_USER环境变量能让数据库在安装后创建一个用户,能够远程登陆

MYSQL_PASSWORD环境变量指定的是通过MYSQL_USER环境变量创建的账户的密码

通过免配置文件配置的方式设置了数据库的默认编码

通过上面命令创建好数据库后,就能进行publiccms安装了,数据库地址要填宿主机ip加端口。账户要填MYSQL_USER创建的账户

有种更优雅的方式是先安装数据库镜像,再安装publiccms镜像,再publiccms镜像安装命令里加--link 数据库镜像名称:db ,这样就能在publiccms安装的时候使用db来代替宿主机的ip

基本上,到这里,就能够完整正常的在docker里运行publiccms了的,不过作者还准备了终极绝招,通过编写配置实现一条命令安装publiccms和数据库,以及nginx和redis。不过实现方式更加复杂,使用的是docker-compose工具进行安装


docker-compose是定义和运行多容器Docker应用程序的工具。使用撰写,您可以使用YAML文件来配置应用程序的服务。然后,通过单个命令,您可以从配置中创建并启动所有服务。

Overview of Docker Compose | Docker Documentation

如果要使用docker-compose安装的话,首先需要安装docker-compose命令,使用如下命令安装docker-compose:

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

如果执行了上面命令后仍然没有这个命令,是因为不同操作系统的差异问题。可能是根本没有curl命令,或者是文件下载了环境变量没有包括/usr/local/bin目录。不同操作系统该命令的安装方法请看官方文档Install Docker Compose | Docker Documentation

然后在宿主机创建一个文件夹,任何有关要安装的多个镜像的操作,都要在这个文件夹执行

在这个文件夹创建一个docker-compose.yml文件,如果需要实现上面,安装publicccms镜像加数据库镜像的效果,这个文件要这么写

version: '3'

services:

  publiccms:

    image: sanluan/publiccms

    depends_on:

      - "db"

    ports:

      - "8080:8080"

    restart: on-failure

    volumes:

      - /data/publiccms:/data/publiccms

    environment:

      - CONTEXTPATH=

      - FILEPATH=/data/publiccms

  db:

    image: mariadb

    ports:

      - "3306:3306"

    restart: on-failure

    volumes:

      - /data/mysql:/var/lib/mysql

    environment:

      - MYSQL_ROOT_PASSWORD=password

      - MYSQL_DATABASE=publiccms

      - MYSQL_USER=yanggan

      - MYSQL_PASSWORD=password

     command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

的行距有点大,木有办法

然后可以使用

sudo docker-compose up --build -d

来执行。效果和上面的几乎一样,也会自动启动。

需要注意的是,如果需要管理镜像,就不能使用docker命令了。需要进入上面创建的文件夹,使用docker-compose管理,操作方式和docker命令一样,不过有个要注意的是不要被docker-compose ps里面的name给骗了,name就使用services节点下指定的名字

--build参数是声明如果配置文件更改,重新构建,使配置文件生效。重复啰嗦一下,配置文件如果改来改去的话,记得清空数据卷

然后就可以进行publiccms安装了,可以使用db,也就是运行中的数据库镜像的名字来代替宿主机的ip地址

如果想要一键配置nginx和redis的话,请按上面的配置文件个格式填好镜像信息就行了。具体配置参数请参考docker hub上面的镜像说明

配置nginx需要准备一个nginx配置文件,通过数据卷的方式提供给nginx镜像,具体方法nginx镜像文档上面有说明。配置文件的话可以在运行中的publicms上查看配置模板,将来作者应该会把模板放到安装文件里面

以后publiccms作者应该会提供这个配置文件

上文充分体现出docker快速部署的能力~~~逃


如果要部署自定义的war文件,请使用程序源代码的Dockerfile构建部署。使用docker和docker-compose都能实现部署自定义的war文件。你可以把sanluan/publiccms这个镜像下载下来参考下里面有点什么东西。如果使用docker-compose的话,把镜像制作需要的文件放到存放docker-compose配置文件的文件夹下,然后把imgage: sanluan/publiccms替换成build .就行了


文章一次包含了很多内容

后面可能要把一些内容分出来

如果有什么问题或错误,请在评论区留言


个人原创,未经作者允许,禁止转载

你可能感兴趣的:(在docker上运行publiccms指南)