docker高级

前言:最近让我部署一个项目,该项目是多个服务的,在启动多个容器的时候是比较麻烦的。于是就想到了docker-compose 容器编排。

结构:

  • docker-compose 容器编排
  • docker-swarm 容器集群

目录:

文章目录

  • docker高级
    • docker compose
      • 安装
      • docker-compose 文件的组成
      • docker-compose 常用命令
      • 实战
    • docker swarm
    • CI/CD

docker compose

docker 容器编排。当需要启动多容器的时候,需要docker-compose进行编排管理

结构:

  • 安装
  • docker-compose 文件的组成
  • docker-compose 常用命令
  • 实战

安装

流程:

  1. 下载
  2. 添加可执行权限
  3. 测试安装结果

1、下载

  • 从gitHub下载
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • daocloud镜像下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2、添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

3、

docker-compose --version

docker-compose 文件的组成

docker-compose 文件是一个定义服务,网络,数据卷的yaml文件,默认文件名为 docker-compose.yml

组成:

  • version

  • services

  • images

  • ports

  • volumes

  • container_name

  • command

  • build

  • depends_on

  • networks

  • sysctls

  • ulimits

  • environment

  • env_file

案例:

version: "3.7"services:saas_group:build:context: ../saas-groupdockerfile: ../saas-group/Dockerfilecontainer_name: saas_grouprestart: "no"external_links:- nacos_server:nacoshost- mysql_db:mysqlhost- redis_db:redishostvolumes:- /private/docker/application-logs:/mnt/logsenvironment:- nacoshost=xx.xx.xx.xx- mysqlhost=xx.xx.xx.xx- redishost=xx.xx.xx.xx- NACOS_CONFIG_GROUP=develop_group- DUBBO_IP_TO_REGISTRY=xx.xx.xx.xx- NACOS_IP_TO_REGISTRY=xx.xx.xx.xxports:- 20880-20085:20880-20885- 6000-6005:6000-6005networks:- qa-overlayapplication_group:build:context: ../application-groupdockerfile: ./Dockerfilecontainer_name: application_grouprestart: "no"external_links:- nacos_server:nacoshost- mysql_db:mysqlhost- redis_db:redishostvolumes:- /private/docker/application-logs:/mnt/logsenvironment:- nacoshost=xx.xx.xx.xx- mysqlhost=xx.xx.xx.xx- redishost=xx.xx.xx.xx- NACOS_CONFIG_GROUP=develop_group- DUBBO_IP_TO_REGISTRY=xx.xx.xx.xx- NACOS_IP_TO_REGISTRY=xx.xx.xx.xxports:- 30880-30889:30880-30889- 9000-9005:9000-9005networks:- qa-overlayglobal_gateway:build:context: middleware-group/global-gatewaydockerfile: ./Dockerfilecontainer_name: global_gatewayrestart: "no"external_links:- nacos_server:nacoshost- mysql_db:mysqlhost- redis_db:redishostports:- 8080:8080volumes:- /private/docker/application-logs:/mnt/logsenvironment:- nacoshost=xx.xx.xx.xx- mysqlhost=xx.xx.xx.xx- redishost=xx.xx.xx.xx- NACOS_CONFIG_GROUP=develop_group- DUBBO_IP_TO_REGISTRY=xx.xx.xx.xx- NACOS_IP_TO_REGISTRY=xx.xx.xx.xxnetworks:- qa-overlaydeploy:resources:limits:cpus: '0.50'memory: 1024Mnetworks:qa-overlay:external: true

1、version

  • 定义版本号,一般3.0-4.0都行,可以在官网查对应的关系:Compose file | Docker Documentation

2、services

  • service代表一个容器,servieces 下可以有多个容器

3、image

  • 指定为镜像名称【:版本号】或者镜像ID,如果镜像在本地不存在,compose 会尝试拉取这个镜像。
image: centos7.7
image: orchardup/postgresql
image: a4bc65fd

4、ports

  • 暴露端口信息

宿主端口:容器端口host:container格式;或者仅仅指定容器的端口,宿主机将会随机选择端口。

ports:- "3000"- "49100:22"

