docker 高级 compose/swarm
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、下载
- 从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
- 解决容器的依赖,启动先后的问题,以下例子中启动顺序为:
db
,redis
,web
- 注意:不是【完全启动后】才启动,只是启动顺序
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相关推荐
- 云原生时代必须具备的核心技能之Docker高级篇(Swarm)
解决集群问题 k8s 官网地址:https://docs.docker.com/engine/swarm/ 1.Swarm介绍 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若 ...
- couchbase_适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...
couchbase 该博客将说明如何使用Docker创建部署在多个主机上的多容器应用程序. 这将使用Docker Machine,Swarm和Compose实现. 是的,这三个工具一起使这个博客变得更 ...
- 适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...
该博客将说明如何使用Docker创建部署在多个主机上的多容器应用程序. 这将使用Docker Machine,Swarm和Compose实现. 是的,所有这三个工具一起使此博客更加有趣! 该图说明了关 ...
- 《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 ...
- Docker学习2——Docker高级
Docker学习2--Docker高级 2.1 Dockerfile解析 2.1.1 Dockfile是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参 ...
- Docker学习——docker高级
Docker高级 前言 一.Docker数据卷 (一)什么是容器数据卷 使用数据卷 (二)实践-安装Mysql (三)具名挂载和匿名挂载 (四)数据卷-DockerFile (五).数据卷容器 二.D ...
- Docker基础30--6.4 Docker三剑客之Swarm
6.4 Docker三剑客之Swarm Docker Swarm是Docker官方三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案.使用它,用户可以将多个 ...
- 狂神说Java系列视频教程之docker(记录到swarm安装)
狂神说B站视频地址–基础 狂神说B站视频地址–进阶 安装docker #1.卸载旧版本yum remove docker \docker-client \docker-client-latest \d ...
- 云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)
前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心.Docker实战.DockerCompose.Harbor以及Swar ...
最新文章
- 效果很好的asp.net的数据库访问模型(优化,封装一体化)
- 利用OnAnimatorove函数控制人物的移动
- 【Linux Deploy】一、Linux Deploy安装配置使用教程
- 乌班图14.04安装搜狗输入法
- SQL Server 2005之PIVOT/UNPIVOT行列转换
- mybatis maven 代码生成器(mysql)
- Memcached FAQ(2) 集群架构方面的问题
- tensorflow学习之(十一)RNN+LSTM神经网络的构造
- 大数据 | 从阿里核心场景看实时数仓的发展趋势
- 如何搭建监狱高清1080P OTT/IPTV电视系统
- 致远项目管理SPM系统之合同基本信息管理
- Azul开源Zing Jvm
- 【JS】【19】使用Jquery判断是电脑或手机或微信浏览器访问
- “鞋王”百丽国际牵手美云智数固筑业权一体管理 以数字化共创鞋履产业新未来
- Html+Tomcat+Http协议介绍
- 皮皮安学习Java第八天
- DSP、SSP、RTB、ADX(概念通俗解释)
- 2020年有用的机器学习工具
- 推荐打工人用的数据恢复软件:EasyRecovery
- 智慧环卫管理系统解决方案(垃圾分类)