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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【云原生 | 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

目录
相关文章
|
2天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
12天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
6天前
|
Docker Python 容器
python检测docker compose文件是否正确
python检测docker compose文件是否正确
|
7天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
26 4
|
17天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
20天前
|
运维 Docker 微服务
掌握 Docker Compose:简化你的多容器应用部署
在微服务架构和容器化技术普及的今天,管理多容器部署变得颇具挑战。Docker Compose 通过一个 YAML 文件定义和运行多容器应用,简化了部署和运维。本文介绍其基本概念、使用方法及优势,包括服务、项目、卷和网络等核心概念,并提供从安装到管理服务的详细步骤,助你轻松掌握 Docker Compose,提高开发效率和应用运维质量。
|
28天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
6天前
|
Docker 容器
7-7|salt检测docker compose文件是否正常
7-7|salt检测docker compose文件是否正常
|
6天前
|
运维 监控 Docker
掌握 Docker Compose:简化你的多容器应用部署
在微服务架构和容器化技术日益普及的今天,管理多个容器的部署和运维变得颇具挑战。Docker Compose 通过一个 YAML 文件定义和运行多容器 Docker 应用,极大地简化了这一过程。本文介绍了 Docker Compose 的基本概念、使用方法及其优势,包括简化配置、一键部署、易于版本控制和环境一致性。通过具体示例展示了如何安装 Docker Compose、创建 `docker-compose.yml` 文件并管理服务。掌握 Docker Compose 可显著提高开发效率和应用运维质量。
|
2月前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
下一篇
无影云桌面