zoukankan      html  css  js  c++  java
  • 使用Docker Compose编排微服务

    Docker Compose简介

    Compose是一个用于定义和运行多容器Docker应用程序的工具,前世是Fig。它非常适用于在开发、测试、构建CI工作流等场景。

    Docker入门

    使用Compose大致有3个步骤:

    • 使用Dockerfile定义应用程序环境,以便在任何地方重视该环境。
    • 在docker-compose.yml文件中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一起运行。
    • 运行docker-compose up命令,启动并运行整个应用程序。

    以disvoery-eureka为例讲解Compose基本步骤:

    1.在discovery-eureka-0.0.1-SNAPSHOT.jar所在路径(默认是项目的target目录)创建Dockerfile文件,并在其中添加如下内容。

    #基于哪个镜像
    FROM java:8
    
    #将本地文件夹挂载到当前容器
    VOLUME /tmp
    
    #复制文件到容器,也可以直接写成ADD discovery-eureka-0.0.1-SNAPSHOT.jar /app.jar
    ADD discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
    RUN bash -c "touch /app.jar"
    
    #声明需要暴露的端口
    EXPOSE 9000
    
    #配置容器启动后执行的命令
    EXTRYPOINT ["java","-Djava.security.egd=file:/dve/./urandom","-jar","/app.jar"]
    
    

    3.在discovery-eureka-0.0.1-SNAPSHOT.jar所在路径创建文件docker-compose.yml,在其中添加如下内容。

    version: '3'
    services:
    	eureka : #指定服务名称
    		build: .  #指定Dockerfile所在路径
    		ports:
    			- "8761:8761" #形成端口映射,类似docker run 的-p选项,注意使用字符串形式
    
    1. 在docker-compose.yml所在路径执行以下命令:
    docker-compose up
    

    Compose就会自动构建镜像并使用镜像启动容器。也可使用docker-compose up -d后台启动并运行这些容器。

    5.访问http://宿主机IP:8761/,即可访问Eureka Server主页。

    工程、服务、容器

    Docker Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker Compose运行目录下的所有文件(docker-compose.yml、extends文件或环境变量文件等)组成一个工程(默认为docker-compose.yml所在目录的目录名称)。一个工程可包含多个服务,每个服务定义了容器运行的镜像、参数和依赖,一个服务可包括多个容器实例。

    docker-compose.yml常用命令

    build:配置构建时的选项,Compose会利用它自动构建镜像。build的值可以是一个路径,例如:

    build : ./dir
    

    也可以是一个对象,用于指定Dockerfile和参数,例如:

    build:
    	context: ./dir
    	dockerfile: Dockerfile-alternate
    	args:
    		buildno: 1
    

    command:覆盖容器启动后默认执行的命令,示例:

    command: bundle exec thin -p 3000
    

    dns:配置dns服务器。

    可以是一个值,也可以是一个列表。示例:

    dns: 8.8.8.8
    dns:
    	- 8.8.8.8
    	- 9.9.9.9
    

    dns_search:配置DNS的搜索域。

    可以是一个值,也可以是一个列表。示例:

    dns_search: example.com
    dns_search:
    	- dc1.example.com
    	- dc2.example.com
    

    enviroment:环境变量设置。

    可使用数组或字典两种方式。示例:

    enviroment:
    	RACK_ENV: development
    	SHOW: 'true'
    	SESSION_SECRET:
    envioment:
    	- RACK_ENV=development
    	- SHOW=true
    	- SESSION_SECRET
    

    env_file:从文件中获取环境变量。

    可指定一个文件路径或路径列表。如果通过docker -compose -f FILE指定了Compose文件,那么env_file中的路径是Compose文件所在目录的相对路径。使用enviroment指定的环境变量会覆盖env_file指定的环境变量。
    示例:

    env_file: .env
    
    env_file:
    	- ./common.env
    	-  ./apps/web.env
    	-  /opt/secrets.env
    

    expose:暴露端口,只将端口暴露给连接的服务,而不暴露给宿主机。

    示例:

    expose:
    	- "3000:
    	- "8000"
    

    external_links:连接到docker-compose.yml外部的容器,甚至并非compose管理的容器,特别是提供共享或公共服务的容器。格式跟links类似,

    例如:

    external_links:
    	- redis_1
    	- project_db_1:mysql
    	- project_db_1:postgresql
    

    image:指定镜像名称或镜像ID,如果本地不存在该镜像,Compose会尝试下载该镜像。

    示例:

    image: java
    

    links:连接到其他服务的容器。

    可以指定服务名称和服务别名,也可只指定服务名称。
    例如:

    web:
    	links:
    	- db
    	- db:database
    	- redis
    

    networks

    network_mode:设置网络模式。

    示例:

    network_mode:"bridge"
    network_mode:"host"
    network_mode:"none"
    network_mode:"service:[service name]"
    network_mode:"container:[container name/id]"
    

    ports:暴露端口信息,可使用HOST:CONTAINER的格式,也可指定容器端口(此时宿主机将随机选择端口),类似于docker run -p

    容器端口小于60将得到错误的接口,因为yaml会把xx:yy的数字解析为60进制。
    示例:

    ports:
    	- "3000"
    	- "3000-3005"
    	- "8000:8000"
    	- "9090-9091:8080-8081"
    	- "49100:22"
    	- "127.0.0.1:8001:8001"
    	- "127.0.0.1:5000-5010:5000-5010"
    

    volumes:卷挂载路径设置。

    可以设置宿主机路径(HOST:CONTAINER),也可以指定访问模式(HOST:CONTAINER:ro),
    示例:

    volumes:
    	- /var/lib/mysql
    	- /opt/data:/var/lib/mysql
    	- ./cache:/tmp/cache
    	- -/configs:/etc/configs/:ro
    	- datavolume:/var/lib/mysql
    

    docker-compose常用命令

    build:

    构建或重新构建服务。服务被构建后将以project_service的形式标记,例如composetest_db

    help:

    查看指定命令的帮助文档。
    docker-compose所有命令的帮助文档都可通过该命令查看。

    docker-compose help COMMAND
    

    示例:

    docker-compose help build  #查看docker-compose build的帮助
    

    kill:

    通过发生SIGKILL信号停止指定服务的容器。
    示例:

    docker-compose kill eureka
    

    该命令也支持通过参数来指定发生的信号,例如:

    docker-compose kill -s SIGINT
    

    logs:

    查看服务的日志输出。

    port:

    打印绑定的公共端口。示例:

    docker-compose port eureka 8761
    

    这样可输出eureka服务8761端口所绑定的公共端口。

    ps:

    列出所有容器。示例:

    docker-compose ps
    

    也可列出指定服务的容器,示例:

    docker-compose ps eureka
    

    pull:

    下载服务镜像。

    rm:

    删除指定服务的容器。示例:

    docker-compose rm eureka
    

    run:

    在一个服务上执行一个命令。示例:

    docker-compose run web bash
    

    这样可启动一个web服务,同时执行bash命令

    scale:

    设置指定服务运行容器的个数,以service=num的形式指定。示例:

    docker-compose scale user=3 movie=3
    

    start:

    启动指定服务已存在的容器。示例:

    docker-compose start eureka
    

    stop:

    停止已运行的容器,示例:

    docker-compose stop eureka
    

    停止后,可使用docker-compose start再次启动这些容器。

    up:

    构建、创建、重新创建、启动,连接服务的相关容器。所有连接的服务都会启动,除非它们已经停止运行。
    docker-compose up命令会聚合所有容器的输出,当命令退出时,所有容器都会停止。使用docker-compose up -d 可在后台启动并运行所有容器。

  • 相关阅读:
    集合set
    字典
    元组
    列表
    for循环
    Windows调试2.异常产生详细流程
    双机环境搭建
    Windows调试1.WinDbg基本使用-异常基础知识
    PE基础7-HOOK练习
    PE基础6_远程线程注入-HOOK(消息-InLine-IAT)
  • 原文地址:https://www.cnblogs.com/aixing/p/13327487.html
Copyright © 2011-2022 走看看