前言

最近刚接触到Docker,大家对它的评价非常高,我也非常喜欢。Docker是一种虚拟化的轻量级的容器,开销很小,分发、部署和运行都非常方便。

Docker

例如,以前要搭建一个Wordpress,需要:配置机器环境–>配置Web服务器–>下载Wordpress–>解压安装,其中任何一个步骤出错,都要慢慢查找原因。

对于Docker,由于有官方的Wordpress镜像,现在只需要一句话就可以搭建整个Wordpress:

$ sudo docker run -p 80:80 wordpress

而且运行环境和主机隔离,再也不用担心服务器被各种应用搞得非常乱了。所以本次我重装了服务器,将Wordpress和Owncloud用Docker直接装好,再加一层Nginx反向代理,整站直接上Https,整体架构为:

Architecture

安装Docker与Docker-Compose

Ubuntu可以直接通过脚本安装Docker:

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
然后安装Docker-Compose,直接下载编译好的二进制文件即可:

$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

其它具体安装方法可以查看Docker — 从入门到实践或者官方文档,需要注意的是,国内的服务器最好替换成国内的镜像源,不然速度会比较慢。

安装nginx-proxy

nginx-proxy是DockerHub上面的热门的个人镜像,它配置简单(坑也比较多)可以自动为其它Docker镜像代理功能,并且搭配letsencrypt-nginx-proxy-companion可以直接代理成Https,浏览器地址栏前面就有小绿锁了! 安装步骤:

先创建Docker容器间通信的网络:

$ docker network create nginx-proxy

然后进行安装:

$ mkdir reverse_proxy
$ cd reverse_proxy
$ vim docker-compose.yml

填写如下内容:

version: '2'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./nginx/vhost.d:/etc/nginx/vhost.d"
      - "./nginx/html:/usr/share/nginx/html"
      - "./nginx/certs:/etc/nginx/certs"
      - "./nginx/conf:/etc/nginx/conf.d"
      - "/var/run/docker.sock:/tmp/docker.sock:ro"

  letsencrypt-nginx-proxy-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: always
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    volumes_from:
      - "nginx-proxy"
networks:
  default:
    external:
      name: nginx-proxy

保存后,执行:docker-compose up -d就可以运行代理服务器,此时用浏览器打开  http://your_host  看到返回的503代码就说明已经成功运行。

nginx的配置可以在映射的目录./nginx/conf中修改,如使用sudo echo "client_max_body_size 64m;">my_proxy.conf即可讲文件上传大小限制改为64M,重启服务后生效。

安装wordpress

wordpress的安装也非常简单,和上面的步骤基本一致,需要注意的是数据volumes的映射和expose端口的设置:

$ mkdir wordpress
$ cd wordpress
$ touch ./php/upload.ini
# 可以在upload.ini中配置php对上传文件大小的限制参数
$ vim docker-compose.yml

然后填写如下内容:

version: '3'
services:

   db:
     image: mysql:latest
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     expose:
       - 80
       - 443
     volumes:
       - ./wp_html:/var/www/html
       - ./php/upload.ini:/usr/local/etc/php/conf.d/upload.ini
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       VIRTUAL_HOST: your_wordpress_host
       LETSENCRYPT_HOST: your_wordpress_host
       LETSENCRYPT_EMAIL: your_email@example.com
volumes:
    db_data:

networks:
  default:
    external:
      name: nginx-proxy

保存后,执行:docker-compose up -d就可以运wordpress服务,此时用浏览器打开https://your_wordpress_host就可以看到设置页面了。

安装owncloud

步骤完全一致,yml内容为:

version: '3.0'
services:
  owncloud:
    image: owncloud:latest
    restart: always
    expose:
      - 80
      - 443
    volumes:
      - ./oc_data:/var/www/html
    environment:
       OWNCLOUD_DOMAIN: your_host
       VIRTUAL_HOST: your_host
       LETSENCRYPT_HOST: your_host
       LETSENCRYPT_EMAIL: your_email@example.com

networks:
  default:
    external:
      name: nginx-proxy

后续

若还想添加其它应用,也是相同的步骤,注意声明network就可以了。