docker-compose详解
1 安装:
官方:
curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
或者使用包管理工具:
apt-get install docker-compose
2 使用场景
docker-compose用来单机上编排容器(定义和运行多个容器,使容器能互通)
Eg:前端和后端部署在一台机器上,现在直接通过编写docker-compose文件对多个服务(可定义依赖,按顺序启动服务)同时进行启动/停止/更新
注:
docker-compose将所管理的容器分为3层结构:project service container
docker-compose.yml组成一个project,project里包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service可包括同一个镜像的多个容器实例。
即 project 包含 service ,service 包含 container
3 编写docker-compose.yml
官网地址:https://docs.docker.com/compose/compose-file/
version: '3'
services:back:image: backService:1.0container_name: backenvironment:- name=tom- DB_PATH=jdbc:sqlite:/data/ns.dbrestart: alwaysprivileged: trueports:- "9000:9000"networks:- "net"volumes:- "/root/k3s.kube.config:/k3s.kube.config"- "/root/data:/data"- "/etc/network/interfaces:/etc/network/interfaces"front:image: front:1.0container_name: frontrestart: alwaysports:- "10087:80"networks:- "net"volumes:- "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:net:driver: bridge
version:指定 docker-compose.yml 文件的写法格式
services:多个容器集合environment:环境变量配置,可以用数组或字典两种方式
environment:RACK_ENV: "development"SHOW: "ture"
-------------------------
environment:- RACK_ENV="development"- SHOW="ture"
image:指定服务所使用的镜像
version: '2'
services:redis:image: redis:alpine
expose:定义容器用到的端口(一般用来标识镜像使用的端口,方便用ports映射)
expose:- "3000"- "8000"
ports:定义宿主机端口和容器端口的映射,可使用宿主机IP+宿主机端口进行访问 宿主机端口:容器端口
ports: # 暴露端口信息 - "宿主机端口:容器暴露端口"
- "5000"
- "8081:8080"
注:仅指定容器端口时,宿主机将会随机选择端口
volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射 宿主机路径:容器路径
volumes:- "/var/lib/mysql"- "hostPath:containerPath"- "root/configs:/etc/configs"
depend_on: 规定service加载顺序,例如数据库服务需要在后台服务前运行
extra_hosts:类似于docker里的--add-host参数 配置DNS域名解析(域名和IP的映射)
extra_hosts:- "googledns:8.8.8.8"- "dockerhub:52.1.157.61"
相当于在容器种的/etc/hosts文件里增加
8.8.8.8 googledns
52.1.157.61 dockerhub
restart: always :配置重启,docker每次启动时会启动该服务
restart: always
privileged: true :开启特权模式
privileged: true
user: root :指定容器运行的用户名
user: root
links:将指定容器连接到当前连接,可以设置别名,已废弃,推荐使用networks
networks:
可参考:https://www.cnblogs.com/jsonhc/p/7823286.html
version: '3'
services:
front:
image: front
container_name: front
depends_on:
- php
ports:
- "80:80"
networks:
- "net1"
volumes:
- "/www:/usr/local/nginx/html"
back:
image: back
container_name:back
expose:
- "9000"
networks:
- "net1"
volumes:
- "/www:/usr/local/nginx/html"networks:
net1:
driver: bridge
front里可以直接用back替换IP访问back
logging:日志服务
driver:默认json-file,可选syslog
logging:driver: syslogoptions:syslog-address: "tcp://192.168.0.42:123"
network_mode:设置网络模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信
host:和宿主机共享网络,比如service是8081端口,无需配置ports,直接可以用主机IP:8081访问
cap_add cap_drop:赋予/删除 容器某些能力
可运行 man 7 capabilities 查看所有能力
build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 路径
注:如果指定build同时也指定image,那么会从build里构建,镜像的名字和tag将取image指定的
build: .
image: webapp:tag
command:覆盖容器启动后默认执行的命令
command: bundle exec thin -p 3000
----------------------------------
command: [bundle,exec,thin,-p,3000]
4 docker-compose命令:
官网地址:https://docs.docker.com/compose/reference/overview/
注意:
以下都需要在docker-compose.yml所在目录下执行,且名字就是默认的docker-compose.yml,否则需要加上 -f yml地址
Eg: docker-compose -f /usr/docker/docker-compose1.yml ps
* 表示常用
* docker-compose pull:拉取服务里定义的镜像
* docker-compose ps :列出project所有运行容器(容器名 = 目录名_service_index index表示容器序数,从1开始)
Eg:
docker-compose build:构建/重新构建所有镜像
当某个service的Dockerfile改变时,即镜像发生改变需要重新生成时,如果仅仅是docker-compose.yml改变,只需要up重新启动project即可
docker-compose start [serviceName]:启动已存在但停止的所有service
(可选)serviceName:表示启动某一个service
* docker-compose up -d(相当于 build + start ) :构建(容器)并启动(容器)整个project的所有service
-d:后台进程
--scale:指定服务运行的容器个数(如果服务有对外的端口就不能指定多个容器,因为端口已经被占用) Eg:docker-compose up -d --scale web=1 --scale redis=2
docker-compose stop [serviceName]:停止运行的service
(可选)serviceName:表示停止某一个service
docker-compose rm -f [serviceName]:删除已停止的所有service
(可选)serviceName:表示删除已停止某一个service(可以用docker-compose up重新构建service)
-f :删除不在询问
* docker-compose down -v(相当于 stop + rm ):停止并移除整个project的所有services
-v :删除挂载卷和volunme的链接
* docker-compose logs [serviceName]:查看服务内所有容器日志输出,
加上serviceName表示输出某一个service的日志
-f:实时输出日志
docker-compose run service command:在某个服务上运行命令
Eg:docker-compose run web ping www.baidu.com
* docker-compose exec [serviceName] sh:进入到某个容器
--index:2 :当服务内有多个容器时,需要指定第几个,默认是第一个 Eg:docker-compose exec --index=2 web sh
docker-compose restart [serviceName]: 重启服务
docker-compose config:验证和查看compose文件
docker-compose images:列出所用的镜像
docker-cpmpose scale:设置服务个数 Eg:docker-compose scale web=2 worker=3
docker-compose pause [serviceName]:暂停服务
docker-compose unpause [serviceName]:恢复服务
常见流程:
启动:创建docker-compose.yaml -> docker-compose pull -> docker-compose up -d
更新:docker-compose down -v -> docker-compose pull -> docker-compose up -d
docker-compose详解相关推荐
- docker compose详解
菜鸟教程参考链接:https://www.runoob.com/docker/docker-compose.html 官网参考地址:https://docs.docker.com/compose/ 运 ...
- 图形化管理工具Portaniner安 以及 Docker镜像详解(三)
文章目录 图形化管理工具Portaniner安装 Docker镜像详解 1 什么是镜像 2 Docker镜像加载原理 3 分层理解 提交镜像 常用容器部署 Nginx部署 图形化管理工具Portani ...
- 虚拟化技术之docker技术详解
文章目录 虚拟化技术之docker技术详解 关于作者 作者介绍 前言 虚拟化技术概述及简介 一 .什么是虚拟化技术? 二.常见的虚拟化技术有哪些? 2.1 KVM 虚拟化技术概念 2.2 ESXI 虚 ...
- Docker全面详解(二)
3. run运行流程图 4. 底层原理 4.1. Docker是怎么工作的 4.2. Docker为什么比VM快? 5. Docker的常用命令(重) 5.1. 帮助命令 5.2. 镜像命令(基础) ...
- Docker网络详解——原理篇
前言 当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完 ...
- Docker入门详解
Docker详解 文章目录 一.Docker简介 1.1 Docker发展史 1.2 Docker的优点 1.3 传统虚拟化与容器的区别 1.3 Docker结构 二.Docker底层技术 2.1 N ...
- Docker网络资源详解 ---(四种网络模式)
文章目录 前言 一:Dcker网络资源详解 简单云平台生态环境图 普通单节点 桥接图 1.1:网络资源详解:Docker0网卡与四种网络模式 二 . Docker0网卡的解释 1. host模式 2. ...
- docker inspect 详解
一.功能介绍 docker inspect 会以 json 格式得到 docker 镜像/容器的元数据. 如下,查看mysql镜像的完整元数据: docker inspect mysql:5.7 [{ ...
- docker pull 详解
docker pull 用于从镜像仓库中拉取或更新指定镜像,用法如:docker pull centos ,默认是从 Docker Hub 中拉取镜像 在拉取镜像前,我们可以先配置 docker 加速 ...
- Python3 - Docker基础详解(三)
文章目录 1. Dockerfile的基本用法 2. Docker私有仓库 2.1 Docker Hub 2.2 注册 2.3 登录 2.4 注销 2.5 拉取镜像 2.6 私有仓库 2.7 在私有仓 ...
最新文章
- 纽约大学Gary Marcus发文指出AlphaZero「被夸大」,强调重视人工智能「先天因素」
- Visual Studio 2005常用插件搜罗
- redis cluster 集群重新启动关闭
- GRE词汇乱序版-夹生的词汇3
- vim中Mapping already in use: LocalLeaderis, mode n错误解决的方法解释
- HYSBZ - 1208 宠物收养所(Splay)
- 储留香:一个智能运维系统就是一个中枢神经系统,我说的!
- linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题
- Android学习---解决Android Graphical Layout 界面效果不显示
- 最雷视频集合贴:优酷啊优酷啊
- 十、基于FPGA的PCIE协议介绍(一)
- AllenNLP框架学习笔记(模型篇之一)
- 工程师笔记 | 嵌入式工程师常用软件
- 卸载并安装谷歌浏览器
- Readyboost技术U 盘变内存,加速电脑(只针对Windows 7和Vista系统)
- 数理统计——AQI预测
- 王道程序员求职宝典 pdf
- 18W快充长续航 魅族魅蓝Note5金色版19日开售
- python pandas 在现有excel中插入新数据
- 基于全球价值链的电子商务整合创新问题研究[ 转]
热门文章
- Web 应用程序——我的心理备忘单
- TransUNet:Transformers Make Strong Encoders for Medical Image Segmentation用于医疗图像分割的transformers编码器详解
- Python实战项目总结
- fastjson中JSONArray和JSONObject
- 2+22+222+2222
- Mysql Yum安装
- SD卡SPI读写模式,基于51单片机的讲解
- 计算机无法检索文件夹,win7系统不能搜索文件夹怎么回事
- 学生信息管理系统——查询学生信息(Java+web综合)
- ANTLR4入门【打造你自己的语法规则】