道家人 发表于 2024-7-21 21:30:00

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

目次

一、Docker-compose 概述
二、Docker-compose简介
三、YML文件格式及编写留意事项 
1.yml文件是什么
2.yml问价利用留意事项
3.yml文件的基本数据结构
四、Docker-compose 配置
1.Docker-Compose 配置常用字段
2.Docker Compose常用下令
3.利用Docker-compose创建LNMP环境,并运行Wordpress网站平台
配置nginx的Dockerfile文件 
配置mysql的Dockerfile
部署php的Dockerfile
部署docker-compose.yml
欣赏器访问测试

一、Docker-compose 概述


[*]一个Dockerfile模板文件可以界说一个单独的应用容器
[*]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设置容器名   --nameenvironment设置环境变量  -e  -envnetworks设置容器利用的自界说网络和IP  --ipnetwork_mode设置容器的网络模式  --networkports设置容器端口映射  -pvolumes 设置数据卷挂载   -vvolumes_from设置数据卷容器挂载,版本3不支持  --volumes-fromhostname设置容器主机名   -h  --hostnamesysctls设置容器的内核参数  --sysctllinks设置容器互联   --linkprivileged设置容器拥有root权限  --privilegedrestart设置容器重启策略   --restartdepends_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 https://i-blog.csdnimg.cn/direct/2d212b907cff4fe496146eaa59a5065b.png




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 大鲸鱼docker-compose单机容器集群编排工具