0
点赞
收藏
分享

微信扫一扫

docker容器---docker-compose编排

扶摇_hyber 2022-05-03 阅读 29

1. Docker Compose 简介

       随着微服务以及分布式的飞速发展,一个分布式微服务系统里包含了许许多多的微服务,每一个服务都是一个单独的进程,如果我们用Docker来将微服务进行部署的话,在服务管理上就会出现一些麻烦,比如:需要使用docker build和docker run来启动我们的一个个微服务,每一个微服务可能在网络上要求是在同一个网段中等问题,而docker compose就是用来解决这些问题的。

       Docker Compose是Docker容器中的一个编排工具,它可以对我们的容器进行批量的管理,比如:容器的批量创建,同时启动或停止等,而且通过docker compose来创建容器的话,docker会给这些容器分配在同一个网段中,从而可以让容器之间进行访问。

       Docker Compose主要是通过一个yaml的配置文件来对容器进行编排的,在yaml文件里,我们可以配置数据库,微服务等容器,让他们一起运行或停止。

2. Docker Compose安装

Docker Compose是Docker里的一个开源项目,我们可以下载并使用。

1.下载Docker Compose

#-L后面是下载地址,v代表的是版本,-o表示存放地址
curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.授权

#+x 后面是文件的存放路径
sudo chmod +x docker-compose

3.测试是否安装成功
在这里插入图片描述

3. Docker Compose编排结构

       Docker Compose主要分为三层,分别是工程,服务和容器。其中工程可以包括多个服务,服务里面可以包括多个容器。在我们编写一个Docker Compose工程时,在执行Docker Compose相关指令的这个目录下的使用文件组成了一个过程。
在这里插入图片描述

4. Docker Compose配置文件分析(yaml)

       Docker Compose允许用户通过一个docker-compose.yml文件来定义一组相关联的应用容器为一个项目。一个标准的Docker-Compose文件应该包含version、services、networks 三大部分,其中version主要是声明compose的版本,service则是用来设置一个个服务,networks则是这个工程的网络声明。最关键的是services和networks两个部分。
相关参数以及命令详细参考: https://blog.csdn.net/crazymakercircle/article/details/121134684

version: '3.5' #容器
services:	#服务
  nacos1:	#镜像
    restart: always
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos1
    privileged: true
    ports:
     - "8001:8001"
    environment:
        NACOS_SERVER_IP: ${NACOS_SERVER_IP_1}
        NACOS_APPLICATION_PORT: 8001
        NACOS_SERVERS: ${NACOS_SERVERS}     
    volumes:
     - ./logs_01/:/home/nacos/logs/
     - ./data_01/:/home/nacos/data/
     - ./config/:/home/nacos/config/
    networks:
      - ha-network-overlay
  mysql:
     image: mysql:8.0.26
     container_name: mysql           # container name
     ports:
        - "3307:3306"           # external port 3307
     volumes:
       - /home/docker/mysql/data:/var/lib/mysql        # 数据存放在/home/docker/mysql/data
       - /home/docker/mysql/conf.d:/etc/mysql/conf.d   # custom config
       - /home/docker/mysql/log:/var/log/mysql         # log
     environment:
       -  MYSQL_ROOT_PASSWORD=root             # init pwd
       -  TZ=GMT%2B8
                
     restart: always		# docker重启时,容器自动重启
     networks:
       - ha-network-overlay
networks:
   ha-network-overlay:
     external: true

常用的yaml配置参数(service下的参数):

  1. image:指定镜像名称或镜像ID。

  2. build:指定Dockerfile所在文件夹的路径。Compose将会利用他自动构建这个镜像,然后使用这个镜像。

  3. command:容器启动后默认执行的命令。

  4. links:链接到其他服务容器,可以使用服务名称或服务别名

  5. external_links:链接到docker-compose.yml外部的容器,甚至并非是Compose管理的容器。

  6. ports:暴露端口信息。

  7. expose:暴露端口,与posts不同的是expose只可以暴露端口而不能映射到主机,只供外部服务连接使用

  8. volumes:设置卷挂载的路径,和容器挂载那个是类似的。

  9. environment:设置环境变量。

  10. env_file:从文件中获取环境变量,可以为单独的文件路径或列表。

  11. extends:基于已有的服务进行服务扩展。

  12. net:设置网络模式。使用和docker client 的 --net 参数一样的值。

  13. pid:和宿主机系统共享进程命名空间,打开该选项的容器可以相互通过进程id来访问和操作。

  14. healthcheck:健康检查,这个非常有必要,等服务准备好以后再上线,避免更新过程中出现短暂的无法访问。其实大多数情况下健康检查的规则都会写在 Dockerfile 中

  15. depends_on:依赖的服务,优先启动。

  16. deploy:部署相关的配置都在这个节点下。

5. Docker Compose简单入门

1.首先准备两个jar包和相对应的dockerfile文件
在这里插入图片描述
adminDockerFile:

FROM java:8
# 拷贝文件并且重命名
ADD *.jar /admin-authorized.jar

EXPOSE 8087

ENTRYPOINT ["java","-jar","/admin-authorized.jar"]

orderDockerfile:

FROM java:8
# 拷贝文件并且重命名
ADD *.jar /order-list.jar

EXPOSE 8082

ENTRYPOINT ["java","-jar","/order-list.jar"]

2.编写docker-compose文件

version: "3.7"
services:
    order-list:
        #容器构建
        build:
          #容器构建相对路径/绝对路径
          context: .
          #指定构建的Dockerfile
          dockerfile: orderDockerfile
        #容器启动镜像
        image: order-list
        #容器启动时自定义的容器名称(一定要和注册服务的配置名一样)
        container_name: order-list
        #容器所在网络
        networks:
            - cloud
        #容器映射端口
        ports:
            - "8082:8082"
        #提高当前用户在容器里面的权限
        privileged: true
    admin-authorized:
        #容器构建
        build:
          #容器构建相对路径/绝对路径
          context: .
          #指定构建的Dockerfile
          dockerfile: adminDockerfile
        #容器启动镜像
        image: admin-authorized
        #容器启动时自定义的容器名称(一定要和注册服务的配置名一样)
        container_name: admin-authorized
        #容器所在网络
        networks:
            - cloud
        #容器映射端口
        ports:
            - "8087:8087"
        #提高当前用户在容器里面的权限
        privileged: true
        
#定义网络   
networks:
    #网络名
    cloud:
        #有就使用,没有就会新建网络(默认bridge)
        external: true

3.执行docker-compose up --build命令,服务启动成功
在这里插入图片描述

举报

相关推荐

0 条评论