docker compose的用法

news2024/9/25 13:19:49

目录

 一、Docker-Compose介绍

1.1 Docker-Compose的概述

1.2 Docker-Compose 用来实现Docker容器快速编排

1.3 Docker-compose模板文件简介

二、YAML简介

2.1 YAML的概述

2.2 YAML的基本语法规则

2.3 YAML支持的数据架构 

三、配置内部常用字段 

四、Docker-compose 常用命令

五、compose部署

5.1 准备依赖文件

5.2 编写配置文件 docker-compose.yml  

5.3 浏览器访问:http://192.168.19.101:1216


 一、Docker-Compose介绍

1.1 Docker-Compose的概述

  • Docker-Compose 项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
  • Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的API来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用Compose 来进行编排管理。
  • Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器(container)。
Docker-Compose运行目录下的所有文件(docker-compose.yml,
extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。
 
一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
 
一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,
因此需要借助其它工具实现服务发现及负载均衡,比如Consul。
  • Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
  • 使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
  • Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。 

1.2 Docker-Compose 用来实现Docker容器快速编排

  • 通过 Docker-Compose ,不需要使用shell脚本来启动容器,而使用 YAML 文件来配置应用程序需要的所有服务,然后使用一个命令,根据 YAML 的文件配置创建并启动所有服务。

1.3 Docker-compose模板文件简介

  • Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • Compose模板文件是一个定义服务、网络和卷的YAML文件。
  • Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。
  • Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

二、YAML简介

2.1 YAML的概述

  • YAML是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。
  • 类似 json数据描述语言,语法比 json简单的很多。
  • YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [ ] 括起来, hash 用花括号 { }括起来。

2.2 YAML的基本语法规则

  • 不支持制表符 tab 键缩进,只能使用空格缩进
  • 通常开头缩进2个空格
  • 字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
  • 用#号注释
  • 如果包含特殊字符用单引号 ‘’ 引起来作为普通字符;如果用双引号“”表示特殊字符本身的意思
  • 布尔值必须用引号 “” 括起来
  • 区分大小写

2.3 YAML支持的数据架构 

对象: 键值对的字典
animal: pets
 
数组: 一组按次序排列的列表
- cat
- dog
- goldfish
 
布尔值
debug: "true"
debug: "false"
 
 
#Yaml示例
languages:  #序列的映射
  - Java
  - Golang
  - Python
websites:   #映射的映射
  Baidu: www.baidu.com
  Wangyi: www.163.com
  Souhu: www.souhu.com
  
 
#或者 
languages: ["Java","Golong","Python"]
websites: 
  Baidu: 
    www.baidu.com
  Wangyi: 
    www.163.com
  Souhu: 
    www.souhu.com
 
 
#Json格式
{
  languages: [
    'Java',
    'Golong',
    'Python',
  ],
  websites: [
    Baidu: 'www.baidu.com',
    Wangyi: 'www.163.com',
    Souhu: 'www.souhu.com',
  ]
}

三、配置内部常用字段 

字段描述
build指定Dockerfile文件名(要指定的Dockerfile文件需要在build标签的子级标签中用dockerfile标签指定)
dockerfile构建镜像上下文路径
context可以是dockerfile路径,或者是执行git 仓库的url地址
image指定镜像(已存在)
command执行命令,会覆盖容器启动后默认执行的命令(会覆盖Dockerfile的CMD指令)
container_name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy指定部署和运行服务相关配置,只能在Swarm模式使用
environment添加环境变量
networks加入网络,引用顶级networks下条目
network-mode设置容器的网络模式
ports暴露容器端口,与-p 相同,但是端口不能低于60
volumes挂载一个宿主机目录或命令卷到容器,命名卷要在顶级volumes 定义卷名称
volumes_from从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,(仅版本‘2’支持)
hostnamehostname
hostname在容器内设置内核参数
links连接到另一个容器,- 服务名称[ : ]
privileged用来给容器root权限,注意是不安全的,true
restart  重启策略,定义是否重启容器;1.no,默认策略,在容器退出时不重启容器。2.on-failure,在容器非正常退出时(退出状态非0),才会重启容器。3.on-failure:3,在容器非正常退出时重启容器,最多重启3次。4.always,在容器退出时总是重启容器。5.unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
depends_on此标签用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器php:depends_on:- apache- mysql

四、Docker-compose 常用命令

 

字段描述
build重新构建服务
ps列出容器
up创建和启动容器
exec在容器里面执行命令
scale指定一个服务容器启动数量
top显示正在运行的容器进程
logs查看服务容器的输出
down删除容器、网络、数据卷和镜像
stop/start/restart停止/启动/重启服务

 

五、compose部署

  • 环境部署所有主机安装docker环境(内容为docker基础)
  • Docker-Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose。

5.1 准备依赖文件

mkdir -p /opt/compose_nginx/nginx
cd /opt/compose_nginx/nginx/
rz
ls
docker-compose  nginx-1.12.2.tar.gz
 
chmod +x docker-compose 
cp docker-compose /usr/local/bin
docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
 
 
#编写dockerfile
vim Dockerfile
 
yum install -y tree
tree
 
FROM centos:7
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
RUN make -j 4 && make install
RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#ENV PATH /usr/local/nginx/sbin/:PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
CMD ["/usr/local/nginx/sbin/nginx"]

 

 

 

5.2 编写配置文件 docker-compose.yml  

 

vim /opt/compose_nginx/docker-compose.yml
version: '3'    1 2 3
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lnmp:
   driver: bridge
   ipam:
     config:
	   - subnet: 172.18.0.0/16


cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d

docker ps -a
cd /opt/compose_nginx/
docker-compose ps					#必须在docker-compose.yml所在目录执行此命令

 

-f--file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p--project-name NAME :指定项目名称,默认使用目录名称
-d 在后台运行

 

 

 

 

 

 

5.3 浏览器访问:http://192.168.19.101:1216

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见的软件测试用例设计方法有哪些?

常见的软件测试用例设计方法,个人认为主要是下面这6种: 1)流程图法(也叫场景法) 2)等价类划分法 3)边界值分析 4)判定表 5)正交法 6)错误推测法 这6种常见方法中,我分别按照定义、应用场景、使用步骤、案例讲解这4个部…

