【Docker】Docker-compose 单机容器集群编排工具

目录

一.Docker-compose 概述

1.容器编排管理与传统的容器管理的区别

2.docker-compose 作用

3.docker-compose 本质

4.docker-compose 的三大概念

二.YML文件格式及编写注意事项

1.yml文件是什么

2.yml问价使用注意事项

3.yml文件的基本数据结构

三.Docker-compose 配置

1.Docker-Compose 配置常用字段

2.Docker Compose常用命令

3.使用Docker-compose创建LNMP环境,并运行Wordpress网站平台

3.1.配置nginx的Dockerfile文件 

3.2.配置mysql的Dockerfile

3.3.部署php的Dockerfile

3.4.部署docker-compose.yml

3.5.浏览器访问测试


一.Docker-compose 概述

  • 一个Dockerfile模板文件可以定义一个单独的应用容器
  • Docker Compose作为Docker官方产品可以服务编排定义多个容器

1.容器编排管理与传统的容器管理的区别

  • 传统的容器管理

Dockerfile文件 -> 手动执行 docker build 一个个镜像的构建 -> 手动执行 docker run 一个个容器的

                            创建和启动

  • 容器编排管理

Dockerfile文件 -> 在docker-compose.yml配置模板文件里定义容器启动参数和依赖关系

                        -> 执行docker-compose命令指定配置模板文件,根据模板文件的配置一键完成所

                            有镜像的构建和容器的创建启动

2.docker-compose 作用

  • 是一个可以实现在单机上对容器集群编排管理的工具
  • 使用python开发的,能运行docker的平台也都能用docker-compose编排管理容器

3.docker-compose 本质

  • 就是在yaml格式的docker-compose配置模板文件里定义一个或多个服务及其容器的启动参数和依赖关系,并使用docker-compose命令根据配置模板文件中的参数来启动和管理容器

4.docker-compose 的三大概念

  • 项目project
  • 服务service
  • 容器container

项目project -> 包含一个或多个服务service -> 包含容器container的镜像、端口映射、数据卷、环

境变量、依赖关系等启动参数

默认使用项目的目录名作为project的项目名,也支持使用 -p 或 --project-name 选项指定项目名称

项目目录里要包含一个docker-compose配置模板文件,默认为docker-compose.yml,也支持使用

-f 或 --file 选项指定项目的配置模板文件

在配置模板文件里要包含一个或多个服务及其容器的配置,每个服务要包含容器的名称、镜像、映

射端口、数据卷、网络模式、依赖关系等容器的启动参数

二.YML文件格式及编写注意事项

1.yml文件是什么

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

语言,语法比 json 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,

键值对用冒号分隔,数组用中括号 [ ] 括起来, hash 用花括号 { } 括起来

2.yml问价使用注意事项

  • 大小写敏感
  • 通过缩进表示层级关系
  • 只能使用空格缩进不能使用tab键
  • 可以使用井号键进行注释
  • 符号字符都有一个空格 如test:
  •  单引号起来的字符,会被当作普通字符串处理。"#&" 双引号里面如果是特殊字符,就表示本意
  • '$' 表示普通字符串
  • "$" 表示就是$

3.yml文件的基本数据结构

yaml格式文件: 文件名以 .yaml .yml 为后缀,用 空格缩进 表示字段的层级关系

特点:可读性高,易于管理

#一级字段
key1: value1              #一个key只有一个值,值的类型为 纯量
key2: 
- value1                        #一个key有多个值的纵向格式,值的类型为 列表
- value2
key3: ["value1", "value2"]      #一个key有多个值的横向格式,值的类型为 数组
key4:#二级字段subkey1: value1               #用 空格缩进 表示字段的层级关系,同一层字段要靠左对齐subkey2:value2subkey3:                      #key的值也是键值对,值的类型为 对象#三级字段sskey1: value1sskey2: value2

json格式文件:文件名以 .json 为后缀,用 大括号{} 表示字段的层级关系,每层字段除了最后一个

字段都要用逗号 , 结尾

