文章目录

  • 前言
  • 一、架构/环境
  • 二、搭建步骤
    • 2.1 宿主机环境搭建
    • 2.2 创建nginx容器
    • 2.3 创建mysql容器
    • 2.4 创建php容器
    • 2.5 进入mysql容器进行授权
  • 三、验证
  • 四、错误集

前言

本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。


一、架构/环境

服务器 IP地址 所需软件包 所需配置文件
宿主机 192.168.13.10 centos:7镜像、docker容器 /
nginx容器 172.18.0.10 nginx-1.12.0.tar.gz、wordpress-4.9.4-zh_CN.tar.gz Dockerfile、nginx.conf
mysql容器 172.18.0.20 mysql-boost-5.7.20.tar.gz Dockerfile、my.cnf
php容器 172.18.0.30 php-7.1.10.tar.bz2 Dockerfile、php.ini、php-fpm.conf、www.conf

二、搭建步骤

2.1 宿主机环境搭建

systemctl disable --now firewalld
setenforce 0#安装docker并启动
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl enable --now docker#修改网络转发功能(如果不修改,可能造成容器连不上外网,没办法下载环境)
vim /etc/sysctl.confnet.ipv4.ip_forward=1
sysctl -p
#注:若是后面在线源下载还是报错,则考虑清除/重新加载在线源,或者更新在线源#从官网获取centos:7的镜像源
docker pull centos:7
mkdir -p /opt/{nginx,mysql,php}

2.2 创建nginx容器

cd /opt/nginx
#获取nginx-1.12.0.tar.gz wordpress-4.9.4-zh_CN.tar.gz源码包#编写Dockerfile配置文件(尽可能把命令放在一行,减少镜像层数,缩小镜像内存)
vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image <lnmp>
RUN yum install -y pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module;make -j 2 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
VOLUME [ "/usr/local/nginx/html/" ]
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]#创建nginx配置文件
vim nginx.conf
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;charset utf-8;location / {root   html;index  index.html index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ \.php$ {root           html;fastcgi_pass   172.18.0.30:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;include        fastcgi_params;}}
}#创建nginx镜像(注意最后有个点,不可省略)
docker build -t nginx:lnmp .
docker images#通过镜像为nginx创建docker1容器,并制定网段为172.18.0.0/16
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" lnmp
#查看现有的容器网络模式
docker network ls#启动nginx容器并且为容器指定IP地址
docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net lnmp --ip 172.18.0.10 nginx:lnmp#验证nginx容器是否搭建成功
curl 192.168.13.10:80

2.3 创建mysql容器

#创建mysql容器,下载mysql源码包,wget,直接拖入都可
cd /opt/mysql#编写Dockerfile配置文件
vim Dockerfile
FROM centos:7
MAINTAINER this is mysql image <wl>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
RUN 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_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
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
WORKDIR /usr/local/mysql/
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
CMD /usr/local/mysql/bin/mysqld && systemctl enable mysqld#编写mysql配置文件
vim my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES#生成mysql镜像文件并启动镜像容器(需要在对应目录中完成)
docker build -t mysql:lnmp .
docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net lnmp --ip 172.18.0.20 mysql:lnmp

2.4 创建php容器

