docker-compose(Docker服务编排)

docker 服务编排
docker 服务编排也叫docker compose,它的出现是应来解决使用docker部署大型应用的业务场景的问题。通常在生产环境中,使用docker部署一个应用需要使用多个容器,例如部署前端、后端、依赖服务、数据库等。如果每个容器都需要手工使用shell来启动则效率过于低下,所以在这样的场景中,我们可以采用docker compose来进行docker容器的编排工作。

docker-compose.yml文件的编写
在docker-compose.yml文件中可以编写相关的配置属性,用来管理compose的构建过程,主要的属性包括:
1)version 代表compose文件格式版本,按照官网的实例,建议目前采用‘3.9’版本
2)services 该属性是compose文件中的核心属性,在该属性之下,可以配置compose启动的各种服务。主要是需要compose启动的各种容器信息。也是compose文件中主要的开发内容。
常用属性:

属性名称 说明
image 当前服务使用什么镜像文件
ports 当前容器需要映射的端口信息 - ”8080:80“
enviroments 当前镜像需要传递的参数
volumes 当前镜像的挂在点
tty:true 代表使用-it模式启动服务
build 指定dockerfile所在的路径,当使用docker compose编排一个容器,而且该容器需要构建的时候需要使用该参数
container_name 指定编排容器的名称
restart:always 在docker服务重启后,该容器是否自动重启
depends_on: 服务名 设定服务依赖关系,通过该配置可以决定服务的启动顺序
env_file 指定配置文件
context 指定上下文
dockerfile 指定需要使用的dockerfile文件

docker-compose命令

docker-compose up命令来启动一个容器编排,接下来,我们详细了解一下,在docker-compose中常用的命令以及参数使用

