当前位置:   article > 正文

使用docker-compose编排Lnmp(dockerfile) 完成Wordpress_centos7 dockerfile和docker-compose搭建lnmp

centos7 dockerfile和docker-compose搭建lnmp

目录

一、 Docker-Compose

1.1Docker-Compose介绍

1.2环境准备

1.2.1准备容器目录及相关文件

1.2.2关闭防火墙关闭防护

1.2.3下载centos:7镜像

1.3Docker-Compose 编排nginx

1.3.1切换工作目录

1.3.2编写 Dockerfile 文件

1.3.3修改nginx.conf配置文件

1.4Docker-Compose 编排mysql

1.4.1切换工作目录

1.4.2编写 Dockerfile 文件

1.4.3准备my.cnf文件

1.5Docker-Compose 编排php

1.5.1切换工作目录

1.5.2编写 Dockerfile 文件

1.5.3准备 php.ini、php-fpm.conf、www.conf 配置文件

1.5.3.1修改php.ini

1.5.3.2修改php-fmp.conf

1.5.3.3修改www.conf

1.6下载 Docker Compose 并安装

1.7编写docker-compose.yml文件

1.7.1启动服务

1.7.2查看镜像和容器

1.8进入容器登录 mysql 授权

1.9创建一个新的配置文件 wp-config.php

1.10浏览器访问 wordpress


一、 Docker-Compose

1.1Docker-Compose介绍

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

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

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。

1.2环境准备

1.2.1准备容器目录及相关文件

1.2.2关闭防火墙关闭防护

  1. systemctl stop firewalld
  2. setenforce 0

1.2.3下载centos:7镜像

docker pull centos:7 

1.3Docker-Compose 编排nginx

1.3.1切换工作目录

1.3.2编写 Dockerfile 文件

  1. FROM centos:7
  2. MAINTAINER this is nginx image <zzz1>
  3. RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx
  4. ADD nginx-1.12.0.tar.gz /usr/local/src/
  5. WORKDIR /usr/local/src/nginx-1.12.0
  6. RUN ./configure \
  7. --prefix=/usr/local/nginx \
  8. --user=nginx \
  9. --group=nginx \
  10. --with-http_stub_status_module && make -j2 && make install
  11. ENV PATH /usr/local/nginx/sbin:$PATH
  12. ADD nginx.conf /usr/local/nginx/conf/
  13. #ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html/
  14. RUN chmod 777 -R /usr/local/nginx/html/
  15. EXPOSE 80
  16. EXPOSE 443
  17. ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

1.3.3修改nginx.conf配置文件

1.3.4创建html文件夹,并解压wordpress

1.4Docker-Compose 编排mysql

1.4.1切换工作目录

1.4.2编写 Dockerfile 文件

  1. FROM centos:7
  2. MAINTAINER this is mysql image <zzz2>
  3. RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
  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_INNOBASE_STORAGE_ENGINE=1 \
  14. -DMYSQL_DATADIR=/usr/local/mysql/data \
  15. -DWITH_BOOST=boost \
  16. -DWITH_SYSTEMD=1 && make -j 4 && make install
  17. ADD my.cnf /etc/
  18. ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
  19. RUN useradd -M -s /sbin/nologin mysql && chown mysql:mysql /etc/my.cnf && chown -R mysql:mysql /usr/l
  20. ocal/mysql/ && /usr/local/mysql/bin/mysqld \
  21. --initialize-insecure \
  22. --user=mysql \
  23. --basedir=/usr/local/mysql \
  24. --datadir=/usr/local/mysql/data && cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/
  25. systemd/system/
  26. EXPOSE 3306
  27. CMD ["/usr/local/mysql/bin/mysqld"]