5、volumes

  • 数据卷所挂载的路径设置,可以设置为宿主机路径host:container,并且可以设置访问模式host:container:ro
  • 支持相对路径
volumes:- /var/lib/mysql- cache/:/tmp/cache- ~/configs:/etc/configs/:ro
  • 如果路径为数据卷名称,必须在文件中配置数据卷
version: "3"services:my_src:image: mysql:8.0# 数据卷声明volumes:- mysql_data:/var/lib/mysqlvolumes:mysql_data: # 声明的数据卷

6、container_name

  • 指定容器名称,将会默认使用项目名称_服务名称_序号 这样的格式
version: "3"
services:docker-service-name:  # 容器服务名container_name: docker-web-container  # 容器名称

7、command

  • 覆盖容器后,默认执行命令
command: echo "hello world"

8、build

  • 指定 Dockerfile 所在文件夹路径(可以是绝对路径,或者是相对 docker-compose.yaml 文件的路径),compose 将会利用它自动构建这个镜像,然后使用这个镜像
version: '3'
services:webapp:build: ./dir
  • 也可以使用 context 指令指定 Dockerfile 所在文件夹路径
  • 使用 dockerfile 指令指定 Dockerfile 文件名,使用 arg 指令指定构建镜像时的变量
version: '3'
services:webapp:build:context: /opt/dockerdockerfile: Dockerfile-alternateargs:buildno: 1container_name: webappports:- "8080:8080"

9、depends_on

  • 解决容器的依赖,启动先后的问题,以下例子中启动顺序为: dbredisweb
  • 注意:不是【完全启动后】才启动,只是启动顺序
version: '3'services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

10,networks

  • 配置容器连接的网络
version: "3"
services:some-service:networks:- some-network- other-networknetworks:some-network:other-network:

11、sysctls

  • 配置容器内核参数
sysctls:net.core.somaxconn: 1024net.ipv4.tcp_syncookies: 0sysctls:- net.core.somaxconn=1024- net.ipv4.tcp_syncookies=0

12、ulimits

  • 指定容器的 ulimits 限制值

例如:指定最大进程数为 65535 ,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过应限制)和 40000(系统硬限制,只能用户root 提高)

  ulimits:nproc: 65535nofile:soft: 20000hard: 40000

13、environment

  • 设置环境变量,例如设置mysql 默认启动密码
environment:- MYSQL_ROOT_PASSWORD=root

14、env_file

  • 从文件中获取环境变量,可以为单独的文件路径或者列表
  • 如果通过 docker-compose -f FILE 方式来指令 compose 模板文件,则 env_file 中变量的路径会基于模板文件的路径
  • 如果 env_file 的环境变量名称 与 environment 指令冲突,以 environment 为准
env_file: .envenv_file:- ./apps/web.env- /opt/secrets.env

支持 # 开头的注释,同dockerfile文件一致。


docker-compose 常用命令

注意:

​ 对于docker-compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。

​ 如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令的影响。

基本命令格式:

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

结构:

  • up
  • down
  • ps
  • log

1、up

docker-compose up [options] [SERVICE…]
  • 该命令十分强大,它将尝试自动完成包括构建镜像,创建服务,启动服务,并关联服务相关容器的一系列操作
  • 链接的服务都会被自动启动,除非已经处于运行状态
  • 可以说大部分时候都可以直接通过该命令,来启动一个项目
  • 默认情况下,,docker-compose up 启动并进入容器;如果当前容器正在运行,将会重新加载 yml 文件,重新创建。
  • 使用 ctrl c 退出容器
  • docker-compose up -d 后台启动

2、dokcer-compose down

  • 停止 up 命令所启动的容器,并移除网络

3、docker-compose ps [options] [service…]

  • 列出项目中目前所有的容器 ,-q 只打印容器的id

4、docker-compose log 容器id

  • 查看服务日志

实战

实战列表:


docker-compose tomcat

yml文件:

version: "3.0"
services:tomcat-docker:  # 唯一服务名image: tomcat:8.0-jre8 # 创建当前这个容器的镜像ports:- 8094:8080   # 映射端口

