7.Docker-compose

news2024/12/23 10:37:36

文章目录

  • Docker-compose
    • 概念
    • Docker-compose部署
    • YAML文件格式和编写注意事项
      • 注意
      • 数据结构
        • 对象映射
        • 序列属组
        • 布尔值
        • 序列的映射
        • 映射的映射
        • JSON格式
        • 文本换行
        • 锚点和引用
    • Docker compose配置常用字段
    • docker compose常用命令
    • Docker Compose 文件结构
      • docker compose部署apache
      • docker compose 部署LNMP

Docker-compose

概念

  • Docker-Compose项目是基于Python开发的Docker官方开源项目,负责实现对Docker容器集群的快速编排。

  • Compose是单机编排容器集群或者是分布式服务容器的应用工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

  • Docker-Compose是一个容器编排工具。

  • 通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker-compose up命令就像执行脚本一样,一个一个的安装并部署容器。

  • Docker compose 文件通常包含一个或多个服务,每个服务都由一个或多个容器组成。服条定义了容器应该执行的任务,以及容器之间的统赖关系。

  • Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器(container)。

  • Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。

  • 一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

  • Docker-compose总结

    • 实现单机容器集群编排管理(使用YAML模板文件定义多个应用容器的启动参数和依赖关系,并使用Docker-compose来根据模板文件的配置来启动容器)
  • 三大概念(包含关系)

    • 项目/工程
      • 默认使用目录名做项目名
      • 支持 -p 或 --project-name 来指定项目名
      • 在项目的目录中会包含一个docker-compose.yml 模板文件此文件为项目的默认配置文件(支持使用 -f 或 COMPOSE_FILE 来指定项目的配置模板文件)
      • 在配置文件里面可以定义一个或多个服务,每个服务可以包含容器的名称、镜像、端口映射、依赖关系、环境变量、挂载点等配置参数
    • 服务
    • 容器

Docker-compose部署

##Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose
 
##下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose


##安装
chmod +x /opt/docker-compose

mv /opt/docker-compose /usr/local/bin/docker-compose

##查看版本
docker-compose --version
##能查看到则,安装成功

在这里插入图片描述

YAML文件格式和编写注意事项

注意

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。

类似于 json 数据描述语言,语法比 json 简单的很多。

YAML 数据结构通过缩进来表示,
连续的项目通过减号来表示,
键值对用冒号分隔,
数组用中括号 [] 括起来, 
hash 用花括号 {} 括起来。
使用 YAML 时需要注意下面事项:

大小写敏感

通过缩进表示层级关系

不支持制表符 tab 键缩进,只能使用空格缩进

缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

用 # 号注释

符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 - 

如果包含特殊字符用单引号('')引起来会作为普通字符串处理,
双引号(""): 特殊字符作为本身想表示的意思

数据结构

对象映射

对象映射: 键值对的字典
animal: dogs

序列属组

序列属组: 一组按次序排列的列表


##竖列表
pets:
- Cat
- Dog
- Pig

##横列表
pets: ["cat", "dog", "pig"]

布尔值

##布尔值


debug: true
debug: false

序列的映射

##序列的映射

pets:
 -  Cat
 -  Dog
 -  Pig

映射的映射

##映射的映射

websetting:
  cpu: 2
  memory: 1024M
  swap: 2048M
  disk: 60G

JSON格式

##JSON格式

{
    pets: [
        "cat",
        "dog",
        "pig"
    ],
    websetting: {
        cpu: ['2'],
        memory: ['1024M'],
        disk: ['60G']
    }
}

文本换行

# 注意“|”与文本之间须另起一行
# 使用|标注的文本内容缩进表示的块,可以保留块中已有的回车换行


value: |
  hello
  world!
  
  
# 输出结果
# hello 换行 world!!
# 注意“>”与文本之间的空格
# 使用>标注的文本内容缩进表示的块,将块中回车替换为空格最终连接成一行


value: > hello
world!



# 输出结果
# hello 空格 world!

锚点和引用

# 复制代码注意*引用部分不能追加内容
# 使用&定义数据锚点,即要复制的数据
# 使用*引用锚点数据,即数据的复制目的地


name: &a yaml
book: *a
books:
   - java
   - *a
   - python


# 输出结果
book: yaml
books:[java, yaml, python]

Docker compose配置常用字段

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

docker compose常用命令

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

Docker Compose 文件结构

/opt/compose_nginx/
├── docker-compose.yml				#创建模板脚本
├── nginx
│?? ├── Dockerfile					#创建容器脚本
│?? ├── nginx-1.12.0.tar.gz			#复制源码包
│?? └── run.sh						#启动服务脚本
└── wwwroot
    └── index.html					#站点网页

