当前位置:首页 > 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” 的相关文章

发表评论

访客

看不清,换一张

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