【Docker】基于Docker-compose创建LNMP环境

news2024/9/22 11:28:37

目录

一.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/1934472.html

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

相关文章

5G以太网和5G前传业务的有效解决方案——25G可调DWDM光模块

信息技术的迅猛发展和数据传输需求的不断增加,光通信技术在现代网络中扮演着至关重要的角色。DWDM技术通过在一根光纤上使用多个不同波长的光信号同时传输,大幅提高了数据传输的容量。而可调光模块则能够在多种波长之间进行切换,实现灵活、高…

如何用EXCEL自动解方程/方程组?利用 矩阵乘法X=A-*B,X=mmult(minverse(A), B)

目录 问题的由来 1 数据 → 模拟分析 → 单变量求解 1.1 找一个单元格填入公式 1.2 功能入口 1.3 选择单变量求解,分别填入内容 1.4 求解 1.5 这个感觉用处不大 2 重点介绍,用EXCEL进行矩阵运算解方程的操作 2.1 运用EXCEL进行矩阵运算&…

ETL数据集成丨通过ETLCloud工具,将Oracle数据实时同步至Doris中

ETLCloud是一个全面的数据集成平台,专注于解决大数据量和高合规要求环境下的数据集成需求。采用先进的技术架构,如微服务和全Web可视化的集成设计,为用户提供了一站式的数据处理解决方案。 主要特点和功能包括: 实时数据处理&…

Android 使用FFmpeg解析RTSP流,ANativeWindow渲染 使用SurfaceView播放流程详解

文章目录 ANativeWindow 介绍ANativeWindow 的主要功能和特点ANativeWindow 的常用函数工作流程原理图通过ANativeWindow渲染RGB纯色示例 播放RTSP流工作流程图关键步骤解析自定义SurfaceView组件native 层解码渲染 效果展示注意事项 这篇文章涉及到jni层,以及Ffmpe…

pdf提取其中一页怎么操作?提取PDF其中一页的方法

pdf提取其中一页怎么操作?需要从一个PDF文件中提取特定页码的操作通常是在处理文档时常见的需求。这种操作允许用户选择性地获取所需的信息,而不必操作整个文档。通过选择性提取页面,你可以更高效地管理和利用PDF文件的内容,无论是…

负载均衡 lvs

1. 4层转发(L4) 与 7层转发(L7) 区别 4层转发(L4) 与 7层转发(L7) 区别 转发基于的信息 状态 常用的服务 L4 基于网络层和传输层信息: L4转发主要依赖于网络层IP头部(源地址,目标地址,源端口,目标端口)和传输层头部&#xff…

接口防刷!利用redisson快速实现自定义限流注解

问题: 在日常开发中,一些重要的对外接口,需要加上访问频率限制,以免造成资��损失。 如登录接口,当用户使用手机号验证码登录时,一般我们会生成6位数的随机验证码,并将验…

【论文解读】VoxelNeXt: Fully Sparse VoxelNet for 3D Object Detection and Tracking

VoxelNeXt 摘要引言方法Sparse CNN Backbone AdaptationSparse Prediction Head 3D Tracking实验结论 摘要 3D物体检测器通常依赖于手工制作的方法,例如锚点或中心,并将经过充分学习的2D框架转换为3D。因此,稀疏体素特征需要通过密集预测头进…

电脑没有声音了怎么恢复?3个硬核操作,解救静音危机!

当你沉迷于电脑中的音乐、电影或是游戏时,突然一阵寂静袭来,是不是感觉就像突然按下了暂停键?这无疑是一场大灾难!电脑没有声音了怎么恢复呢?急,今天小编带来了3个硬核操作,让你从无声的幽谷中爬…

二、BIO、NIO、直接内存与零拷贝

一、网络通信编程基础 1、Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,由操作系统提供; Socket将复杂的TCP/IP协议处理和通信缓存管理都隐藏在接口后面,对用户来说就是使用简单的接口进行网络应用编程…

【python】OpenCV—Scanner

文章目录 1、需求描述2、代码实现3、涉及到的库函数cv2.arcLengthcv2.approxPolyDPskimage.filters.threshold_localimutils.grab_contours 4、完整代码5、参考 1、需求描述 输入图片 扫描得到如下的结果 用OpenCV构建文档扫描仪只需三个简单步骤: 1.边缘检测 2.使用图像中…

02线性表 - 链表

这里是只讲干货不讲废话的炽念,这个系列的文章是为了我自己以后复习数据结构而写,所以可能会用一种我自己能够听懂的方式来描述,不会像书本上那么枯燥和无聊,且全系列的代码均是可运行的代码,关键地方会给出注释^_^ 全…

windows edge自带的pdf分割工具(功能)

WPS分割pdf得会员,要充值!网上一顿乱找,发现最简单,最好用,免费的还是回到Windows。 Windows上直接在edge浏览器打开PDF,点击 打印 按钮,页面下选择对应页数 打印机 选择 另存为PDF,然后保存就…

memcached 高性能内存对象缓存

memcached 高性能内存对象缓存 memcache是一款开源的高性能分布式内存对象缓存系统,常用于做大型动态web服务器的中间件缓存。 mamcached做web服务的中间缓存示意图 当web服务器接收到请求需要处理动态页面元素时,通常要去数据库调用数据,但…

ProtoBuf的安装(win+ubuntu+centos版本)

Win下安装ProtoBuf教程 WProtoBuf Win版本 上方链接就是ProtoBuf官方在Github上面的仓库,我这里下的是21.11版本,至于你要下哪个版本,可以根据自己的需要去下载。 首先点击链接,进入首页,向下滑就可以找到ProtoBuf…

加密传输及相关安全验证:

1.1. 加密: 1.1.1. 对称加密: 特点:加解密用一个密钥,加解密效率高,速度快,有密钥交互的问题问题:双方如何交互对称密钥的问题,用非对称密钥的公钥加密对称密钥的混合加密方式常用…

IP溯源工具--IPTraceabilityTool

工具地址:xingyunsec/IPTraceabilityTool: 蓝队值守利器-IP溯源工具 (github.com) 工具介绍: 在攻防演练期间,对于值守人员,某些客户要求对攻击IP都进行分析溯源,发现攻击IP的时候,需要针对攻击IP进行分析…

PHP手边酒店多商户版平台小程序系统源码

🏨【旅行新宠】手边酒店多商户版小程序,一键解锁住宿新体验!🛌 🌈【开篇:旅行新伴侣,尽在掌握】🌈 还在为旅行中的住宿选择而纠结吗?是时候告别繁琐的搜索和比价过程&a…

js继承之构造函数继承

最近在看js红宝书,学到了继承这一章节,看到了下图这段代码根据自己理解不明白为什么两次实例的colors值不一样 又是自己画图又是查找资料看别人如何理解的,今天才按自己的理解搞明白为啥。可能我的理解也是有偏差错误的,希望佬可以…

开源防病毒工具--ClamAV

产品文档:简介 - ClamAV 文档 开源地址:Cisco-Talos/clamav:ClamAV - 文档在这里:https://docs.clamav.net (github.com) 一、引言 ClamAV(Clam AntiVirus)是一个开源的防病毒工具,广泛应用…