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

07-21 1451阅读

目录

一、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 概述

  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

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

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]