Docker那些事儿之编排工具docker-compose

前面已经讲解过docker的一些基础使用,镜像创建的操作过程,如果大量容器需要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上我们需要找到更好更便捷的使用方式,今天要讲解的容器编排工具docker-compose就是其中之一

简介

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。

docker-compose作为容器编排工具,专门用于处理多容器部署问题,当然,目前对于系统运维有更好的处理方式,比如k8s,由于笔者并不是系统运维人员,所以不会涉及这么深入,本文也只是浅显的介绍下docker-compose,记录下自己的使用过程

特征

单个主机上的多个隔离环境

compose使用项目名称将环境彼此隔离。每次我们使用docker-compose创建多个容器时,其会自动帮我们将彼此环境进行隔离,非常有用

  • 在开发主机上,创建单个环境的多个副本,例如当您要为项目的每个功能分支运行稳定副本时
  • 在CI服务器上,为了防止构建相互干扰,可以将项目名称设置为唯一的构建号
  • 在共享主机或开发主机上,以防止可能使用相同服务名称的不同项目相互干扰

这里可以使用-p参数来设置此次compose启动的项目名,可以自行安装测试下

仅重新创建已更改的容器

compose会缓存用于创建容器的配置。当重新启动未更改的服务时,compose将重新使用现有容器。重用容器意味着您可以非常快速地更改环境。比如当我们使用compose启动一组容器时,如果我们更新了其中一个容器所使用的镜像,当我们执行更新容器命令时,docker-compose不会更新所有容器,只会更新那个改变了镜像的容器

共享文件和项目配置

compose支持在compose文件中定义变量。您可以使用这些变量为不同环境或不同用户自定义组合,参考官方文档:

https://docs.docker.com/compose/extends/

使用步骤

  • 定义您的应用程序环境,Dockerfile以便可以在任何地方进行复制
  • 定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行
  • Run docker-compose up和Compose启动并运行整个应用程序

安装

首先需要安装docker环境,然后再安装docker-compose,笔者是在centos7环境下安装的

1.安装依赖环境

sudo yum install epel-release
sudo yum install -y python-pip

2.安装docker-compose

sudo pip install docker-compose

使用示例

以我自己的网站为例,目前个人网站部署在阿里云服务器上,以使用docker-compose进行部署,目前环境如下:

  • nginx前置机
  • solo博客服务
  • 数据库mysql

关于博客系统的部分,本人已部署过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的过程中,越来越感觉到这种技术对运维的重要性(虽然我不是运维),开发人员当然也需要去了解其使用,会让你看到一个更开阔的技术领域

以上内容如有问题欢迎指出,笔者验证后将及时修正,谢谢

原文地址:https://www.cnblogs.com/freeorange/p/11517053.html

时间: 2024-10-07 09:01:46

Docker那些事儿之编排工具docker-compose的相关文章

使用容器编排工具docker swarm安装clickhouse多机集群

1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker  swarm init [options] 3,再需要加入集群的集群上执行此命令 4.可以使用sudo docker node ls此命令来查询节点数 5编写docker-compose.yaml文件,目前我使用的是version 3版本,version2和3有区别,具体看官网介绍 贴一份完整的docker-compose.yaml供大家参考 ver

docker高级管理(docker-compose编排工具,consul架构)

本章知识点概括: Docker Compose容器编排构建自动发现的Docker服务架构实现容器服务自动加入Nginx集群 **Docker Compose容器编排功能** Docker compose的前身是Fig,它是一个定义及运行多个docker容器的工具 使用Docker Compose不再需要使用shell脚本来启动容器 Docker Compose非常适合组合是同多个容器进行开发的场景 可以执行多个容器的操作 **Docker Compose容器编排** YAML是一种标记语言很直观

Docker编排工具之Rancher-Server集群部署

部署环境: 操作系统:CentOS 7 安装iptables,禁用firewall,清空iptables规则并保存 关闭SELinux 升级内核yum -y update Docker版本:17.03.1-ce Docker其它版本下载源 支持的Docker版本 在开始部署Rancher之前需要确定以上环境没有问题 开始部署: 部署MySQL(安装过程省略)推荐使用.5.6.x版本 创建库 CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_

Docker & ASP.NET Core (5):Docker Compose

原文:Docker & ASP.NET Core (5):Docker Compose 第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 Docker Compose简介 Compose是一个用来定义和运行多容器Docker应用的工具.使用Compose的时候,你可以使用一个YAML文件来配置你应用的服务.然后根据配置,使用一个命令即可创建并运行所有的服务. 使用Compose的时候通常分三步: 使用Dockerfile定义你的环境 在docker-

docker容器轻量级web管理工具之portainer

portainer部署&监控工具 官方地址:https://github.com/portainer/portainer 部署方法:https://portainer.readthedocs.io/en/latest/deployment.html 方法1.基于本地容器的部署[推荐] 以192.168.2.29这台主机为例. 首先需要开启docker的2375端口 vi /etc/sysconfig/docker  添加上 centos6下使用 other_args='-Htcp://0.0.0

docker学习(三) 安装docker的web可视化管理工具

1.docker是一个一款很轻便的应用容器引擎,为了更好的管理和使用docker,使用web可视化管理工具似乎更符合大多数人的需求.在这里,我给大家分享下自己使用过的几款web工具:docker UI.shipyard.portainer 因为怕自己学术不精误导了初学者,因此我就不使用术语专业名词之类的,就通篇全是通俗的语言,哪怕是一个电脑小白,也会按照这个说明,完成好相应的操作跟安装.之前网上也有很多发帖者,自己都没弄明白集群的真正含义,swarm mode 跟swarm 等概念的区别,胡乱的

【原创】大叔经验分享(71)docker容器中使用jvm工具

java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只有jdk版本才有jvm工具,所以可以直接使用jdk版本的openjdk: 比如常用的tomcat镜像则没有jdk和jre选择,默认使用都是jre,所以没有jvm工具,tomcat镜像中的jdk目录如下: # ls /usr/lib/jvm/java-1.8-openjdk bin jre lib #

Dcoker单机编排工具

docker编排工具: yum install -y docker-compose 使用方式: 创建一个工作目录,在工作目录中创建一个docker-compose.yml文件! docker-compose相关参数: build 构建或重新构建服务. 服务一旦构建后,将会带上一个标记名,例如 web_db. 可以随时在项目目录下运行 docker-compose build 来重新构建服务. help 获得一个命令的帮助. kill 通过发送 SIGKILL 信号来强制停止服务容器.支持通过参数

11:docker-compose(单机版的容器编排工具)

docker-compose(单机版的容器编排工具) 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知使用 Docker Compose 可以轻松.高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具 #详细用法和解释http://www.ji