大鲸鱼docker-compose单机容器集群编排工具

目录

[一、Docker-compose 概述](#一、Docker-compose 概述)

二、Docker-compose简介

三、YML文件格式及编写注意事项

1.yml文件是什么

2.yml问价使用注意事项

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

[四、Docker-compose 配置](#四、Docker-compose 配置)

[1.Docker-Compose 配置常用字段](#1.Docker-Compose 配置常用字段)

[2.Docker Compose常用命令](#2.Docker Compose常用命令)

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

配置nginx的Dockerfile文件

配置mysql的Dockerfile

部署php的Dockerfile

部署docker-compose.yml

浏览器访问测试


一、Docker-compose 概述

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

二、Docker-compose简介

Dockercompose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Docker compose项目由 Python 编写,调用 Docker 服务提供的 API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用 compose 来进行编排管理。

Dockercompose一个用于定义和运行多容器 pocker 应用程序的工具。它允许用户使用 YAL 文件米定义应用程序的配置,包括容器的数量、容器之间的依赖关系。环境变量、端口映射以及其他设置。然后,用户可以使用 docker-compose 命令来启动和管理这些容器。

使用 Docker compose 可以方便地管理多个容器,例如,可以同时启动一个 meb 服务器容器和一个数据库容器,并在它们之间建立网络连接。Docker compose还支持自定义网络,使得容器可以在不同的网络中进行通信。

Docker compose文件通常包含一个或多个服务,每个服务都由一个或多个容器组成。服务定义了容器应该执行的任务,以及容器之间的依赖关系。例如,一个 eD 服务器服务可以句含一个或多个Web 服务器容器,,而这些容器又依赖于一个数据库容器。

docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)

Docker-Ccompose 的项目配置文件默认为 docker-copose.yml,可通过环境变量 (COMPOSE_FILE 或 -f 参数自定义配置文件, 其定义了多个有依赖关系的服务及每个服务运行的容器。compose 允许用户通过一个单独的 docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

三、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网站平台

配置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;"]
配置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"]
部署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"]
部署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
 
创建完成!
浏览器访问测试
复制代码
http://192.168.80.100/index.php
http://192.168.80.100/wordpress/index.php
相关推荐
Elastic 中国社区官方博客38 分钟前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
10mAh1 小时前
【Linux】CPU 100% 怎么排查?——top、pidstat、jstack 到线程定位实战
linux·运维·服务器
LRL_1 小时前
深入浅出 Kubernetes 控制器:Deployment 与 StatefulSet 核心区别全景图
云原生·容器·kubernetes
!chen1 小时前
客户环境 Nginx 配置流式报表与超时排查
运维·nginx
起名真的太难了2 小时前
Docker 项目部署
docker·容器·eureka
狼与自由2 小时前
docker 安装milvus
docker·milvus
KIZIFLOW北泽五金2 小时前
液压系统压力损失怎么降?成因分析与减损实操方案
运维·自动化·新媒体运营·产品运营·流量运营·用户运营·内容运营
介拙2 小时前
Zabbix 7.0 从装到告警触发,我踩了这些坑
运维
爱吃提升2 小时前
VMware虚拟机迁移系统磁盘完整教程(VMware Workstation17)
linux·运维·服务器
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 14 章 打包与部署 制作 Docker 镜像 阅读笔记 43
spring boot·笔记·docker