启动:

  • 进入docker-compose.yml 文件目录下
#启动并进入容器
docker-compose up#启动容器后台运行
docker-compose up -d

访问:

ip地址:8094

docker swarm

相当于简单版k8s

CI/CD

  • 持续集成/部署

  • jenkins 流水线

docker 高级 compose/swarm相关推荐

  1. 云原生时代必须具备的核心技能之Docker高级篇(Swarm)

    解决集群问题 k8s 官网地址:https://docs.docker.com/engine/swarm/ 1.Swarm介绍 ​ Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若 ...

  2. couchbase_适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...

    couchbase 该博客将说明如何使用Docker创建部署在多个主机上的多容器应用程序. 这将使用Docker Machine,Swarm和Compose实现. 是的,这三个工具一起使这个博客变得更 ...

  3. 适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...

    该博客将说明如何使用Docker创建部署在多个主机上的多容器应用程序. 这将使用Docker Machine,Swarm和Compose实现. 是的,所有这三个工具一起使此博客更加有趣! 该图说明了关 ...

  4. 《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务

    文章目录 二.高级篇(大厂进阶) 5.Docker-compose容器编排 5.1是什么 5.2能干嘛 5.3去哪下 5.4 Compose核心概念 5.5 Compose使用的三个步骤 5.6 Co ...

  5. Docker学习2——Docker高级

    Docker学习2--Docker高级 2.1 Dockerfile解析 2.1.1 Dockfile是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参 ...

  6. Docker学习——docker高级

    Docker高级 前言 一.Docker数据卷 (一)什么是容器数据卷 使用数据卷 (二)实践-安装Mysql (三)具名挂载和匿名挂载 (四)数据卷-DockerFile (五).数据卷容器 二.D ...

  7. Docker基础30--6.4 Docker三剑客之Swarm

    6.4 Docker三剑客之Swarm Docker Swarm是Docker官方三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案.使用它,用户可以将多个 ...

  8. 狂神说Java系列视频教程之docker(记录到swarm安装)

    狂神说B站视频地址–基础 狂神说B站视频地址–进阶 安装docker #1.卸载旧版本yum remove docker \docker-client \docker-client-latest \d ...

  9. 云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)

      前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心.Docker实战.DockerCompose.Harbor以及Swar ...

最新文章

  1. 效果很好的asp.net的数据库访问模型(优化,封装一体化)
  2. 利用OnAnimatorove函数控制人物的移动
  3. 【Linux Deploy】一、Linux Deploy安装配置使用教程
  4. 乌班图14.04安装搜狗输入法
  5. SQL Server 2005之PIVOT/UNPIVOT行列转换
  6. mybatis maven 代码生成器(mysql)
  7. Memcached FAQ(2) 集群架构方面的问题
  8. tensorflow学习之(十一)RNN+LSTM神经网络的构造
  9. 大数据 | 从阿里核心场景看实时数仓的发展趋势
  10. 如何搭建监狱高清1080P OTT/IPTV电视系统
  11. 致远项目管理SPM系统之合同基本信息管理
  12. Azul开源Zing Jvm
  13. 【JS】【19】使用Jquery判断是电脑或手机或微信浏览器访问
  14. “鞋王”百丽国际牵手美云智数固筑业权一体管理 以数字化共创鞋履产业新未来
  15. Html+Tomcat+Http协议介绍
  16. 皮皮安学习Java第八天
  17. DSP、SSP、RTB、ADX(概念通俗解释)
  18. 2020年有用的机器学习工具
  19. 推荐打工人用的数据恢复软件:EasyRecovery
  20. 智慧环卫管理系统解决方案(垃圾分类)

热门文章

  1. day10作业-韩明琰
  2. 区分主谓宾补和主谓宾宾
  3. 配置apache和nginx的tomcat负载均衡
  4. android 判断文件是否存在
  5. openwrt ath10k 相关汇总
  6. JPA 中对象 set 属性时自动保存
  7. Redis集群使用指南
  8. JAVA生成短8位UUID
  9. 四步把流量提升淘宝店铺流量
  10. 微信公众平台-测试号网页授权-获取openid方法