docker compose部署apache

mkdir -p /usr/local/compose/docker-compose-apache

cd /usr/local/compose/docker-compose-apache

vim docker-compose.yml
version: '3'

services:
  apache:
      image: httpd:latest
      container_name: httpd-ggl
      ports:
      -  1314:80
      volumes:
      -  ./html:/usr/local/apache2/htdocs
      networks:
        lamp:
          ipv4_address: 172.20.0.10

networks:
  lamp:
    driver: bridge
    ipam:
       config:
       -  subnet: 172.20.0.0/16

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker compose 部署LNMP

mkdir /usr/local/compose/docker-compose-lnmp/

cd /usr/local/compose/docker-compose-lnmp/


##在目录中准备  Dockerfile 创建LNMP的相关的文件

vim docker-compose.yml
version: '3'

services:
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    container_name: nginx
    ports:
    -  80:80
    volumes:
    -  ./nginx/html:/usr/local/nginx/html
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
        
  mysql:
    image: mysql:centos7
    container_name: mysql
    ports:
    -  3306:3306
    volumes:
    -  db-data:/usr/local/mysql
    networks:
      lnmp:
        ipv4_address: 172.18.0.20
        
  php:
    image: php:centos7
    container_name: php
    ports:
    -  9000:9000
    volumes:
    -  db-data:/usr/local/mysql
    -  ./nginx/html:/usr/local/nginx/html
    networks:
      lnmp:
        ipv4_address: 172.18.0.30
    depends_on:
    -  nginx
    -  mysql
      



networks:
  lnmp:
    driver: bridge
    ipam:
      config:
      -  subnet: 172.18.0.0/16

volumes:
  db-data:
##运行docker-compose

##在   docker-compose.yml   的文件的目录中运行

docker-compose up -d

docker-compose ps

在这里插入图片描述
在这里插入图片描述

##验证数据库是否连接成功

vim /usr/local/compose/docker-compose-lnmp/nginx/html/index.php