docker-compose命令
常用参数:
-f 默认docker-compose会在当前文件夹下询招Dockercompose.yml文件,如果需要自定义文件名,可以使用-f 文件名 形式来指定
-p 指定项目名称 指定项目后,通过compoose创建的所有容器都会自动添加项目名称前缀
-v 查看当前docker-compose的版本信息
docker-compose 环境变量
docker compose 默认的环境变量为.env,在其中我们可以使用对应的键值对模式给compose传递值 --env-file 参数可以动态制动compose需要使用的配置文件位置
docker-compose up 启动一个容器编排
常用参数: `

参数名称 说明
-d 后台运行
–force-recreate 强制更新已经存在的容器
–remove-orphans 删除在compose文件中没有定义的容器,通常使用在修改了compose文件的场景下使用服务名 单独启动compose中的某一个服务,如果服务存在依赖,则被依赖的服务也会被启动
docker-compose down 删除对应的容器,网络服务
docker-compose stop 停止compose对应的所有服务
docker-compose start 启动所有的服务容器
docker-compose ps 查看与当前compse相关的服务容器
-q 只列出id值,其他值不显示
docker-compose logs 读取日志信息
docker-compose pull 拉取服务对应的镜像
docker-compose build 构建compose中的所有镜像、
docker-compose images 查看所有的镜像信息
docker-compose config 查看配置文件信息
docker-compose restart 重启服务
docker-compose exec 服务名 进行指定服务的容器
docker-compose rm 删除所有已经停止的服务容器
以上命令涉及到某个服务的时候均可以通过:命令:服务名对相应的服务进行操作 看左面

docker-compose常用命令
获得一个命令的帮助
docker-compose 命令 --help

构建并启动所有容器,如果镜像存在就重新构建
docker-compose up -d --build

启动所有服务
docker-compose up -d

构建启动nignx容器               
docker-compose up -d nginx       

-f 指定使用的Compose配置文件启动,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d

运行一个服务,并在服务上执行一个命令
docker-compose run 容器id或容器名 ip addr

登录到nginx容器中             
docker-compose exec nginx bash

此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose down

列出项目中运行的所有容器
docker-compose ps

列出项目中运行及未运行的所有容器
docker-compose ps -a

列出所有运行的服务容器
docker-compose ls

列出所有服务容器(包括未运行的容器)
docker-compose ls -a

重新启动nginx容器
docker-compose restart nginx          

构建镜像          
docker-compose build nginx            

不带缓存的构建       
docker-compose build --no-cache nginx     

查看各个服务容器内运行的进程      
docker-compose top              

查看nginx的实时日志               
docker-compose logs -f nginx        

列出 Compose 文件包含的镜像           
docker-compose images 

验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。                         
docker-compose config                

以json的形式输出nginx的docker日志           
docker-compose events --json nginx        

暂停nignx容器     
docker-compose pause nginx         

恢复ningx容器            
docker-compose unpause nginx      

删除容器(删除前必须关闭容器,执行stop)             
docker-compose rm nginx                       

强制删除容器(不必先关闭容器)             
docker-compose rm -f nginx    

停止nignx容器         
docker-compose stop nginx       
    
启动nignx容器           
docker-compose start nginx     

重启项目中的nignx容器                
docker-compose restart nginx               

下载依赖的镜像
docker-compose pull   

推送服务依的镜像
docker-compose push

设置指定服务运行的容器个数。通过service=num的参数来设置数量
docker-compose scale web=3 db=2

查看版本信息
docker-compose version

docker compose 网络管理
​1. 默认场景下,使用docker compose编排服务,会自动创建对应的网络。可以使用docker network ls
2. 以及docker inspect 网络id 进行相关的查询。
可以在compose文件中,使用networks
定义一个网络,并在服务中使用networks属性加入一个自定义网络。这时候有三种结果,如果所有的服务都加入到了自定义网络,则docker,会创建自定义网络,并将所有的服务容器添加到对应的网络中,如果没有任何服务声明加入自定义网络,则docker会创建默认网络,然后将容器添加到默认网络,而不会创建自定义网络,如果有的服务声明添加到自定义网络,而有的服务没有声明,则docker会创建两个网络,一个是自定义网络,而另一个是默认网络,并将对应的容器添加到对应的网络中。
3. 使用固定ip策略

version: '3.3'
services:
  cslcp_web:
    image: "cslcp_web_image:v01"
    ports:
      - "19090:8080"
    build:
      context: "../web/"
      dockerfile: "Dockerfile"
    networks:
      - "cslcp_net"
  cslcp_mysql:
    image: "mysql"
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.100
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
  cslcp_centos:
    container_name: 'test_centos'
    image: "centos"
    tty: true
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
networks:
  cslcp_net:
    ipam:
      config:
        - subnet: "192.168.13.0/24"
          gateway: "192.168.13.1"

  

    1. 使用服务策略
      当compose启动成功后可以直接使用ping 访问服务名
    2. 使用网络别名策略
networks:
  cslcp_net:
    ipam:
      config:
      - gateway: 192.168.13.1
        subnet: 192.168.13.0/24
services:
  cslcp_centos:
    container_name: test_centos
    depends_on:
      cslcp_web:
        condition: service_started
    image: centos
    links:
    - cslcp_web:cw
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
    tty: true
  cslcp_mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root
    image: mysql
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.100
    ports:
    - published: 13306
      target: 33064
  cslcp_web:
    build:
      context: /root/docker/dockercompose/cslcp/web
      dockerfile: Dockerfile
    image: cslcp_web_image:v01
    networks:
      cslcp_net: null
    ports:
    - published: 19090
      target: 8080
version: '3.3'

  

  1. 使用container 策略

 

version: '3.3'
services:
  cslcp_web:
    image: "cslcp_web_image:v01"
    build:
      context: "../web/"
      dockerfile: "Dockerfile"
    depends_on:
      - "cslcp_centos"
    network_mode: "service:cslcp_centos"
  cslcp_mysql:
    image: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    depends_on:
      - "cslcp_centos"
    network_mode: "service:cslcp_centos"
  cslcp_centos:
    container_name: 'test_centos'
    image: "centos"
    tty: true
    ports:
      - "17070:8080"
      - "13306:3306"
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
networks:
  cslcp_net:
    ipam:
      config:
        - subnet: "192.168.13.0/24"
          gateway: "192.168.13.1"

 

 

在解决方案目录下添加docker-compose.yml文件:

 添加方式:

 1、手动添加文件

 2、通过vs自动添加:选中需要添加项目右键,如图

 

 

鸣谢:

https://blog.csdn.net/ayhg1/article/details/118066576

 https://www.cnblogs.com/cwsheng/p/13944281.html

posted @ 2022-05-26 17:41  春光牛牛  阅读(382)  评论(0编辑  收藏  举报