在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 .就行了


文章一次包含了很多内容

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

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266