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

news2025/1/31 2:50:51

目录

一.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:value2
  subkey3:                      #key的值也是键值对,值的类型为 对象
    #三级字段
    sskey1: value1
	sskey2: value2

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

字段都要用逗号 , 结尾

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

#一级字段
{
   "key1": ["value1"],
   "key2": ["value2", "value3"],
   "key3": {
      #二级字段
      "subkey1": ["value1"],
      "subkey2": ["value2"],
      "subkey3": {
         #三级字段
         "sskey1": ["value1"],
         "sskey2": ["value2"]
      }
   }
}


key1:           值相当于echo "helloworld"
  hello
  world
  
key2: |         值相当于echo -e "hello\nworld"      #key: |  表示保留文本块中的换行符
  hello
  world
  
key3: |-        值相当于echo -e "hello\nworld\c"
  hello
  world
  
key4: |+        值相当于echo -e "hello\nworld\n"
  hello
  world
  
key5: > hello       值相当于echo  "hello world"    #> 会将文本块中的回车替换为空格
  world
  
key1: &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 php
 
vim /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: nginx
    build:
      context: /opt/lnmp/nginx/
      dockerfile: Dockerfile
    ports:
      - 1314:80
    container_name: nginx_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.10
    volumes:
      - "nginx-data:/usr/local/nginx/html"
#声明挂在卷名称和目录
  mysql:
    hostname: mysql
    build:
      context: /opt/lnmp/mysql
      dockerfile: Dockerfile
    ports:
      - 3306:3306
    container_name: mysql_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.20
    privileged: true
#给数据库权限。true:虽然登录容器,显示的是root用户,但是它是一个伪管理员
#一旦privileged: true,容器内的root用户和宿主机的root用户,拥有一样的权限
#生产中尽量不给
    volumes:
      - "mysql-data:/usr/local/mysql/"
  php:
    hostname: php
    build:
      context: /opt/lnmp/php/
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    container_name: php_server
    networks:
      lnmp:
        ipv4_address: 172.111.0.30
    volumes:
      - "nginx-data:/usr/local/nginx/html/"
      - "mysql-data:/usr/local/mysql/"
networks:
  lnmp:
    driver: bridge
    ipam:
      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://www.coloradmin.cn/o/1935128.html

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

相关文章

Flink HA

目录 Flink HA集群规划 环境变量配置 masters配置 flink-conf.yaml配置 测试 Flink HA集群规划 FLink HA集群规划如下: IP地址主机名称Flink角色ZooKeeper角色192.168.128.111bigdata111masterQuorumPeerMain192.168.128.112bigdata112worker、masterQuorumPee…

VS C#类文件自动生成头部注释

VS C#类文件自动生成头部注释(以VS2019为例) 1、更新位置 E:\VS2019\vs_2019\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class 2、替换Class 原始文件 using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ > 3.5…

Grafana :利用Explore方式实现多条件查询

背景 日志统一推送到Grafana上管理。所以,有了在Grafana上进行日志搜索的需求,而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤: 在主页搜索框中输入“Explore” 进入这个界面…

记录vivado自带IP iBert眼图近端回环

记录利用vivado自带IP核工具测试信号质量 ibert是测试眼图的工具,在使用的时候并不用改太多的内容,只需要注意参考时钟及所需要的引脚即可。由于条件的限制,并没有使用光纤和电缆进行连接进行外部回环,仅使用内部回环做测试&…

高性能内存对象缓存Memcached原理与部署

Memcached概述 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象,减少对数据库的访问,从而提高Web应用的响应速度。 原理 架构 Memcached采用的是一种简单的Key-Value存储…

Mac Electron 应用如何进行签名(signature)和公证(notarization)?

最近很多客户反映,从官网下载的Mac Electron应用打不开,直接报病毒,类似于这种: 这是因为在MacOS 10.14.5之后,如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核,来判断是否存…

[数据分析]脑图像处理工具

###############ATTENTION!############### 非常需要注意软件适配的操作系统!有些仅适用于Linux,可以点进各自软件手册查看详情。 需要自行查看支持的影像模态。 代码库和软件我没有加以区分。 不是专门预处理的博客!&#xf…

简约的悬浮动态特效404单页源HTML码

