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. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
  2. R使用glm构建logistic回归模型
  3. 嵌入式驱动开发之2440/2410---硬件看门狗,喂狗
  4. JSP知识点笔记-常用技术方法
  5. 生成式模型:LDA与LSI-SVD分解
  6. php如何直接使用iview,iview安装使用
  7. 日本生物学家登上千元纸钞,中国“疫苗之王”也应该受到尊重!
  8. 面对系统的稳定性、我们如何做好系统稳定性建设?
  9. OpenCV(Open Source Computer Vision Library)简介
  10. 撰写oracle-sql-hint的注意事项
  11. 2021-07-07 https://github.com/pasu/ExamplesforCesium/wiki
  12. python—scipy.stats.multivariate_normal
  13. 写论文时introduction and realted works部分如何写别人的工作,论文写作常用词
  14. f1c200s核心板_F1C200s NS 2009 驱动
  15. HP OMEN品牌机配3090显卡,驱动,CUDA,Cudnn安装过程
  16. 手机数据恢复软件哪个好用?
  17. python numpy 矩阵加减规则 ValueError: operands could not be broadcast together with shapes
  18. [noip2011]铺地毯(carpet)解题报告
  19. Google账户二次验证取消
  20. 在平板电脑与移动3G大爆炸的时代 昔日霸主微软的反击

热门文章

  1. 【Mybatis】分页
  2. 【转载】200多个js技巧代码
  3. 兄弟2260激光打印机硒鼓灯常亮
  4. 【程序员如何买股票 三】 掌握股票交易常见术语
  5. Type-C扩展坞常用料号大全|音视频芯片|cc协议芯片|PD芯片|HUB芯片|网口芯片|音频芯片
  6. 2023电信天翼云高级解决方案架构师考试题库-最新版
  7. 主机/虚拟机/开发板三者互通
  8. 【HDOJ】4210 Su-domino-ku
  9. 小旋风万能蜘蛛池x9.02开心版/站长必备SEO/永久使用/带教程
  10. Android编程权威指南第3版 源代码