前面已经讲解过docker的一些基础使用,镜像建立的操做过程,若是大量容器须要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上咱们须要找到更好更便捷的使用方式,今天要讲解的容器编排工具docker-compose就是其中之一python
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可使用YAML文件来配置应用程序的服务。而后,使用单个命令,您能够从配置中建立并启动全部服务。mysql
docker-compose做为容器编排工具,专门用于处理多容器部署问题,固然,目前对于系统运维有更好的处理方式,好比k8s,因为笔者并非系统运维人员,因此不会涉及这么深刻,本文也只是浅显的介绍下docker-compose,记录下本身的使用过程nginx
compose使用项目名称将环境彼此隔离。每次咱们使用docker-compose建立多个容器时,其会自动帮咱们将彼此环境进行隔离,很是有用sql
这里可使用-p
参数来设置这次compose启动的项目名,能够自行安装测试下docker
compose会缓存用于建立容器的配置。当从新启动未更改的服务时,compose将从新使用现有容器。重用容器意味着您能够很是快速地更改环境。好比当咱们使用compose启动一组容器时,若是咱们更新了其中一个容器所使用的镜像,当咱们执行更新容器命令时,docker-compose不会更新全部容器,只会更新那个改变了镜像的容器shell
compose支持在compose文件中定义变量。您可使用这些变量为不一样环境或不一样用户自定义组合,参考官方文档:数据库
https://docs.docker.com/compose/extends/vim
首先须要安装docker环境,而后再安装docker-compose,笔者是在centos7环境下安装的centos
1.安装依赖环境缓存
sudo yum install epel-release sudo yum install -y python-pip
2.安装docker-compose
sudo pip install docker-compose
以我本身的网站为例,目前我的网站部署在阿里云服务器上,以使用docker-compose进行部署,目前环境以下:
关于博客系统的部分,本人已部署过ghost,wordpress,太复杂感受不适合我,目前选择了轻量级博客solo,后期有更适合的可能会进行替换
虽然只有一台云服务器,本人仍是部署了集群服务,虽然没什么用,只是想多实践下,nginx单节点,solo双节点,mysql单节点,目前我的博客环境就是这样
建立docker-compose.yml文件,vim操做修改以下,其中有些地方解释下:
在配置文件中,将须要保存的文件映射到宿主机上,即你本身的服务器真实目录或文件上,方便下次进行迁移或者容器出现没法恢复的问题时从新部署,其中须要注意的是,若是没有进行网络相关配置,且没有将端口与主机进行映射,则其会自行建立网络,使得这组容器能够相互访问,可是外界不能访问,宿主机也不行。这里将nginx容器进行了端口映射,这组容器只能经过这两个端口进行访问
nginx的配置文件中,若是配置了upstream,这里对应的server写solo_1:8080便可,对应配置文件,你能够把这里理解成这组容器中这个域名对应solo_1容器服务,至于nginx的配置文件部分,就不贴出来了,没有太多复杂的部分,自行找资料进行配置
version: '2' services: solo_db: image: mysql:latest container_name: solo_db volumes: - /var/solomysql/data:/var/lib/mysql # 将数据库文件映射到本地服务器便于迁移 restart: always expose: - 3306 environment: MYSQL_ROOT_PASSWORD: 1234 MYSQL_USER: root MYSQL_PASSWORD: so MYSQL_DATABASE: so solo_1: depends_on: - solo_db image: b3log/solo:v3.6.3 container_name: solo_1 volumes: # 日志配置文件和皮肤映射便于我配置修改,添加皮肤 - /root/solodata/log4j.properties:/opt/solo/WEB-INF/classes/log4j.properties - /root/solodata/skins/:/opt/solo/skins/ links: - solo_db expose: - 8080 restart: always environment: RUNTIME_DB: MYSQL JDBC_USERNAME: so JDBC_PASSWORD: so JDBC_DRIVER: com.mysql.jdbc.Driver JDBC_URL: jdbc:mysql://solo_db:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.gclearning.cn solo_2: depends_on: - solo_db image: b3log/solo:v3.6.3 container_name: solo_2 volumes: - /root/solodata/log4j.properties:/opt/solo/WEB-INF/classes/log4j.properties - /root/solodata/skins/:/opt/solo/skins/ links: - solo_db expose: - 8080 restart: always environment: RUNTIME_DB: MYSQL JDBC_USERNAME: so JDBC_PASSWORD: so JDBC_DRIVER: com.mysql.jdbc.Driver JDBC_URL: jdbc:mysql://solo_db:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.gclearning.cn solonginx: image: docker.io/nginx:1.0 # 我本身将官方nginx镜像时区修改了下从新打包的镜像,用官方镜像也可,日志部分时间相差8个时区 container_name: solonginx links: - solo_1 - solo_2 ports: - 80:80 - 443:443 volumes: # nginx配置文件,静态资源,证书等目录映射到宿主机上,可根据须要自行配置 - /root/solonginx/nginxconfig/nginx.conf:/etc/nginx/nginx.conf - /root/solonginx/nginxconfig/conf.d:/etc/nginx/conf.d - /root/solonginx/log/:/var/log/nginx/ - /root/solonginx/nginxconfig/cert/:/etc/nginx/cert/ - /root/solonginx/nginxconfig/www/:/var/www/
在你所建立的docker-compose目录下,执行以下命令,便可启动一组容器
docker-compose up -d
docker-compose ps
查看容器状态,处于up状态,则表示容器建立成功,以下:
若是咱们修改了nginx配置,只须要对其中的nginx容器进行重启便可,执行以下命令:
docker-compose restart solonginx
docker-compose为咱们同时操做一组容器提供了便捷的方式,多个服务之间须要进行编排,端口,网络,硬件配置等在咱们定义好了以后能够方便咱们进行部署,迁移,若是以后出现了没法恢复的问题,咱们能够将落地的数据进行迁移,瞬间启动一组环境来对外提供服务,极大的解放了运维人员的生产力,也不用再为安装一堆依赖环境而头疼,也不用再记录各个服务之间的关系,配置等而忧虑
在学习与使用docker的过程当中,愈来愈感受到这种技术对运维的重要性(虽然我不是运维),开发人员固然也须要去了解其使用,会让你看到一个更开阔的技术领域
以上内容若有问题欢迎指出,笔者验证后将及时修正,谢谢