源码介绍 简约的悬浮动态特效404单页源HTML码,页面简约美观,可以做网站错误页或者丢失页面,将下面的代码放到空白的HTML里面,然后上传到服务器里面,设置好重定向即可 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8&q…

求职学习day5

安排明天hr面 投一下平安可能。 hr面准备&#xff0c;复习java核心技术&#xff0c;复习java项目。 正视自己&#xff0c;调整心态。 也是很早接触了javaguide但是没有持续学习&#xff0c;项目介绍 | JavaGuide&#xff0c;面试前复习一下感觉还是很有收获的。 还有一些…

个人推荐使用的最佳免费数据恢复软件

如果您最近丢失了存储驱动器上的文件&#xff0c;您可以使用免费数据恢复软件恢复它们。当您一次选择多个文件时&#xff0c;很容易意外删除文件。恶意软件攻击和驱动器故障也会导致数据丢失。 虽然 Windows 或 macOS 可能无法访问这些信息&#xff0c;但数据恢复应用程序可以…

适用于 Android 的恢复应用程序合集分享

丢失重要文件或数据从来都不是一件有趣的事。这种情况可能发生在您的计算机和笔记本电脑上&#xff0c;也可能发生在您的 Android 智能手机或平板电脑上。然而&#xff0c;尽管 Android 用户可能认为在这种情况下他们可用的选择较少&#xff0c;但用于 Android 数据恢复的应用程…

HarmonyOS ArkUi @CustomDialog 和promptAction.openCustomDialog踩坑以及如何选择

CustomDialog 内使用Link&#xff0c;如何正常使用 错误使用方式&#xff1a; 定义一个函数&#xff0c;在函数内使用弹窗&#xff0c;如下面代码showDialog&#xff1a; 这种使用方式&#xff0c;无法在自定义的CustomDialog内使用 Link&#xff0c;进行父子双向绑定&#x…

反爬虫策略中的IP地址轮换如何实现?挑战与对策

当今互联网时代&#xff0c;各类网站、网络平台背后隐藏着大量数据&#xff0c;广告数据收集、市场数据收集都需要依托爬虫技术&#xff0c;但很多网站通过反爬虫技术限制或屏蔽爬虫的访问&#xff0c;这给数据收集带来不小的挑战。 为了规避这些反爬虫策略&#xff0c;开发人…

CentOS 7报错:yum命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”

参考连接&#xff1a; 【linux】CentOS 7报错&#xff1a;yum命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”_centos linux yum search ifconfig cannot find a val-CSDN博客 Centos7出现问题Cannot find a valid baseurl for repo: base/7/x86_64&…

考研论坛设计小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;网上书城管理&#xff0c;书籍分类管理&#xff0c;用户签到管理&#xff0c;留言板管理&#xff0c;订单管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;网上书城&…

redis笔记和测试

redis是用c语言写的,放不频繁更新的数据&#xff08;用户数据。课程数据&#xff09; Redis 中&#xff0c;"穿透"通常指的是缓存穿透&#xff08;Cache Penetration&#xff09;问题&#xff0c;这是指一种恶意或非法请求直接绕过缓存层&#xff0c;直接访问数据库或…

7.SpringBoot整合Neo4j

1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> 说明&#xff1a;这里引入neo4j的版本跟spring框架的版本有关系。需要注意不同的版本在neo…

Linux系统及常用指令

目录 1、什么是Linux系统 2、为什么要用Linux系统 3、Linux系统的种类 4、如何安装Linux系统 5、常见的适配器种类 6、学习第一个Linux指令 7、安装ssh客户端软件 8、Linux系统的目录结构 9、Linux的常用命令 9.1 目录切换命令 9.2 查看目录下的内容 9.3 查看当前…

十六、【机器学习】【监督学习】- 支持向量回归 (SVR)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

使用Docker 实现 MySQL 循环复制(二)

系列文章 使用Docker 实现 MySQL 循环复制&#xff08;一&#xff09; 目录 系列文章1. 创建三个 mysql 容器1.1 准备三个 mysql 容器的挂载卷1.2 为三个mysql实例创建配置文件1.3 修改各目录的权限以满足 mysql 容器的要求1.4 创建 docker-compose.yaml 文件1.5 创建容器 1. …