世界上最伟大的投资就是投资自己的教育

首页Docker
随风 · 练气

Docker 入门学习系列文章教程 - 部署 owncloud 与 phpMyAdmin (十一)

随风发布于4336 次阅读

1. 介绍

上一篇:docker 部署深入理解 (十)

owncloud是一款放文件和图片等数据的应用,它有点类似于网盘这样的东西,以后再也不用担心哪个网盘被封杀了,自己搭建一个,上传和下载速度又快,资料也安全,我最喜欢的是它有两个特点,第一个是有插件,比如说,我安装了一个可以写笔记的插件,还有另外一个,就是它有很多平台的客户端,在 mac 或 windows,甚至智能手机下我可以安装一个软件,然后能够通过操作文件资源管理器那样随意同步文件。

下面是一些截图:

放文件的主页面:

放笔记的主页面:

mac 下的客户端

这节主要还是介绍 owncloud 的部署,之所以会介绍 phpMyAdmin 的部署,是为了去研究 docker 的其他知识点,也能轻易地用 phpMyAdmin 去连接已经存在的数据库,不管是不是 docker 部署的。

2. 部署 owncloud

最简单的部署可能是这样的:

$ docker run -d -p 28080:80 owncloud

然后访问这个应用,界面如下:

不过这样并没有多大的用处,因为这样只能使用 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 数据库,如下所示,填上必要的信息:

至于最上面的管理员账号,你自己指定账号名和密码就可以了。

下面的连接数据库的配置要参照docker-compose.yml文件中的 db 部分,用户名是root,密码是my-secret-pw,数据库是owncloud_pro,最重要的是数据库主机这部分,这部分应该填写 ip 地址或域名的,不过这里只要填写db就可以了,它是一个别名,因为配置中owncloud中有一个项是depends_on,它代表能够连接到 db 那个容器上。

这样点击创建完成就能连接好数据库,整个应用也能跑起来,如下图所示:

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了。如下图所示:

按照之前的步骤,最后也是能正常跑起 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 端口,界面如下图所示:

不用填写主机,因为已经用了连接器 (--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 地址。如下图所示:

服务器那里要输入db

现在可以成功地用 docker 来运行 phpmyadmin 了,并且可以连接到自己需要的数据库进行查看。

至于部署到线上环境,可以参考下面这两篇文章,使用 nginx 反向代理过去。

完结。

下一篇:让 php-fpm 跑的 owncloud 应用 docker 化 (十二)

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
相关小书
docker 入门指南

docker 入门指南

零基础学习docker,从应用入手带你深入理解docker

发表于

喜欢
统计信息
    学员: 29921
    视频数量: 1996
    文章数量: 526

© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top