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

打印 上一主题 下一主题

主题 576|帖子 576|积分 1728

目次

一、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 为后缀,用 空格缩进 表示字段的层级关系
特点:可读性高,易于管理
  1. #一级字段
  2. key1: value1              #一个key只有一个值,值的类型为 纯量
  3. key2:
  4. - value1                        #一个key有多个值的纵向格式,值的类型为 列表
  5. - value2
  6. key3: ["value1", "value2"]      #一个key有多个值的横向格式,值的类型为 数组
  7. key4:
  8.   #二级字段
  9.   subkey1: value1               #用 空格缩进 表示字段的层级关系,同一层字段要靠左对齐
  10.   subkey2:value2
  11.   subkey3:                      #key的值也是键值对,值的类型为 对象
  12.     #三级字段
  13.     sskey1: value1
  14.         sskey2: value2
复制代码
json格式文件:文件名以 .json 为后缀,用 大括号{} 表示字段的层级关系,每层字段除了末了一个
字段都要用逗号 , 结尾
特点:易于编程语言的api接口解析
  1. #一级字段
  2. {
  3.    "key1": ["value1"],
  4.    "key2": ["value2", "value3"],
  5.    "key3": {
  6.       #二级字段
  7.       "subkey1": ["value1"],
  8.       "subkey2": ["value2"],
  9.       "subkey3": {
  10.          #三级字段
  11.          "sskey1": ["value1"],
  12.          "sskey2": ["value2"]
  13.       }
  14.    }
  15. }
  16. key1:           值相当于echo "helloworld"
  17.   hello
  18.   world
  19.   
  20. key2: |         值相当于echo -e "hello\nworld"      #key: |  表示保留文本块中的换行符
  21.   hello
  22.   world
  23.   
  24. key3: |-        值相当于echo -e "hello\nworld\c"
  25.   hello
  26.   world
  27.   
  28. key4: |+        值相当于echo -e "hello\nworld\n"
  29.   hello
  30.   world
  31.   
  32. key5: > hello       值相当于echo  "hello world"    #> 会将文本块中的回车替换为空格
  33.   world
  34.   
  35. key1: &a value1      #定义数据锚点,即定义复制的数据,相当于 a="value1"
  36. 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常用下令

  1. docker-compose [-f docker-compose.yml] up -d               根据模板文件创建并后台启动所有容器
  2.                                        down                根据模板文件删除所有容器
  3.                                                                            ps                  根据模板文件查看所有容器状态
  4.                                                                            start|stop|restart  根据模板文件启动|停止|重启所有容器
复制代码
3.利用Docker-compose创建LNMP环境,并运行Wordpress网站平台



配置nginx的Dockerfile文件 

  1. mkdir lnmp
  2. cd lnmp
  3. mkdir nginx mysql php
  4. vim /opt/lnmp/nginx/Dockerfile
  5. FROM centos:7
  6. RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
  7. ADD nginx-1.22.0.tar.gz /usr/local/src/
  8. RUN useradd -M -s /sbin/nologin nginx
  9. WORKDIR /usr/local/src/nginx-1.22.0
  10. 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
  11. ENV PATH /usr/local/nginx/sbin:$PATH
  12. COPY nginx.conf /usr/local/nginx/conf/
  13. ADD wordpress-6.4.2-zh_CN.tar.gz /usr/local/nginx/html
  14. RUN chmod -R 777 /usr/local/nginx/html
  15. EXPOSE 80
  16. VOLUME ["/usr/local/nginx/html/"]
  17. CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
复制代码
配置mysql的Dockerfile

  1. vim /opt/lnmp/mysql/Dockerfile
  2. FROM centos:7
  3. RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin mysql
  4. ADD mysql-boost-5.7.20.tar.gz /usr/local/src
  5. WORKDIR /usr/local/src/mysql-5.7.20/
  6. RUN cmake \
  7. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  8. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
  9. -DSYSCONFDIR=/etc \
  10. -DSYSTEMD_PID_DIR=/usr/local/mysql \
  11. -DDEFAULT_CHARSET=utf8  \
  12. -DDEFAULT_COLLATION=utf8_general_ci \
  13. -DWITH_EXTRA_CHARSETS=all \
  14. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  15. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  16. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  17. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  18. -DMYSQL_DATADIR=/usr/local/mysql/data \
  19. -DWITH_BOOST=boost \
  20. -DWITH_SYSTEMD=1 && make -j 4 && make install
  21. COPY my.cnf /etc/my.cnf
  22. EXPOSE 3306
  23. RUN chown -R mysql:mysql /usr/local/mysql && chown mysql:mysql /etc/my.cnf
  24. WORKDIR /usr/local/mysql/bin/
  25. RUN ./mysqld \
  26. --initialize-insecure \
  27. --user=mysql \
  28. --basedir=/usr/local/mysql \
  29. --datadir=/usr/local/mysql/data && cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ && systemctl enable mysqld
  30. ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
  31. VOLUME ["/usr/local/mysql"]
  32. ENTRYPOINT ["/usr/sbin/init"]