<?php
$link=mysqli_connect('192.168.242.66','admin','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

在这里插入图片描述

##进入到容器中

docker exec -it mysql bash

##修改mysql 的登录密码

mysqladmin -u root -p password "123"


mysql -uroot -p123

create database word;
#创建一个数据库

grant all ON word.* to 'admin'@'%' identified by 'admin123';

#把数据库里面所有表的权限授予给admin,并设置密码admin123

flush privileges;
#刷新数据库

在这里插入图片描述

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

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

相关文章

常见的正则表达式

目录 问题现象&#xff1a; 问题分析&#xff1a; 解决方法&#xff1a; 拓展&#xff1a; 1、手机号或座机&#xff1a; 2、邮箱&#xff1a; 3、中文&#xff1a; 4、数字&#xff1a; 5、英文&#xff1a; 6、组合&#xff1a; 问题现象&#xff1a; 今天在项目中&…

使用预训练的2D扩散模型改进3D成像

扩散模型已经成为一种新的生成高质量样本的生成模型&#xff0c;也被作为有效的逆问题求解器。然而&#xff0c;由于生成过程仍然处于相同的高维&#xff08;即与数据维相同&#xff09;空间中&#xff0c;极高的内存和计算成本导致模型尚未扩展到3D逆问题。在本文中&#xff0…

【用Vscode实现简单的python爬虫】从安装到配置环境变量到简单爬虫以及python中pip和request,bs4安装

第一步&#xff1a;安装python包 可以默认&#xff0c;也可以选择自己想要安装的路径 第二步&#xff1a;配置python环境变量&#xff0c;找到我的电脑->属性->高级 然后将刚刚安装的路径配置到path路径下&#xff1a; 然后cmd 运行 输入python命令&#xff0c;如果出现…

mongodb本地连接失败解决方案

启动项目时&#xff0c;本地连接mongodb失败 这个是本地服务没有启动 其实我也挺奇怪&#xff0c;我明明设置的是自动启动 *解决方案一 1.我的电脑-> 管理 2. 服务和应用管理-> 服务 3. 找到mongoDB Server 右键启动 *解决方案二 1. 找到mongodb安装目录&#xff0c…

使用 Logstash 及 enrich processor 实现数据丰富自动化

在我之前的文章&#xff1a; Elasticsearch&#xff1a;enrich processor &#xff08;7.5发行版新功能&#xff09; Elasticsearch&#xff1a;使用 Elasticsearch ingest pipeline 丰富数据 通过上面的两篇文章的介绍&#xff0c;我们应该充分掌握了如何使用 enrich proce…

【DDD】业务领域定义

文章目录 前言一、什么是业务子领域&#xff1f;二、子领域的类型有哪些&#xff1f;2.1、核心子领域2.2、通用子领域2.3、支撑子领域 三、子领域差异对比3.1、竞争优势比较3.2、复杂性比较3.3、易变性比较3.4、实时策略比较 总结 前言 一个业务领域是一个公司的主要活动领域的…

python:基于GeoPandas和GeoViews库将GEDI激光高程数据映射到交互式地图

作者:CSDN @ _养乐多_ 本文将介绍 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据某数据点波形数据提取,并绘制图表,添加其他图表元素并使图表具有交互性。 在本文中,我们将探索如何打开、读取和处理GEDI数据,并利用地理信息处理库GeoPandas和地理空间数…

Postman和Jmeter做接口测试的区别

1. 用例组织方式 Jmeter的组织方式相对比较扁平&#xff0c;它首先没有WorkSpace的概念&#xff0c;直接是TestPlan&#xff0c;TestPlan下创建的Threads Group就相当于TestCase&#xff0c;并没有TestSuite的层级。 Postman功能上更简单&#xff0c;组织方式也更轻量级&#…

【枚举】CF978 D

Problem - D - Codeforces 题意&#xff1a; 思路&#xff1a; 所谓枚举&#xff0c;就是要利用隐含条件找出不明显的小数据&#xff0c;即状态数很少 这道题中&#xff0c;因为是等差数列&#xff0c;且每个数只能被1或-1一次 确定了前两个数和公差之后&#xff0c;数列就…

sqlite触发器1

SQLite 的触发器&#xff08;Trigger&#xff09;可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发&#xff0c;或在一个或多个指定表的列发生更新时触发。 SQLite 只支持 FOR EACH ROW 触发器&#xff08;Trigger&#xff09;&#xff0c;没有 FOR EACH STATEM…

力扣15. 三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…

C# 存在重复元素 II

219 存在重复元素 II 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a…

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…

通过电商项目,详解抓包到接口测试,附图片验证码 +cookie 问题处理!

通常来说&#xff0c;进行接口测试&#xff0c;开发会提供对应的接口文档给到测试&#xff0c;但也有例外。开发无接口文档&#xff0c;但领导又需要你对刚开发的软件&#xff0c;进行接口测试、接口自动化测试、甚至是性能测试。这个时候作为专业测试应该怎么办&#xff1f; …

CPU渲染or GPU渲染,你选对了吗?看完这六点就懂了!

在进行动画或效果图渲染时&#xff0c;选择适合的渲染方式对于项目的速度和质量至关重要。CPU渲染和GPU渲染作为两种主要的渲染方式&#xff0c;哪一种更适合你现在的情况&#xff1f;接下来我将从以下六个方面带大家深入了解&#xff0c;看完就知道怎么选了。 1.渲染原理 CPU…

微信内测朋友圈可以置顶了!

今天一大早 #微信内测朋友圈可以置顶了# 冲上热搜第一 微信朋友圈是微信用户分享生活点滴、展示自我风采的重要平台&#xff0c;也是用户与好友互动、交流感情的重要渠道。 然而&#xff0c;由于朋友圈的时间线机制&#xff0c;用户发布的内容往往会随着时间推移而淹没在海量…

【开发环境】Windows下搭建TVM编译器

关于搭建TVM编译器的官方文档&#xff1a;Install from Source — tvm 0.14.dev0 documentation (apache.org) 1. 安装Anaconda 首先我们需要安装Anaconda&#xff0c;因为其中包含着我们所需要的各类依赖&#xff1a; 进入Anaconda官网https://www.anaconda.com/products/d…

element中el-input组件限制输入条件(数字、特殊字符)

1、只能输入纯数字 <el-input v-model"aaa" type"text" input"(v)>(aaav.replace(/[^\d]/g,))" /> 2、只能输入纯数字和小数&#xff08;比如&#xff1a;6.66&#xff09; <el-input v-model"aaa" type"text&quo…

Rocky Linux 8.4在Tesla P100服务器里的部署及显卡cudnn安装-极度精简

安装Rocky linux教程 https://developer.aliyun.com/article/1074889 注意事项 Tesla P100服务器&#xff0c;按Delete进入bios,设置Daul模式&#xff0c;第一选项选UEFI hard disk(用驱动盘选这个)&#xff0c;usb的就选UEFI usb 安装rocky linux时&#xff0c;这两项默认&…

搭扑克牌塔题解

输入样例&#xff1a; 5 3 14 15 24 1输出样例&#xff1a; 1 2 1 3 0思路分析&#xff1a; 首先搭每个金字塔所需的扑克牌数并不会由n决定&#xff0c;所以我首先想到打表。抱着信心尝试一番之后 既然文件太大提交不了&#xff0c;那我们就放弃:&#xff0c;怎么可能&…