【云原生 | Docker篇】深入Docker Compose(六)(下)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【云原生 | Docker篇】深入Docker Compose(六)(下)

五、 docker-compose.yml 属性



  • version:指定 docker-compose.yml 文件的写法格式
  • services:多个容器集合
  • build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 参数


build: ./dir

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


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


command: bundle exec thin -p 3000
----------------------------------
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


environment:环境变量配置,可以用数组或字典两种方式


environment:
    RACK_ENV: development
    SHOW: 'ture'
-------------------------
environment:
    - RACK_ENV=development
    - SHOW=ture


env_file:从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于 environment 指定的环境变量


env_file: .env
---------------
env_file:
    - ./common.env


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


expose:
    - "3000"
    - "8000"


image:指定服务所使用的镜像


image: java


network_mode:设置网络模式


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


ports:对外暴露的端口定义,和 expose 对应


ports:   # 暴露端口信息  - "宿主机端口:容器暴露端口"
- "8763:8763"
- "8763:8763"


links:将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况


links:    # 指定服务名称:别名  
    - docker-compose-eureka-server:compose-eureka


volumes:卷挂载路径


volumes:
  - /lib
  - /var


logs:日志输出信息


--no-color          单色输出,不显示其他颜.
-f, --follow        跟踪日志输出,就是可以实时查看日志
-t, --timestamps    显示时间戳
--tail              从日志的结尾显示,--tail=200


六、compose示例



1、建立一个hello world 简单测试案例


mkdir composetest


创建app.py


编写 compose 文件 [compose.yaml]


compose 文件名 docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml


version : "3.9" # 指定版本号 ; 查看文档 https://docs.docker.com/compose/compose-file/


services : # 所有需要启动的服务
  web : # 第一个服务的名字
    build : #docker build -t xxx -f Dockerfile .
      dockerfile : Dockerfile
      context : .
    image : 'hello:py'
    ports : # 指定启动容器暴露的端口
      - "5000:5000"
  redis : # 第二个服务的名字
    image : "redis:alpine"
# mysqlserver: # 第三个服务
# 怎么执行的
Creating network "composetest_default" with the default driver
Building web
Sending build context to Docker daemon 5.632kB
Step 1/10 : FROM python : 3.7-alpine
。。。。。。
Step 10/10 : CMD [ "flask" , "run" ]
---> Running in 01e36491132c
Removing intermediate container 01e36491132c
---> 47d09826ac6f
Successfully built 47d09826ac6f
Successfully tagged hello:py
======web 镜像名 hello:py===
WARNING : Image for service web was built because it did not already exist. To
rebuild this image you must use `docker-compose build` or `docker-compose up --
build`.
Pulling redis (redis:alpine)...
... ....
Status : Downloaded newer image for redis : alpine


使用命令进行后台执行


docker-compose up -d


2、 加上数据卷的yaml配置文件


version : "3.7"
services :
  app :
    image : node : 12-alpine
    command : sh -c "yarn install && yarn run dev"
    ports :
      - 3000:3000
    working_dir : /app
    volumes :
      - ./:/app
    environment :
      MYSQL_HOST : mysql
      MYSQL_USER : root
      MYSQL_PASSWORD : secret
      MYSQL_DB : todos
     networks :
       - hello
       - world
     deploy : # 安装 docker swarm
       replicas : 6 # 指定副本:处于不同的服务器(负载均衡 + 高可用)
mysql : # 可以代表一个容器, ping 服务名 mysql 可以访问
  image : mysql : 5.7 # 负载均衡下,数据一致怎么做???主从同步,读写分离
  volumes :
    - todo-mysql-data:/var/lib/mysql
  environment :
    MYSQL_ROOT_PASSWORD : secret
    MYSQL_DATABASE : todos
  networks : # 这个服务加入那个自定义网络
    - hello
  deploy : # 安装 docker swarm
    replicas : 6 # 指定副本:处于不同的服务器(负载均衡 + 高可用)
redis :
  image : redis
  networks :
    - world
volumes :
  todo-mysql-data :
networks :
  hello :
  world :


七、扩展说明docker swarm



两句总结:


  • docker swarm init (创建一个master 节点)


       控制台打印


docker swarm join --token SWMTKN-1-1i0biktih9tfn7mrj6asn27em4vydg8pp00u930nrycpgct1ww-7ecs32nl5f5y8qx6e5lp4f064 10.120.82.4:2377


其他和本机(master)能互通的机器 把上面的命令运行,加入集群

 

docker swarm join --token SWMTKN-1-1i0biktih9tfn7mrj6asn27em4vydg8pp00u930nrycpgct1ww-7ecs32nl5f5y8qx6e5lp4f064 10.120.82.4:2377


思考:


k8s 怎么解决: helm把整个应用的部署打成应用包, helm install mysql (主从)


八、整个原理流程图



11a8db6a31714aad97b328e6a2a16282.png

目录
相关文章
|
1月前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
167 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
1月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
179 0
|
1月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
238 0
|
2月前
|
Docker 容器
Docker Compose的安装与配置
Docker Compose的安装与配置
131 2
Docker Compose的安装与配置
|
2月前
|
存储 监控 Serverless
Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
【2月更文挑战第8天】Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
263 1
|
2月前
|
IDE Cloud Native 开发工具
云原生之在Docker环境下部署Atheos云IDE平台
【2月更文挑战第3天】云原生之在Docker环境下部署Atheos云IDE平台
364 2
|
2月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
172 0
|
2月前
|
Docker 容器
百度搜索:蓝易云【Docker下如何实现Docker Compose?】
现在,你已经成功使用Docker Compose在Docker中配置和管理多个容器服务。你可以在 `docker-compose.yml`文件中根据需要添加更多的服务和配置。
27 0
|
3月前
|
XML Docker 容器
Docker学习笔记十:docker Compose
Docker学习笔记十:docker Compose
Docker学习笔记十:docker Compose
|
3月前
|
关系型数据库 MySQL 开发者
Docker Compose:轻松实现容器编排的利器
Docker Compose 是一款由 Docker 官方提供的容器编排工具,它通过简化容器应用的部署和管理,使得开发者们能够更加便捷地进行应用开发。本文将对 Docker Compose 的概念、功能及使用方法进行详细介绍,并结合实际案例进行演示,帮助读者更好地掌握 Docker Compose 的使用。

热门文章

最新文章