0


【云原生-Docker】常用的 Docker Compose 配置项

在这里插入图片描述
🍁

博客主页:

👉@不会压弯的小飞侠

欢迎关注:

👉

点赞

👍

收藏

留言


系列专栏:

👉Docker学习专栏

学习社区:

👉不会压弯的小飞侠

知足上进,不负野心。

🔥

欢迎大佬指正,一起学习!一起加油!

在这里插入图片描述

目录


🍁定义服务

Docker Compose 文件:

version: "3"

services:

  redis:
    image: redis:3.2
    networks:
      - backend
    volumes:
      - ./redis/redis.conf:/etc/redis.conf:ro
    ports:
      - "6379:6379"
    command: ["redis-server", "/etc/redis.conf"]

  database:
    image: mysql:5.7
    networks:
      - backend
    volumes:
      - ./mysql/my.cnf:/etc/mysql/my.cnf:ro
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=my-secret-pw
    ports:
      - "3306:3306"

  webapp:
    build: ./webapp
    networks:
      - frontend
      - backend
    volumes:
      - ./webapp:/webapp
    depends_on:
      - redis
      - database

  nginx:
    image: nginx:1.12
    networks:
      - frontend
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./webapp/html:/webapp/html
    depends_on:
      - webapp
    ports:
      - "80:80"
      - "443:443"

networks:
  frontend:
  backend:

volumes:
  mysql-data:

在 Docker Compose 的配置文件里,对服务的定义与创建和启动容器中的选项非常相似,Docker Compose 就是从配置文件中读取出这些内容,替我们创建和管理这些容器的。

在使用时,首先要为每个服务定义一个名称,用以区别不同的服务。

🍁指定镜像

容器最基础的就是镜像了,所以每个服务必须指定镜像。在 Docker Compose 里,可以通过两种方式为服务指定所采用的镜像。一种是通过 image 这个配置,给出能在镜像仓库中找到镜像的名称即可。

另外一种指定镜像的方式就是直接采用 Dockerfile 来构建镜像,通过 build 这个配置我们能够定义构建的环境目录,这与 docker build 中的环境目录是同一个含义。
在 docker build 里还能通过选项定义许多内容,这些在 Docker Compose 里依然可以。

## ......
  webapp:
    build:
      context: ./webapp
      dockerfile: webapp-dockerfile
      args:
        - JAVA_VERSION=1.6## ......

在配置文件里,还能用 Map 的形式来定义 build,在这种格式下,能够指定更多的镜像构建参数,例如 Dockerfile 的文件名,构建参数等等。
对于一些可以不通过重新构建镜像的方式便能修改的内容,还是不建议重新构建镜像,而是使用原有的镜像做简单的修改。
例如上面的配置里,希望修改 Redis 的启动命令,加入配置文件以便对 Redis 服务进行配置,那么可以直接通过 command 配置来修改。而在 MySQL 的定义,通过 environment 配置为 MySQL 设置了初始密码。
由于 Docker Compose 的配置已经固化下来,所以不需要担心忘记之前执行了哪些命令来启动容器,当每次需要开启或关闭环境时,只需要 docker-compose up -d 和 docker-compose down 命令,就能轻松完成操作。

🍁依赖声明

在 Docker Compose 的配置文件里定义服务,在书写上有由上至下的先后关系,但实际在容器启动中,由于各种因素的存在,其顺序还是无法保障的。
所以,如果服务间有非常强的依赖关系,就必须告知 Docker Compose 容器的先后启动顺序。只有当被依赖的容器完全启动后,Docker Compose 才会创建和启动这个容器。

定义依赖的方式很简单,也就是 depends_on 这个配置项,只需要通过它列出这个服务所有依赖的其他服务即可。在 Docker Compose 启动项目的时候,会检查所有依赖,形成正确的启动顺序并按这个顺序来依次启动容器

🍁文件挂载

在 Docker Compose 里定义文件挂载的方式与 Docker Engine 里也并没有太多的区别,使用 volumes 配置可以像 docker CLI 里的 -v 选项一样来指定外部挂载和数据卷挂载。能够直接挂载宿主机文件系统中的目录,也可以通过数据卷的形式挂载内容。
在使用外部文件挂载的时候,可以直接指定相对目录进行挂载,这里的相对目录是指相对于 docker-compose.yml 文件的目录。
由于有相对目录这样的机制,可以将 docker-compose.yml 和所有相关的挂载文件放置到同一个文件夹下,形成一个完整的项目文件夹。
直接将代码挂载到容器里,而不是通过镜像构建的方式打包成镜像。
同时,在开发过程中,对于程序的配置等内容,也建议直接使用文件挂载的形式挂载到容器里,避免经常修改所带来的麻烦。

🍁使用数据卷

如果要在项目中使用数据卷来存放特殊的数据,也可以让 Docker Compose 自动完成对数据卷的创建,而不需要单独进行操作。

如果想把属于 Docker Compose 项目以外的数据卷引入进来直接使用,可以将数据卷定义为外部引入,通过 external 这个配置就能完成这个定义。

## ......
volumes:
  mysql-data:
    external: true
## ......

🍁配置网络

网络也是容器间互相访问的桥梁,所以网络的配置对于多个容器组成的应用系统来说也是非常重要的。在 Docker Compose 里,可以为整个应用系统设置一个或多个网络。
声明网络的配置同样独立于 services 存在,是位于根配置下的 networks 配置。
除了简单的声明网络名称,让 Docker Compose 自动按默认形式完成网络配置外,我们还可以显式的指定网络的参数。

networks:
  frontend:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.10.1.0/24## ......

🍁端口映射

在 Docker Compose 的每个服务配置里,看到了 ports 这个配置项,它是用来定义端口映射的。
可以利用它进行宿主机与容器端口的映射,这个配置与 docker CLI 中 -p 选项的使用方法是近似的。
由于 YAML 格式对 xx:yy 这种格式的解析有特殊性,在设置小于 60 的值时,会被当成时间而不是字符串来处理,所以我们最好使用引号将端口映射的定义包裹起来,避免歧义


在这里插入图片描述

标签: docker 云原生

本文转载自: https://blog.csdn.net/qq_43514330/article/details/127848719
版权归原作者 不会压弯的小飞侠 所有, 如有侵权,请联系我们删除。

“【云原生-Docker】常用的 Docker Compose 配置项”的评论:

还没有评论