当前位置:首页 > docker > docker compose > 正文内容

docker compose

docker compose介绍

docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。也可以理解为,将docker run命令的参数写到compose配置文件中,创建启动容器。

docker compose安装

执行命令:

  • ]# curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
  • ]# chmod +x /usr/bin/docker-compose

docker compose组成

名称
说明
示例
version指定compose版本version: "3.8"
services定义服务

services:
  webnginx:
  image: nginx:1.24.0
  container_name: nginx1
  ports:
    - 20002:18080
    - 20003:18081

networks定义网络
volumes定义数据卷

volumes:

  nginx1:

services

参数
说明
示例
image

指定使用的镜像名称或镜像ID

如果指定了build,需要构建镜像,则是新构建镜像的名称

image: tomcat:8.5.85
build

指定Dockerfile所在的路径,用于构建自定义镜像

与image互斥的,如果image指定了一个存在的镜像,那么不会执行build

build:

  context:  ./nginx1    指定从当前路径的nginx目录下进行构建

  dockerfile: nginxbuild    指定dockerfile文件nginxbuild位置是nginx/nginxbuild

container_name指定容器名称container_name: nginx1
command指定容器启动时要执行的命令

command: tail -f /dev/null

ports
指定主机和容器之间的端口映射关系

ports:

  - 18080:18080

  - 18081:18081

volumes指定主机和容器之间的目录或文件映射关系

volumes:

  - /app:/opt/app  映射本地目录

  - nginx2:/nginx   挂载数据卷

user指定容器运行的用户

user: root

environment
设置容器中的环境变量

environment:

  - "va1=str1"  指定变量va1的值str1

networks
指定容器所连接的网络

networks:
  - webnet   指定使用webnet网络

networks:
  webnet:
    ipv4_address: 192.20.2.10   指定容器ip

需要在networks中指定,详情见networks

depends_on
指定容器启动所依赖的其他容器

restart
指定容器在退出时的重启策略

restart: always

privileged是否配置特权模式

privileged: true

healthcheck
配置容器的健康检查

links
连接到其他容器的服务

volumes

示例1:

volumes:
  datavolu:               指定数据卷命名为datavolu,如果没有则进行创建


示例2:

volumes:
  datavolu:                将创建的数据卷命名为datavolu
    name: data1       将数据卷datavolu的别名设置为data1,即通过docker volumes ls查看到的卷名称

示例3:

volumes:

  datavolu:     容器启动时挂载数据卷data1

    external: true    挂载已有数据卷

networks

示例1:

networks:        
  webnet:     创建网络webnet


示例2:

networks:        
  webnet:     指定使用网络webnet,webnet网络已建立

    external: true      

示例3:

networks:        
  webnet:         网络名称webnet
    name: net1      网络别名设置为net1,即docker network ls所显示的网络名称

示例4:

networks:
  webnet:           
网络名称
    driver: bridge            网络模式为桥接
    ipam:        
      driver: default
      config:                    定义网络信息
        - subnet: "172.20.0.0/16"       定义网段
           ip_range: "172.20.2.0/24"

           gateway: "172.20.2.1"     定义网关


compose文件执行方式

1)docker-compose up -d    docker compose文件名称为docker-compose.yml时

2)docker-compose -f nginx-compose.yml up -d   nginx-compose.yml是compose文件名称

3)docker-compose -f nginx_php-compose.yml up -d --build   启动容器时需要进行镜像构建

docker compose文件名称为docker-compose.yml,在执行时可以不用指定compose文件路径、名称,即第一种执行方式

如果docker cmpose文件名称为自定义时,在执行时需要指定compose文件路径、名称,即第二种执行方式

如果需要进行镜像构建,则要指定--build参数,即第三种执行方式

注意,单个compose文件需要放到单独的目录中,如果将不同的compose文件放到一起,执行一个compose文件时,可能会影响到其他compose文件中定义的容器


docker compose示例

nginx容器

  • version: "3.8"
  • services:
  • ##指定服务名称:webnginx
  •   webnginx:
  • ##指定镜像名称
  •     image: nginx:1.24.0
  • ##指定容器名称
  •     container_name: nginx1
  • ##指定映射端口
  •     ports:
  •       - 20002:18080
  •       - 20003:18081
  • ##指定挂载数据卷,映射目录
  •     volumes:
  •       - /app:/opt/app
  •       - nginx2:/nginx
  • ##指定重启策略为always
  •     restart: always
  • ##指定数据卷
  • volumes:
  •   nginx2:
  • ##挂载已有数据卷而不是新建
  •     external: true

启动compose

image.png

alpine

启动alpine容器

  • version: "3.8"
  • services:
  •   alp1:
  •     image: alpine:3.18
  •     container_name: alpserver
  •     ports:
  •       - "18080:18080"
  •     networks:
  •       - alpnet
  •     command: /bin/sh -c "while true; do sleep 10; done"    ##容器启动时,启动的主进程
  • networks:
  •   alpnet:

nginx+php

一个项目中,同时启动nginx,php容器

示例1:

  • version: "3.8"
  • services:
  •   nginx1:
  •     image: nginx:1.24.0
  •     ports:
  •       - "20002:18080"
  •     volumes:
  •       - "/app:/app"
  •     networks:
  •       - webnet
  •     depends_on:
  •       - php1
  •   php1:
  •     image: php:7.4.33
  •     volumes:
  •       - "/app:/app"
  •     networks:
  •       - webnet
  • networks:
  •   webnet:

示例2:

启动nginx和php容器时,进行镜像的构建

docker-compose文件

  • version: "3.8"
  • services:
  •   nginxweb1:      ##nginx服务
  • ##新镜像名称ngser1:1
  •     image: ngser:1
  •     container_name: nginx1
  • ##从当前路径下构建ngser1镜像,dockerfile文件为nginxbuild
  •     build:
  •       context: .
  •       dockerfile: nginxbuild
  •     ports:
  •       - "20002:18080"
  •     volumes:
  •       - "/app:/app"
  •     networks:
  •       - webnet1
  •     depends_on:
  •       - phpserver1
  •  
  •   phpserver1:      ##php服务
  • ##新镜像名称为phpser:1
  •     image: phpser:1
  •     container_name: php1
  • ##从当前路径下构建phpser1:1镜像,dockerfile文件为phpbuild
  •     build:
  •       context: .
  •       dockerfile: phpbuild
  •     volumes:
  •       - "/app:/app"
  •     networks:
  •       - webnet1
  • networks:
  •   webnet1:

nginxbuild文件

  • FROM nginx:1.24.0
  • ADD test.conf /nginx/conf/vhosts
  • RUN usermod -u 1020 nginx && \
  • groupmod -g 1020 nginx && \
  • mkdir /app && \
  • chown -R nginx:nginx /app


phpbuild文件

  • FROM php:7.4.33
  • ADD www.conf /php/etc/php-fpm.d
  • RUN useradd nginx -u 1020 -d /php &&\
  • groupmod -g 1020 nginx &&\
  • mkdir /app && \
  • chown -R nginx:nginx /php && \
  • chown -R nginx:nginx /app



扫描二维码推送至手机访问。

版权声明:本文由个人博客发布,如需转载请注明出处。

本文链接:https://opszzfwordpress.club/post/215.html

返回列表

没有更早的文章了...

没有最新的文章了...

“docker compose” 的相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。
Loading...