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详解相关推荐

  1. docker compose详解

    菜鸟教程参考链接:https://www.runoob.com/docker/docker-compose.html 官网参考地址:https://docs.docker.com/compose/ 运 ...

  2. 图形化管理工具Portaniner安 以及 Docker镜像详解(三)

    文章目录 图形化管理工具Portaniner安装 Docker镜像详解 1 什么是镜像 2 Docker镜像加载原理 3 分层理解 提交镜像 常用容器部署 Nginx部署 图形化管理工具Portani ...

  3. 虚拟化技术之docker技术详解

    文章目录 虚拟化技术之docker技术详解 关于作者 作者介绍 前言 虚拟化技术概述及简介 一 .什么是虚拟化技术? 二.常见的虚拟化技术有哪些? 2.1 KVM 虚拟化技术概念 2.2 ESXI 虚 ...

  4. Docker全面详解(二)

    3. run运行流程图 4. 底层原理 4.1. Docker是怎么工作的 4.2. Docker为什么比VM快? 5. Docker的常用命令(重) 5.1. 帮助命令 5.2. 镜像命令(基础) ...

  5. Docker网络详解——原理篇

    前言 当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完 ...

  6. Docker入门详解

    Docker详解 文章目录 一.Docker简介 1.1 Docker发展史 1.2 Docker的优点 1.3 传统虚拟化与容器的区别 1.3 Docker结构 二.Docker底层技术 2.1 N ...

  7. Docker网络资源详解 ---(四种网络模式)

    文章目录 前言 一:Dcker网络资源详解 简单云平台生态环境图 普通单节点 桥接图 1.1:网络资源详解:Docker0网卡与四种网络模式 二 . Docker0网卡的解释 1. host模式 2. ...

  8. docker inspect 详解

    一.功能介绍 docker inspect 会以 json 格式得到 docker 镜像/容器的元数据. 如下,查看mysql镜像的完整元数据: docker inspect mysql:5.7 [{ ...

  9. docker pull 详解

    docker pull 用于从镜像仓库中拉取或更新指定镜像,用法如:docker pull centos ,默认是从 Docker Hub 中拉取镜像 在拉取镜像前,我们可以先配置 docker 加速 ...

  10. Python3 - Docker基础详解(三)

    文章目录 1. Dockerfile的基本用法 2. Docker私有仓库 2.1 Docker Hub 2.2 注册 2.3 登录 2.4 注销 2.5 拉取镜像 2.6 私有仓库 2.7 在私有仓 ...

最新文章

  1. 纽约大学Gary Marcus发文指出AlphaZero「被夸大」,强调重视人工智能「先天因素」
  2. Visual Studio 2005常用插件搜罗
  3. redis cluster 集群重新启动关闭
  4. GRE词汇乱序版-夹生的词汇3
  5. vim中Mapping already in use: LocalLeaderis, mode n错误解决的方法解释
  6. HYSBZ - 1208 宠物收养所(Splay)
  7. 储留香:一个智能运维系统就是一个中枢神经系统,我说的!
  8. linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题
  9. Android学习---解决Android Graphical Layout 界面效果不显示
  10. 最雷视频集合贴:优酷啊优酷啊
  11. 十、基于FPGA的PCIE协议介绍(一)
  12. AllenNLP框架学习笔记(模型篇之一)
  13. 工程师笔记 | 嵌入式工程师常用软件
  14. 卸载并安装谷歌浏览器
  15. Readyboost技术U 盘变内存,加速电脑(只针对Windows 7和Vista系统)
  16. 数理统计——AQI预测
  17. 王道程序员求职宝典 pdf
  18. 18W快充长续航 魅族魅蓝Note5金色版19日开售
  19. python pandas 在现有excel中插入新数据
  20. 基于全球价值链的电子商务整合创新问题研究[ 转]

热门文章

  1. Web 应用程序——我的心理备忘单
  2. TransUNet:Transformers Make Strong Encoders for Medical Image Segmentation用于医疗图像分割的transformers编码器详解
  3. Python实战项目总结
  4. fastjson中JSONArray和JSONObject
  5. 2+22+222+2222
  6. Mysql Yum安装
  7. SD卡SPI读写模式,基于51单片机的讲解
  8. 计算机无法检索文件夹,win7系统不能搜索文件夹怎么回事
  9. 学生信息管理系统——查询学生信息(Java+web综合)
  10. ANTLR4入门【打造你自己的语法规则】