复制代码
部署php的Dockerfile

  1. vim /opt/lnmp/php/Dockerfile
  2. FROM centos:7
  3. RUN yum -y install gd \
  4. libjpeg libjpeg-devel \
  5. libpng libpng-devel \
  6. freetype freetype-devel \
  7. libxml2 libxml2-devel \
  8. zlib zlib-devel \
  9. curl curl-devel \
  10. openssl openssl-devel \
  11. gcc gcc-c++ make pcre-devel && useradd -M -s /sbin/nologin nginx
  12. ADD php-7.1.10.tar.bz2 /usr/local/src
  13. WORKDIR /usr/local/src/php-7.1.10
  14. RUN ./configure \
  15. --prefix=/usr/local/php \
  16. --with-mysql-sock=/usr/local/mysql/mysql.sock \
  17. --with-mysqli \
  18. --with-zlib \
  19. --with-curl \
  20. --with-gd \
  21. --with-jpeg-dir \
  22. --with-png-dir \
  23. --with-freetype-dir \
  24. --with-openssl \
  25. --enable-fpm \
  26. --enable-mbstring \
  27. --enable-xml \
  28. --enable-session \
  29. --enable-ftp \
  30. --enable-pdo \
  31. --enable-tokenizer \
  32. --enable-zip && make -j 4 && make install
  33. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
  34. COPY php.ini /usr/local/php/lib
  35. COPY php-fpm.conf /usr/local/php/etc/
  36. COPY www.conf /usr/local/php/etc/php-fpm.d/
  37. EXPOSE 9000
  38. ENTRYPOINT ["/usr/local/php/sbin/php-fpm","-F"]
复制代码
部署docker-compose.yml

  1. vim docker-compose
  2. version: '3'
  3. services:
  4.   nginx:
  5.     hostname: nginx
  6.     build:
  7.       context: /opt/lnmp/nginx/
  8.       dockerfile: Dockerfile
  9.     ports:
  10.       - 1314:80
  11.     container_name: nginx_server
  12.     networks:
  13.       lnmp:
  14.         ipv4_address: 172.111.0.10
  15.     volumes:
  16.       - "nginx-data:/usr/local/nginx/html"
  17. #声明挂在卷名称和目录
  18.   mysql:
  19.     hostname: mysql
  20.     build:
  21.       context: /opt/lnmp/mysql
  22.       dockerfile: Dockerfile
  23.     ports:
  24.       - 3306:3306
  25.     container_name: mysql_server
  26.     networks:
  27.       lnmp:
  28.         ipv4_address: 172.111.0.20
  29.     privileged: true
  30. #给数据库权限。true:虽然登录容器,显示的是root用户,但是它是一个伪管理员
  31. #一旦privileged: true,容器内的root用户和宿主机的root用户,拥有一样的权限
  32. #生产中尽量不给
  33.     volumes:
  34.       - "mysql-data:/usr/local/mysql/"
  35.   php:
  36.     hostname: php
  37.     build:
  38.       context: /opt/lnmp/php/
  39.       dockerfile: Dockerfile
  40.     ports:
  41.       - 9000:9000
  42.     container_name: php_server
  43.     networks:
  44.       lnmp:
  45.         ipv4_address: 172.111.0.30
  46.     volumes:
  47.       - "nginx-data:/usr/local/nginx/html/"
  48.       - "mysql-data:/usr/local/mysql/"
  49. networks:
  50.   lnmp:
  51.     driver: bridge
  52.     ipam:
  53.       config:
  54.         - subnet: 172.111.0.0/16
  55. volumes:
  56.   nginx-data:
  57.   mysql-data:
  58. docker-compose -f docker-compose.yml up -d
  59. 创建完成!
复制代码
欣赏器访问测试

  1. http://192.168.80.100/index.php
  2. http://192.168.80.100/wordpress/index.php
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表