1.4.3准备my.cnf文件

  1. [client]
  2. port = 3306
  3. socket=/usr/local/mysql/mysql.sock
  4. [mysql]
  5. port = 3306
  6. socket = /usr/local/mysql/mysql.sock
  7. auto-rehash
  8. [mysqld]
  9. user = mysql
  10. basedir=/usr/local/mysql
  11. datadir=/usr/local/mysql/data
  12. port = 3306
  13. character-set-server=utf8
  14. pid-file = /usr/local/mysql/mysqld.pid
  15. socket=/usr/local/mysql/mysql.sock
  16. bind-address = 0.0.0.0
  17. skip-name-resolve
  18. max_connections=2048
  19. default-storage-engine=INNODB
  20. max_allowed_packet=16M
  21. server-id = 1
  22. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_
  23. IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

1.5Docker-Compose 编排php

1.5.1切换工作目录

1.5.2编写 Dockerfile 文件

  1. FROM centos:7
  2. MAINTAINER this is php image <zzz3>
  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 -j2 && make install
  33. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
  34. ADD php.ini /usr/local/php/lib/
  35. ADD php-fpm.conf /usr/local/php/etc/
  36. ADD www.conf /usr/local/php/etc/php-fpm.d/
  37. EXPOSE 9000
  38. ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]

1.5.3准备 php.ini、php-fpm.conf、www.conf 配置文件

1.5.3.1修改php.ini
  1. [root@localhost php]# vim php.ini
  2. 939 date.timezone = Asia/Shanghai # 取消注释,修改
  3. 1170 mysqli.default_socket = /usr/local/mysql/mysql.sock
  4. # MySQL数据库的默认socket文件路径,用于PHP连接MySQL数据库时寻找MySQL服务器的通信端口
  5. [root@localhost php]# egrep -v "^;" php.ini | egrep -v "^$"
  6. # 显示php.ini文件中的非注释和非空行内容,即显示出配置文件中的有效配置项

1.5.3.2修改php-fmp.conf

1.5.3.3修改www.conf

1.6下载 Docker Compose 并安装

  1. curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. # `uname -s`-`uname -m`也可以写成$(uname -s) 和 $(uname -m):分别会自动替换为你的系统类型(如:Linux)和机器架构(如:x86_64),确保你下载的是适合你系统的版本。
  3. # curl -L:这部分表示使用curl命令进行下载,并且使用-L参数来跟随重定向
  4. # -o /usr/local/bin/docker-compose: 表示将下载的文件保存为/usr/local/bin目录下的docker-compose文件
  5. #安装
  6. chmod +x /usr/local/bin/docker-compose
  7. #查看版本
  8. docker-compose --version

1.7编写docker-compose.yml文件

  1. #定义docker-compose版本,可以是23
  2. version: '3'
  3. services:
  4. nginx:
  5. container_name: nginx
  6. hostname: nginx
  7. build:
  8. context: /opt/compose_lnmp/nginx/
  9. dockerfile: Dockerfile
  10. ports:
  11. - 80:80
  12. - 443:443
  13. #设置数据卷挂载
  14. volumes:
  15. - /opt/compose_lnmp/nginx/html:/usr/local/nginx/html
  16. networks:
  17. lnmp:
  18. ipv4_address: 172.18.0.10
  19. mysql:
  20. container_name: mysql
  21. build:
  22. context: /opt/compose_lnmp/mysql
  23. dockerfile: Dockerfile
  24. ports:
  25. - 3306:3306
  26. networks:
  27. lnmp:
  28. ipv4_address: 172.18.0.20
  29. volumes:
  30. - db-data:/usr/local/mysql
  31. privileged: true
  32. php:
  33. container_name: php
  34. build:
  35. context: /opt/compose_lnmp/php
  36. dockerfile: Dockerfile
  37. ports:
  38. - 9000:9000
  39. networks:
  40. lnmp:
  41. ipv4_address: 172.18.0.30
  42. volumes:
  43. - db-data:/usr/local/mysql
  44. - ./nginx/html:/usr/local/nginx/html
  45. depends_on:
  46. - nginx
  47. - mysql
  48. networks:
  49. lnmp:
  50. driver: bridge
  51. ipam:
  52. config:
  53. - subnet: 172.18.0.0/16
  54. volumes:
  55. db-data:

内容解释如下:

  1. #定义docker-compose版本,可以是23
  2. version: '3' 定义版本
  3. services: 定义服务
  4. nginx:
  5. container_name: nginx #指定容器的名称为nginx
  6. hostname: nginx #容器的主机名为nginx
  7. build: #构建上下文和Dockerfile的位置
  8. context: /opt/compose_lnmp/nginx/ 指明Dockerfile文件目录
  9. dockerfile: Dockerfile dockerfile文件名称
  10. ports: 暴露端口
  11. - 80:80
  12. - 443:443 #将宿主机的80端口映射到容器的80端口,将宿主机的443端口映射到容器的443端口
  13. #设置数据卷挂载
  14. volumes:
  15. - /opt/compose_lnmp/nginx/html:/usr/local/nginx/html
  16. networks:
  17. lnmp: #将该服务连接到名为lnmp的网络,并指定了容器的IPv4地址
  18. ipv4_address: 172.18.0.10
  19. mysql: 定义第二个服务
  20. container_name: mysql
  21. build:
  22. context: /opt/compose_lnmp/mysql
  23. dockerfile: Dockerfile
  24. ports:
  25. - 3306:3306 #将宿主机的3306端口映射到容器的3306端口
  26. networks: 给容器自定义ip地址
  27. lnmp:
  28. ipv4_address: 172.18.0.20
  29. volumes: 通过顶级卷创建数据卷
  30. - db-data:/usr/local/mysql
  31. privileged: true #使容器内的root拥有真正的root权限
  32. php: 第三个服务是php
  33. container_name: php
  34. build:
  35. context: /opt/compose_lnmp/php
  36. dockerfile: Dockerfile
  37. ports:
  38. - 9000:9000 #将宿主机的9000端口映射到容器的9000端口
  39. networks:
  40. lnmp:
  41. ipv4_address: 172.18.0.30
  42. volumes:
  43. - db-data:/usr/local/mysql
  44. - ./nginx/html:/usr/local/nginx/html
  45. depends_on: # 声明了该服务依赖于nginx和mysql服务
  46. - nginx
  47. - mysql
  48. networks: # 定义了一个叫做lnmp的网络,使用了bridge驱动
  49. lnmp:
  50. driver: bridge
  51. ipam:
  52. config:
  53. - subnet: 172.18.0.0/16 # 指定了IP地址池的子网范围
  54. volumes: 创建顶级卷,因为在版本3不支持volumes_from,需要通过顶级卷来实现容器之间的数据共享
  55. db-data: #db-data 用于 MySQL 数据

1.7.1启动服务

保存到一个名为 docker-compose.yml 的文件中,然后在包含该文件的目录中运行 docker-compose up -d 命令来启动这个环境

1.7.2查看镜像和容器

1.8进入容器登录 mysql 授权

  1. docker exec -it mysql bash
  2. mysql -u root -p
  3. 回车
  4. create database wordpress;
  5. grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123123';
  6. grant all privileges on *.* to 'root'@'%' identified by '123123';
  7. flush privileges;

1.9创建一个新的配置文件 wp-config.php

1.10浏览器访问 wordpress

再次去浏览器访问http://192.168.246.13/wordpress/index.php

如果遇到问题,报错,镜像拉去不下来

  1. Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
  2. 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error" 报错
  3. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. yum makecache
  5. # 如果遇到类似dns问题,可修改dns、替换阿里源尝试解决
  6. 添加下面的
  7. vim /etc/sysctl.conf
  8. net.ipv4.ip_forward=1
  9. sysctl -p
  10. 在ens33网卡中加入
  11. DNS2=114.114.114.114然后重启网卡
  12. systemctl restart network
  13. systemctl restart docker

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/829090
推荐阅读
相关标签
  

闽ICP备14008679号