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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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

目录
相关文章
|
6天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
28 2
|
4天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
12天前
|
关系型数据库 MySQL API
|
25天前
|
缓存 监控 持续交付
|
8天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
8天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
19 1
|
20天前
|
负载均衡 监控 开发者
深入浅出:掌握 Docker Compose 的高级用法
【10月更文挑战第22天】本文深入探讨了 Docker Compose 的高级用法,包括环境变量、服务扩展、网络配置和数据卷管理。通过实例详细介绍了如何利用这些功能提升开发效率和应用部署的灵活性。适合希望深入了解 Docker Compose 的开发者阅读。
|
21天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
33 3
|
27天前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。
|
8天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。