#搭建php容器,下载php源码包,wget,直接拖入都可
cd /opt/phpvim Dockerfile
FROM centos:7
MAINTAINER this is php image <lnmp>
RUN yum install -y 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
ADD php.ini /usr/local/php/lib/
ADD php-fpm.conf /usr/local/php/etc/
ADD www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
CMD /usr/local/php/sbin/php-fpm -F#可以从别的电脑安装配置文件后靠复制过来,只需要修改939行时区,1170行mysql路径指向939行:date.timezone = Asia/Shanghai1170行:mysqli.default_socket = /usr/local/mysql/mysql.sock
vim php.ini
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket = /usr/local/mysql/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = 1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]vim php-fpm.conf
[global]
pid = run/php-fpm.pid
include=/usr/local/php/etc/php-fpm.d/*.confvim www.conf
[www]
user = nginx
group = nginx
listen = 172.18.0.30:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3#构建php容器镜像
docker build -t php:lnmp .
docker images#根据php镜像创建容器并启动
docker run -itd --name php --net lnmp --ip 172.18.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp
docker ps -a

2.5 进入mysql容器进行授权

docker exec -it mysql容器的ID bash
#进入mysql容器进行授权
mysql -u root -pcreate database wordpress;grant all privileges on wordpress.* to 'wordpress'@'%' identified by 'abc123';grant all privileges on *.* to 'root'@'%' identified by 'abc123';flush privileges;

三、验证

  • 访问:http://192.168.13.10/wordpress/index.php
  • 出现如下画面则表示安装

四、错误集

  • 创建容器的时候,容器无法连通外网,导致下载不了make等编译程序(解决:宿主机打开路由转发功能)
  • 编译时找不到CMakeLists.txt文件(解决:ADD命令会将本机压缩文件复制到容器中并且直接解压,mysql压缩文件解压后名称会变,粗心导致WORKDIR移动的目录错误,找不到对应的文件)
  • mysql最后执行的CMD命令,试了好几个版本,只有这个版本能运行容器,并使容器保持UP状态,其余的都不能成功启动

【docker】docker容器搭建分布式LNMP,附错误及解决方案相关推荐

  1. Docker多容器搭建LNMP

    文章目录 一.项目模拟 1. 项目环境 2. 服务器环境 3. 任务需求 二.Linux 系统基础镜像 三.Nginx 1. 建立工作目录 2. 编写 Dockerfile 脚本 3. 准备 ngin ...

  2. docker 启动容器报 error creating overlay mount to /var/lib/docker/overlay2

    问题: 今天用 docker 启动容器时,出现以下错误 Error response from daemon: error creating overlay mount to /var/lib/doc ...

  3. 学习Docker容器网络模型 - 搭建分布式Zookeeper集群

    ZooKeeper是一个流行的分布式协调服务.它提供了两种不同的部署方式:单机模式和分布式模式.其中单机模式的部署非常简单,网上也有很多资料,我们今天会利用Docker搭建分布式Zookeeper集群 ...

  4. docker 分布式 lnmp 镜像制作

    docker 分布式 lnmp 镜像制作 一.docker 分布式 lnmp 镜像制作 1.运行Nginx.MySQL.PHP容器 2.修改Nginx配置文件和PHP文件 4.进行测试 虚拟机输入lo ...

  5. 使用Docker Swarm搭建分布式爬虫集群

    转载自  使用Docker Swarm搭建分布式爬虫集群 在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运 ...

  6. [416]使用Docker Swarm搭建分布式爬虫集群

    在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更 ...

  7. Docker + FastDFS + Spring Boot 一键式搭建分布式文件服务器

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 首先说一下从零开始自己去搭一个fastdfs挺麻烦,后来看到 ...

  8. 基于 Docker Compose 容器化搭建 Wordpress

    基于 Docker Compose 容器化搭建 Wordpress 最近由于业务需求帮公司搞了几个 Wordpress 作为官网,中间也是踩了不少坑,倒不是搭建 wordpress 难,主要是 wor ...

  9. Docker容器搭建及Docker镜像结构和镜像优化

    Docker Docker 是一个开源的应用容器引擎 开发者打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

最新文章

  1. FFT和Matlab中操作FFT
  2. 看起来很美 VS. 是你来检阅我的忧伤了吗?
  3. leetcode 191. 位1的个数(移位操作)
  4. oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例
  5. 使用ASP.NET Core MVC的Vue.Js
  6. 蓦然认知戴帅湘:做新一代决策引擎,比DuerOs走得垂直纵深
  7. 单选不生效为什么_单选、复选、switch、tabs、标签别傻傻分不清
  8. README.md怎么写比较好
  9. win7窗口颜色没有透明的解决方法
  10. 如何去优化一个网站做到更好
  11. 不平衡数据分类实证-R语言
  12. python ppt转图片_ppt一键转图片和pdf
  13. openlayers3(五)根据坐标点画圆、线、多边形
  14. Nacos服务---主流配置中心对比
  15. Twitter开发者账号【推特开发者文档系列10】——API参考索引
  16. YTU 3413: 小姬小姬小姬
  17. 安卓玩机搞机技巧综合资源-----卸载内置软件 获取root权限 刷写第三方ROM【六】
  18. 2016版excel_excel中yd是什么意思
  19. cocos2dx js 3.17.2 升级spine 兼容Spine v3.8 最新版
  20. 为什么很多大学生甚至研究生抛弃专业去做码农呢?

热门文章

  1. 如何打破自恋幻觉 武志红
  2. 关于长寿_你会长寿到永远吗
  3. 引入阿里云SDK,类找不到的问题
  4. 如何快速的了解gpt
  5. 计算机导论以python为舟大纲,清华大学出版社-图书详情-《计算机科学导论——以Python为舟(第3版)》...
  6. FZU Monthly-201910 tutorial
  7. 【Python】从爬虫开始吧——爬取妹子图整站
  8. android 悬浮球代码,Android 悬浮球
  9. 移动后端即服务(BaaS)市场现状及未来发展趋势
  10. C和C++的区别(2) 关键字