使用现有的docker进行部署存在问题

我们之前在Docker容器中安装了nginx、mysql、es、redis等等一些容器,然后每次我需要先启动redis、mysql、es、nginx之后才能启动我们的项目,因为容器之间可能存在某种依赖,需要按一定的顺序启动,比如Kibana容器依赖于es容器,es容器需要先启动。当容器启动完毕我们才能运行起来项目。如果容器数量特别多的话启动更加麻烦。

假如需要将这些服务部署到另一个服务器,但是不知道到底用到了Docker里面具体的哪一些容器,没有办法只能把容器全部复制过去,没法对一个项目的容器进行管理。

Docker-Compose简介

Compose项目是Docker官方的开源项目。负责实现对Docker容器集群的快速编排,对多个容器进行编排,将一组相关联的容器放在一起,可以理解为它将你项目用到的所有容器按照你指定的启动顺序设置成一个文件,然后一次就可以启动。

与Dockerfile不同的是,Dockerfile模版文件是让用户定义一个单独运行的容器,而Compose是多个容器相互配合完成某一个任务的情况。比如要实现一个Web项目,里面除了Web容器本身之外还有数据库、负载均衡容器等等。

定义方式

允许用户通过一个单独的docker-compose.yml模版文件来定义一组相关联的应用容器为一个项目。

里面有两个重要概念:

  • 项目:一组相关联的应用容器组成的一个完整的业务单元。可以理解为你项目中的多个容器组成了一个项目
  • 服务:一个应用容器里面可以包含若干运行相同镜像的容器实例。可以理解项目中的每一个容器都称之为服务,多个容器就是多个服务,只是这里面的叫法名称变了而已。

只要操作平台支持Docker就可以用Compose来进行编排管理。

安装卸载

1、登入官方地址下载指定版本,官方地址为:https://github.com/docker/compose/releases

compose docker 启动swarm节点 docker-compose 启动顺序_docker

下载完之后上传到服务器的/usr/local/bin目录下

给它一个执行权限

sudo chmod +x /usr/local/bin/docker-compose

compose docker 启动swarm节点 docker-compose 启动顺序_mysql_02

2、直接从服务器下载

curl -L https://github.com/docker/compose/releases/download/2.2.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

后续步骤同上

docker-compose -v  #查看是否安装成功

compose docker 启动swarm节点 docker-compose 启动顺序_mysql_03

案例

1、创建一个目录

mkdir ems

2、在ems目录创建一个docker-compose.yml 模版文件

3、编写docker-compose.yml

#docker-compose项目版本号
version: "3.8"

services:
  centos01:                #自定义的服务的名称 
     image: tomcat:latest   #代表使用哪一个镜像 latest表示版本号
     ports:       #代表主机和容器中的端口映射  
     - 8082:8080

version:docker-compose和docker版本对应,先查看docker版本

compose docker 启动swarm节点 docker-compose 启动顺序_redis_04

docker版本20.10.+,所以对应docker-compose的3.8版本

compose docker 启动swarm节点 docker-compose 启动顺序_redis_05

4、启动docker-compose一组服务

docker-compose up

compose docker 启动swarm节点 docker-compose 启动顺序_redis_06

表示启动成功

5、还可以在里面继续增加容器redis,指定

#docker-compose项目版本号
version: "3.8"

services:
  centos01:                #自定义的服务的名称
     image: tomcat:latest   #代表使用哪一个镜像
     ports:       #代表主机和容器中的端口映射  
     - 8082:8080
  redis01:
    image: redis:latest  #指定了redis的镜像 
    ports:
    - 6379:6379

compose docker 启动swarm节点 docker-compose 启动顺序_docker_07

两个都启动成功

更多配置

environment:代表给当前容器启动指定环境,类似于docker run -e MYSQL_ROOT_PASSWORD=root

Volumes:代表给当前容器和主机指定数据卷,类似于 docker run -v 注意 这里数据卷的路径必须先创建

#docker-compose项目版本号
version: "3.8"

services:
  centos01:                #自定义的服务的名称
     image: tomcat:latest   #代表使用哪一个镜像
     ports:       #代表主机和容器中的端口映射  
     - 8082:8080
  redis01:
    image: redis:latest
    ports:
    - 6379:6379
  mysql01:
    image: mysql:latest
    ports:
   - 3306:3306
   environment:  
   - "MYSQL_ROOT_PASSWORD=root"
   volumes:
    - /root/mysqldata:/var/lib/mysql

启动之后服务运行状态

compose docker 启动swarm节点 docker-compose 启动顺序_docker_08

这里的Names是自动取的别名,可以在里面增加container_name给容器指定别名

以及mysql挂载的数据卷都有显示

compose docker 启动swarm节点 docker-compose 启动顺序_mysql_09