Vue-13.创建完整的Vue项目(vue+vue-cli+js)-1

前言 之前写了命令创建Vue项目,但是事实上我们可以直接用编译器直接创建项目,这里我使用webstorm(因为我是前后端兼修的所以我习惯使用Idea家族的编译器) 只写前端的推荐用VsCode前后端都写的推荐用webstorm 新建项目 项目初始…

记录node 版本对应的 node-sass 版本号

当我们在项目中使用 node-sass 时,电脑的 node版本号一定要与 node-sass 版本号对应,不对应时下载就会报错 一、官方文档地址 https://www.npmjs.com/package/node-sass 二、对应版本表格

一张图看懂 USDT三种类型地址 Omni、ERC20、TRC20的区别

USDT是当前实用最广泛,市值最高的稳定币,它是中心化的公司Tether发行的。在今年的4月17日之前,市场上存在着2种不同类型的USDT。4月17日又多了一种波场TRC20协议发行的USDT,它们各自有什么区别呢?哪个转账最快到账?哪…

Android kotlin 跳转手机热点开关页面和判断热点是否打开

Android kotlin 跳转手机热点开关页面和判断热点是否打开 判断热点是否打开跳转手机热点开关页面顺带介绍一些其他常用的设置页面跳转 其他热点的一些相关知识Local-only hotspot 参考 判断热点是否打开 网上方法比较多,我这边使用了通过WifiManager 拿反射的getWi…

【C#学习笔记】委托和事件

文章目录 委托委托的定义委托实例化委托的调用多播委托 为什么使用委托?官方委托泛型方法和泛型委托 事件为什么要有事件?事件和委托的区别: 题外话——委托与观察者模式 委托 在 .NET 中委托提供后期绑定机制。 后期绑定意味着调用方在你所…

问题解决:Failed to start sshd.service: Unit is masked.

centos7.6 ssh突然不能用了 也启动不了 错误如下: 解决方式: systemctl unmask sshd systemctl start sshd

day 34 | ● 62.不同路径 ● 63. 不同路径 II