特点:易于编程语言的api接口解析

#一级字段
{"key1": ["value1"],"key2": ["value2", "value3"],"key3": {#二级字段"subkey1": ["value1"],"subkey2": ["value2"],"subkey3": {#三级字段"sskey1": ["value1"],"sskey2": ["value2"]}}
}key1:           值相当于echo "helloworld"helloworldkey2: |         值相当于echo -e "hello\nworld"      #key: |  表示保留文本块中的换行符helloworldkey3: |-        值相当于echo -e "hello\nworld\c"helloworldkey4: |+        值相当于echo -e "hello\nworld\n"helloworldkey5: > hello       值相当于echo  "hello world"    #> 会将文本块中的回车替换为空格worldkey1: &a value1      #定义数据锚点,即定义复制的数据,相当于 a="value1"
key2: *a             #引用锚点数据,值相当于为 echo $a ,  key2: "value1"

三.Docker-compose 配置

1.Docker-Compose 配置常用字段

image使用本地镜像或从仓库拉取镜像创建容器
build使用dockerfile现场构建镜像创建容器
context指定dockerfile文件所在的目录路径
dockerfile指定dockerfile文件名
command设置容器的启动命令,会覆盖镜像中的CMD指令
container_name设置容器名   --name
environment设置环境变量  -e  -env
networks设置容器使用的自定义网络和IP  --ip
network_mode设置容器的网络模式  --network
ports设置容器端口映射  -p
volumes 设置数据卷挂载   -v
volumes_from设置数据卷容器挂载,版本3不支持  --volumes-from
hostname设置容器主机名   -h  --hostname
sysctls设置容器的内核参数  --sysctl
links设置容器互联   --link
privileged设置容器拥有root权限  --privileged
restart设置容器重启策略   --restart
depends_on设置容器的依赖关系

2.Docker Compose常用命令

docker-compose [-f docker-compose.yml] up -d               根据模板文件创建并后台启动所有容器down                根据模板文件删除所有容器ps                  根据模板文件查看所有容器状态start|stop|restart  根据模板文件启动|停止|重启所有容器

3.使用Docker-compose创建LNMP环境,并运行Wordpress网站平台

3.1.配置nginx的Dockerfile文件 

mkdir lnmp
cd lnmp
mkdir nginx mysql phpvim /opt/lnmp/nginx/Dockerfile
FROM centos:7
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
COPY nginx.conf /usr/local/nginx/conf/
ADD wordpress-6.4.2-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod -R 777 /usr/local/nginx/html
EXPOSE 80
VOLUME ["/usr/local/nginx/html/"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

3.2.配置mysql的Dockerfile

vim /opt/lnmp/mysql/Dockerfile
FROM centos:7
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j 4 && make install
COPY my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql && chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data && cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ && systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME ["/usr/local/mysql"]
ENTRYPOINT ["/usr/sbin/init"]

3.3.部署php的Dockerfile

vim /opt/lnmp/php/Dockerfile
FROM centos:7
RUN yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c++ make pcre-devel && useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src
WORKDIR /usr/local/src/php-7.1.10
RUN ./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make -j 4 && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
COPY php.ini /usr/local/php/lib
COPY php-fpm.conf /usr/local/php/etc/
COPY www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
ENTRYPOINT ["/usr/local/php/sbin/php-fpm","-F"]

3.4.部署docker-compose.yml

vim docker-compose
version: '3'
services:nginx:hostname: nginxbuild:context: /opt/lnmp/nginx/dockerfile: Dockerfileports:- 1314:80container_name: nginx_servernetworks:lnmp:ipv4_address: 172.111.0.10volumes:- "nginx-data:/usr/local/nginx/html"
#声明挂在卷名称和目录mysql:hostname: mysqlbuild:context: /opt/lnmp/mysqldockerfile: Dockerfileports:- 3306:3306container_name: mysql_servernetworks:lnmp:ipv4_address: 172.111.0.20privileged: true
#给数据库权限。true:虽然登录容器,显示的是root用户,但是它是一个伪管理员
#一旦privileged: true,容器内的root用户和宿主机的root用户,拥有一样的权限
#生产中尽量不给volumes:- "mysql-data:/usr/local/mysql/"php:hostname: phpbuild:context: /opt/lnmp/php/dockerfile: Dockerfileports:- 9000:9000container_name: php_servernetworks:lnmp:ipv4_address: 172.111.0.30volumes:- "nginx-data:/usr/local/nginx/html/"- "mysql-data:/usr/local/mysql/"
networks:lnmp:driver: bridgeipam:config:- subnet: 172.111.0.0/16
volumes:nginx-data:mysql-data:docker-compose -f docker-compose.yml up -d创建完成!

3.5.浏览器访问测试

http://192.168.80.101/index.php
http://192.168.80.101/wordpress/index.php

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

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

相关文章

零基础入门鸿蒙开发 HarmonyOS NEXT星河版开发学习

今天开始带大家零基础入门鸿蒙开发,也就是你没有任何编程基础的情况下就可以跟着石头哥零基础学习鸿蒙开发。 目录 一,为什么要学习鸿蒙 1-1,鸿蒙介绍 1-2,为什么要学习鸿蒙 1-3,鸿蒙各个版本介绍 1-4&#xff0…

【用栈操作构建数组】python刷题记录

润到栈模块. class Solution:def buildArray(self, target: List[int], n: int) -> List[str]:#每一个缺失的数字填入pushpop,其他数字只需要填入push即可#再简化思路,读取到的数小于当前,pushpop,直到等于当前才pushans[]cur0for i in ta…

在VS Code上搭建Vue项目教程(Vue-cli 脚手架)

1.前期环境准备 搭建Vue项目使用的是Vue-cli 脚手架。前期环境需要准备Node.js环境,就像Java开发要依赖JDK环境一样。 1.1 Node.js环境配置 1)具体安装步骤操作即可: npm 安装教程_如何安装npm-CSDN博客文章浏览阅读836次。本文主要在Win…

zabbix“专家坐诊”第246期问答

问题一 Q:有哪位大哥知道这是啥情况,6.4主动检查接口显示未知? A:看看agent配置文件的主采集有没有填写正确IP。 Q:我刚刚客户端重新授权,发现可以预警了,但是还是灰色的,我尝试输…

直播平台优化方案:直播美颜SDK开发详解

本篇文章,笔者将详细介绍直播美颜SDK的开发过程,帮助开发者为其平台增添这一重要功能。 一、美颜SDK的基本概念 通过美颜SDK,用户在进行直播时可以轻松地美化自己的形象,提高观众的观看体验。 二、美颜SDK的核心功能 1.实时美颜…

人工智能算法工程师(高级)课程2-多类目标识别之RCNN系列模型与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程2-多类目标识别之RCNN系列模型与代码详解。本文全面解析了RCNN系列模型,包括R-CNN、Fast R-CNN、Faster R-CNN等,重点阐述了基于PyTorch框架实现多目标检测与识…

成为一位优秀的项目经理,这一点很重要

在管理工作中,我们可能会遇到这样的情况:有的人业务能力很强,堪称行业内的佼佼者,但当领导却仿佛失去了方向,管理起来显得力不从心,甚至一团糟。 业务能力和领导力是两个既相关又独立的概念。 业务能力是…

飞凌嵌入式RK3576开发板的MIPI-CSI调试——通路解析

MIPI-CSI是一种在嵌入式系统或移动设备中常见的摄像头接口,能够实现高速的图像数据传输。飞凌嵌入式最新推出的OK3576-C开发板拥有丰富的资源接口,其中支持5个CSI-2接口,意味着最多可同时支持5路摄像头的输入。 本篇内容就通过OK3576-C开发板…

2024年9月CCF GESP第七次认证开启报名 6547网

CCF GESP第七次认证时间为2024年9月7日,1-4级认证时间为上午9:30-11:30,5-8级认证时间为下午13:30-16:30。7月18日17:00开启9月认证报名通道,考生可登录GESP官网进行报名。GESP认证方式为全国各GESP考点上机考试,认证语言包括&…

Monaco 使用 FoldingRangeProvider

Monaco 中支持代码折叠功能,FolderRangeProvider 是一个通知功能,编辑文档会根据大括号的范围进行折叠,也就是可折叠区域都是以左大括号开始,右大括号结束,当折叠区域发生变更时,内部方法会被调用。 通过 …

数据结构——hash(hashmap源码探究)

hash是什么? hash也称为散列,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出值就是散列值。 举例来说明一下什么是hash: 假设我们要把1~12存入到一个大小是5的hash表中,我们…

数学基础【俗说矩阵】:矩阵相乘

矩阵乘法 矩阵乘法推导过程 一、两个线性方程复合代入 二、X1和X2合并同类项 三、复合后方程组结果 四、线性方程组矩阵表示 五、线性方程组矩阵映射表示 复合映射表示 六、矩阵乘法导出 矩阵乘法法则 1、规则一推导过程 左取行,右取列,对应相乘后…

java题目之拷贝数组

public class MethondDemo10 {public static void main(String[] args) {//定义一个需求copyOfRange(int[]arr,int from,int to)//将数组arr中从索引from(包含from)开始//到索引to结束(不包含to)的元素复制到新数组当中//将新数组返回c0-p//定义原始数组,静态数组int[] arr{1,2…

MySQL:基础操作(增删查改)

目录 一、库的操作 创建数据库 查看数据库 显示创建语句 修改数据库 删除数据库 备份和恢复 二、表的操作 创建表 查看表结构 修改表 删除表 三、表的增删查改 新增数据 插入否则更新 插入查询的结果 查找数据 为查询结果指定别名 结果去重 where 条件 结…

【Vue】深入了解 v-for 指令:从基础到高级应用的全面指南

文章目录 一、v-for 指令概述二、v-for 指令的基本用法1. 遍历数组2. 遍历对象3. 使用索引 三、v-for 指令的高级用法1. 组件列表渲染2. 使用 key 提升性能3. 嵌套循环 四、结合其他功能的高级用法1. 处理过滤和排序后的结果2. 迭代数值范围3. 结合其他命令使用模板部分 (<t…

【运维资料】智慧项目运维服务方案(2024Word直接套用完整版)

信息化项目运维服务方案&#xff08;投标&#xff0c;实施运维&#xff0c;交付&#xff09; 1.项目整体介绍 2.服务简述 3.资源提供 软件全过程性&#xff0c;标准型&#xff0c;规范性文档&#xff08;全套资料包&#xff09;获取&#xff1a;本文末个人名片直接获取&#xf…

科研绘图系列:R语言微生物堆积图(stacked barplot)

介绍 堆叠条形图是一种数据可视化图表,它通过将每个条形分割成多个部分来展示不同类别的数值。每个条形代表一个总体数据,而条形内的每个部分则代表该总体数据中不同子类别的数值。这种图表特别适合展示整体与部分的关系,以及各部分在整体中的比例。 特点: 多部分条形:每…

《网络安全技术与应用》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《网络安全技术与应用》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《网络安全技术与应用》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;教育部 主办单位&#xff…

如何创建和使用 Python 模块和包

一、Python模块概述 在Python中&#xff0c;模块&#xff08;Module&#xff09;是一个包含Python定义和语句的文件。模块名是文件名去掉.py扩展名后的名字。模块可以包含变量、函数、类和可执行代码。使用模块的最大好处是可以实现代码的重用和组织。 1.1 创建模块 创建一个…

JVM--自动内存管理--JAVA内存区域

1. 运行时数据区域 灰色的线程共享&#xff0c;白色的线程独享 白色的独享就是根据个体"同生共死" 程序计数器&#xff1a; 是唯一一个没有OOM(内存溢出)的地方 是线程独享的 作用&#xff1a; 是一块较小的内存空间,是当前线程所执行的字节吗的行号指示器 由于…