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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 【云原生 | 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入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
137 2
|
2月前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
262 77
|
6天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
54 27
|
7天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
55 22
|
28天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
134 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
25天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
122 19
|
1月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
115 24
|
1月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
170 6
|
2月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。

热门文章

最新文章