多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 11. 部署 owncloud 与 phpMyAdmin #### 1. 介绍 上一篇:[docker部署深入理解(十)](https://www.rails365.net/articles/docker-bu-shu-shen-ru-li-jie-shi) - [owncloud主页](https://github.com/owncloud/core) - [owncloud客户端](https://owncloud.org/install/#install-clients) - [owncoud docker文档](https://github.com/docker-library/docs/tree/master/owncloud) - [phpMyAdmin docker镜像](https://github.com/phpmyadmin/docker) - [docker-compose.yml 2写法](https://docs.docker.com/compose/compose-file/compose-file-v2/) [owncloud](https://github.com/owncloud/core)是一款放文件和图片等数据的应用,它有点类似于网盘这样的东西,以后再也不用担心哪个网盘被封杀了,自己搭建一个,上传和下载速度又快,资料也安全,我最喜欢的是它有两个特点,第一个是有插件,比如说,我安装了一个可以写笔记的插件,还有另外一个,就是它有很多平台的客户端,在mac或windows,甚至智能手机下我可以安装一个软件,然后能够通过操作文件资源管理器那样随意同步文件。 下面是一些截图: 放文件的主页面: ![](https://box.kancloud.cn/24285988f1ddc5bd613438d2648fd7b7_750x333.png) 放笔记的主页面: ![](https://box.kancloud.cn/e8fe881690976eb394ed2f353c6ff1de_750x284.png) mac下的客户端 ![](https://box.kancloud.cn/d5fa18628542c1f79627e3f07c019e87_750x243.png) 这节主要还是介绍owncloud的部署,之所以会介绍phpMyAdmin的部署,是为了去研究docker的其他知识点,也能轻易地用phpMyAdmin去连接已经存在的数据库,不管是不是docker部署的。 #### 2. 部署owncloud 最简单的部署可能是这样的: ``` $ docker run -d -p 28080:80 owncloud ``` 然后访问这个应用,界面如下: ![](https://box.kancloud.cn/174f7378f4d94ce20b9c04b4c10c00e7_750x566.png) 不过这样并没有多大的用处,因为这样只能使用sqlite作为数据库,其实它可以使用mysql或postgresql作为数据库的。 我们把上一篇的知识点结合起来,最终用docker-compose来部署,写了一个部署文件: ``` version: '2' services: owncloud: restart: always image: owncloud ports: - 18080:80 volumes: - /home/hfpp2012/owncloud/html:/var/www/html:Z depends_on: - db dns: - 10.202.72.118 - 10.202.72.116 - 8.8.8.8 db: restart: always image: mariadb environment: - MYSQL_ROOT_PASSWORD=my-secret-pw - MYSQL_DATABASE=owncloud_pro volumes: - /home/hfpp2012/owncloud/datadir:/var/lib/mysql ``` `volumes`是挂载数据卷,这个上篇文章也说过,至于dns是为了让owncloud装插件的时候不报超时的错误。 重点来看的是`depends_on`,这个跟上篇文章所提的link是对应的。 整个意思是说这样的:这个`compose`文件包含两个服务,主要是owncloud这个服务,它又依赖于下面的db服务。也就是说这个owncloud服务可以去连接这个db数据库服务。因为这个owncloud服务是需要连接数据库的,必须要有一个数据库服务,要么是外部的,要么是内部,这里用docker开启了db服务,供owncloud来连接。 运行`docker-compose up`把这个服务跑起来。 **注意,测试的时候,建议启动前,把两个镜像卷的内容清一下** ``` $ rm -rf /home/hfpp2012/owncloud/html $ rm -rf /home/hfpp2012/owncloud/datadir ``` 启动起来后,不要再选择默认的sqlite数据库,我们要选择mysql数据库,如下所示,填上必要的信息: ![](https://box.kancloud.cn/99a55c7ede9e0406183333c54db4aa81_750x1109.png) 至于最上面的管理员账号,你自己指定账号名和密码就可以了。 下面的连接数据库的配置要参照`docker-compose.yml`文件中的db部分,用户名是`root`,密码是`my-secret-pw`,数据库是`owncloud_pro`,最重要的是**数据库主机**这部分,这部分应该填写ip地址或域名的,不过这里只要填写`db`就可以了,它是一个别名,因为配置中`owncloud`中有一个项是`depends_on`,它代表能够连接到db那个容器上。 这样点击`创建完成`就能连接好数据库,整个应用也能跑起来,如下图所示: ![](https://box.kancloud.cn/100ba923705d190fb122b4162e5dd418_750x324.png) #### 3. 换别的数据库postgresql owncloud能正常跑起来,也能正常使用了,不过这里要介绍一下,如果不用mysql数据库呢,我要用postgresql,也是可以的。 把compose配置文件中的`db`那部分换一下,如下: ``` version: '2' services: owncloud: restart: always image: owncloud ports: - 18080:80 volumes: - /home/ubuntu/owncloud/html:/var/www/html:Z depends_on: - postgresql dns: - 8.8.8.8 - 10.0.2.3 postgresql: restart: always image: sameersbn/postgresql:9.5-4 volumes: - /home/ubuntu/owncloud/postgresql:/var/lib/postgresql:Z environment: - DB_USER=gitlab - DB_PASS=password - DB_NAME=gitlabhq_production ``` 注意,此时,在owncloud安装页面中的`数据库主机`就要填成`postgresql`了。如下图所示: ![](https://box.kancloud.cn/2c83316fd044f92cc74ea28964963546_750x1056.png) 按照之前的步骤,最后也是能正常跑起owncloud的。 #### 4. 使用phpmyadmin来连接mysql数据库 首先,我们不来连接我们之前建立的mysql服务,而是先新建一个mysql服务的容器,然后来连接。 ##### 4.1 先跑起来 ``` $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql ``` 然后使用新建一个连接此mysql容器的phpmyadmin的容器: ``` $ docker run --name myadmin -d --link some-mysql:db -p 8080:80 phpmyadmin/phpmyadmin ``` 打开8080端口,界面如下图所示: ![](https://box.kancloud.cn/89e2e2d417ac0250f60a9995f4efa80e_750x716.png) 不用填写主机,因为已经用了连接器(--link)db那个别名,用了这个别名,就会导入一些变量给myadmin这个实例,而这些变量的值,又是由`some-mysql`这个容器传过来的,例如`some-mysql`这个容器的ip地址,端口等。关于这部分的详细内容可以查看上一篇文章。 你可以试下把`db`那个名称改一下,换成别的,你会发现会用不了的,因为`myadmin`这个容器已经找不到对应的`some-mysql`容器的ip地址了。 ##### 4.2 使用--net参数 使用phpmyadmin的重点不是去连接一个自己的新建的mysql服务器,这样没有意义,而是要连接我们目前存在于系统上的,且是用docker-compose部署的。 现在我们就来连接之前使用docker-compose部署owncloud时创建的mysql容器。 按照之前的经验,你可以会先找mysql容器的名称,然后把它link起来。 ``` $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1a069dfd65c owncloud "/entrypoint.sh ap..." 18 seconds ago Up 17 seconds 0.0.0.0:18080->80/tcp owncloud_owncloud_1 8ce43555ef6f mariadb "docker-entrypoint..." 18 seconds ago Up 18 seconds 3306/tcp owncloud_db_1 ``` 可见,容器名称为`owncloud_db_1`。 于是我们把phpmyadmin容器启动起来。 ``` $ b3f23a98d638cd2d3a416f4692a77f56541cff44bc9c54527e9df858c348eb26 docker: Error response from daemon: Cannot link to /owncloud_db_1, as it does not belong to the default network. ``` 出错了,意思是说不能连接到owncloud\_db\_1,网络不对。 确实是,之前运行owncloud容器的时候,如果你有留意到的话,它会先创建一个网络: ``` Creating network "owncloud_default" with the default driver Creating owncloud_db_1 Creating owncloud_owncloud_1 Attaching to owncloud_db_1, owncloud_owncloud_1 ... ``` 我们使用`docker network ls`命令查看一下网络的情况。 ``` $ docker network ls NETWORK ID NAME DRIVER SCOPE 80b102ef3785 bridge bridge local 925fbce49cb8 host host local 3cc70e86c6eb none null local 29f2f9c181ea owncloud_default bridge local 53afc10ba142 root_default bridge local ``` 有一个适配器是由owncloud创建的,名为`owncloud_default`。我们把它利用起来。 我们在运行phpmyadmin容器的时候,加入一个参数`--net`。 ``` $ docker run --name myadmin -d --link owncloud_db_1:db -p 8080:80 --net owncloud_default phpmyadmin/phpmyadmin ``` 现在就可以运行起来了,记住运行前,要把以前的myadmin容器进程stop和kill掉。 ##### 4.3 使用docker-compose部署 这样用命令来敲,我不太喜欢,因为难记,我喜欢把它写到一个docker-compose.yml文件中,然后一条命令就可以跑起来。 ``` version: '2' services: phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin network_mode: "owncloud_default" environment: - PMA_ARBITRARY=1 restart: always ports: - 8080:80 volumes: - /sessions ``` 在compose配置文件中使用`network_mode`代替`--net`参数。 `PMA_ARBITRARY=1`这个是phpmyadmin使用的变量,意思就是说,可以自己输入ip地址。如下图所示: ![](https://box.kancloud.cn/db11273e0119c3f3f79fe701f2350271_750x775.png) `服务器`那里要输入`db`。 现在可以成功地用docker来运行phpmyadmin了,并且可以连接到自己需要的数据库进行查看。 至于部署到线上环境,可以参考下面这两篇文章,使用nginx反向代理过去。 - [使用compose部署gitlab应用(八)](https://www.rails365.net/articles/shi-yong-compose-bu-shu-gitlab-ying-yong-ba) - [使用compose部署Rocket.Chat应用(九)](https://www.rails365.net/articles/shi-yong-compose-bu-shu-rocket-chat-ying-yong) 完结。 下一篇:[让 php-fpm 跑的 owncloud 应用 docker 化 (十二)](https://www.rails365.net/articles/php-fpm-owncloud-ying-yong-docker-shi-er-hua-shi-er)