62.不同路径 递归公式为上 左 func uniquePaths(m int, n int) int {dp : make([][]int, m)for i : 0; i < m; i{tmp : make([]int, n)dp[i] tmpdp[i][0] 1}for i : 0; i < n; i{dp[0][i] 1}for i : 1; i < m; i{for j : 1; j < n; j{dp[i][j] dp[i - 1][j] …

倒计时动效

1. 效果 2. html <div class"count"><span>3</span><span>2</span><span>1</span> </div>3. css body {width: 100vw;height: 100vh;overflow: hidden;display: flex;justify-content: center;align-items: cente…

数据存储效率对决:Redis String vs. Hash性能大比拼,哪个更适合你?

一、Redis的数据类型 1、常规类型 1&#xff09;String&#xff08;字符串&#xff09;&#xff1a;最基本的数据结构&#xff0c;可以存储任何类型的字符串、数字或二进制数据。 2&#xff09;Hash&#xff08;哈希表&#xff09;&#xff1a;类似于关联数组或字典&#xff…

售后服务管理软件怎么选择?售后服务管理系统有什么用?

随着企业信息化发展&#xff0c;越来越多的企业纷纷选择售后服务管理软件来服务客户和进行内部人员管理。借助这款软件&#xff0c;企业能够高效地满足客户提出的需求&#xff0c;并提高客户对售后服务的满意度。售后服务通常涉及客户、客服、维修师傅和服务管理人员等各种角色…

[JavaWeb]【八】web后端开发-Mybatis

目录 一 介绍 二 Mybatis的入门 2.1 快速入门 2.1.1 准备SpringBoot工程 2.1.2 创建数据库mybatis以及对应库表user 2.1.3 创建User实体类 2.1.4 配置application.properties数据库连接信息 2.1.5 编写sql语句&#xff08;注解方式&#xff09; 2.1.6 测试运行 2.1.7 配…

Unity封装Debug.Log导致代码定位失准的解决办法

笔者通过翻资料&#xff0c;实现了这样的一个编辑器&#xff0c;虽然无法彻底消除指定的日志信息 但是可以实现”双击日志不跳转到这里的任意一个文件“ using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;namespace AirEditor {publ…

浅谈java自定义中类两个对象的比较

目录 实现比较两个对象是否相同 1.前置代码 1.学生类 2.示例 3.输出 4.原因 2.那么我们要怎么做呢? 1.对Student类中重新实现quals方法(即对equals方法重写) 2.完整代码如下: 3.具体操作 4.演示 1.示例 2.输出 3.原因 实现比较两个对象的大小 第一种: 用…

智慧小区建设方案【47页PPT】

导读&#xff1a;原文《智慧小区建设方案【47页PPT】》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 部分页面&#xff1a; 喜欢文章&#xff0c;您可以关注评论转…

实现图片的动态连续展示 JAVA

目录 1、前言&#xff1a;2、图片的展示以及自动关闭&#xff1a;3、动画的连续展示&#xff1a; 1、前言&#xff1a; 要实现动画的流畅展示需要在能展示图片的基础上对图片进行关闭&#xff0c;再切换下一张图片&#xff0c;这要关闭窗口&#xff0c;与延时函数以及while函数…

从SVG到Canvas:选择最适合你的Web图形技术

SVG 和 Canvas 都是可以在 Web 浏览器中绘制图形的技术。 众所周知&#xff0c; icon 通常使用 svg&#xff08;如 iconfont&#xff09;&#xff0c;而交互式游戏采用 Canvas。二者具体的区别是什么&#xff1f;该如何选择&#xff1f; 声明式还是命令式&#xff1f;绘制的图形…

C语言:库函数atoi及其模拟实现

i&#xff1a; atof是C语言标准库中的一个函数&#xff0c;用于将字符串转换为对应的浮点数/整形数。 函数接受一个参数str&#xff0c;该参数是一个指向以null结尾的字符串的指针。atof函数会尝试将这个字符串转换为一个浮点数&#xff0c;并返回转换后的结果。 要注意的是&a…

【3D激光SLAM】LOAM源代码解析--laserOdometry.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 写在前面 本系列文章将对LOAM源代码进行讲解&#xff0c;在讲解过程中&#xff0c;涉及到论文中提到的部分&#xff0c;会结合论文以及我自己的理解进行解…