上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

利用docker的LNMP

guduadmin03小时前

目录

服务器环境 

任务需求

服务搭建

Nginx 

Mysql 

Php 

启动 wordpress 服务 


服务器环境 

容器    操作系统    IP地址    主要软件

nginx    CentOS 7    172.20.0.10    Docker-Nginx

mysql    CentOS 7   172.20.0.20   Docker-Mysql

php        CentOS 7    172.20.0.30    Docker-php

任务需求

使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台

限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap

限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s

将所有容器进行快照,然后将 Docker 镜像打包成 tar 包备份到本地

服务搭建

Nginx 

1. 建立工作目录

[root@docker ~]# mkdir /opt/nginx

[root@docker ~]# cd /opt/nginx

[root@docker nginx]# rz -E

rz waiting to receive.

#上传 nginx 安装包 nginx-1.12.0.tar.gz

[root@docker nginx]# rz -E

rz waiting to receive.

#上传 wordpress 服务包 wordpress-4.9.4-zh_CN.tar.gz

2. 编写 Dockerfile 脚本

[root@docker nginx]# vim Dockerfile

 

FROM centos:7

MAINTAINER this is nginx image

RUN yum -y install 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 4 && 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;" ]

3. 准备 nginx.conf 配置文件 

[root@docker nginx]# ls

Dockerfile  nginx-1.12.0.tar.gz  nginx.conf  wordpress-4.9.4-zh_CN.tar.gz

[root@docker nginx]# egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$"

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.20.0.30:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;

            include        fastcgi_params;

        }

    }

}

4. 生成镜像

[root@docker nginx]# docker build -t nginx:lnmp .

[root@docker nginx]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE

nginx        lnmp      35a6404fcfa1   5 seconds ago   522MB

centos       7         eeb6ee3f44bd   4 weeks ago     204MB

5. 创建自定义网络 

[root@docker nginx]# docker network create --subnet=172.20.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

cdc7b80633abf6c1f573528234f024f6088340475acae277d9710f0d2d5dc400

[root@docker nginx]# docker network ls
利用docker的LNMP,第1张

[root@benet23 nginx]# ifconfig docker1

docker1: flags=4099  mtu 1500
利用docker的LNMP,第2张

6. 启动镜像容器 

[root@benet23 nginx]# docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.20.0.10 nginx:lnmp

24cbedd7982b1cf658cff4efd1ea75a5bfe252b6d01b2a222ed4cde63215479d

[root@benet23 nginx]# docker ps

利用docker的LNMP,第3张

[root@benet23 nginx]# docker inspect nginx

利用docker的LNMP,第4张

7.测试

curl http://192.168.90.10:80

利用docker的LNMP,第5张

Mysql 

1. 建立工作目录

[root@benet23 nginx]# mkdir /opt/mysql

[root@benet23 nginx]# cd /opt/mysql/

[root@benet23 mysql]# rz -E

rz waiting to receive.

#传入mysql安装包mysql-boost-5.7.20.tar.gz

2. 编写 Dockerfile 

[root@docker mysql]# vim Dockerfile 

 

FROM centos:7

MAINTAINER this is mysql image

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 -j4;make install

ADD 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" ]

CMD ["/usr/sbin/init"]

3. 准备 my.cnf 文件 

[root@docker 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 = 1

 

sql_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

4. 生成镜像 

[root@docker mysql]# docker build -t mysql:lnmp .

[root@docker mysql]# docker images
利用docker的LNMP,第6张

5. 启动镜像容器 

[root@benet23 mysql]# docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /sys/fs/cgroup:/sys/fs/cgroup --net mynetwork --ip 172.20.0.20 mysql:lnmp

[root@benet23 mysql]# docker ps -a

利用docker的LNMP,第7张

6. 验证 mysql 

[root@benet23 mysql]# docker exec -it mysql bash

[root@e75631cda20b bin]# systemctl status mysqld
利用docker的LNMP,第8张

Php 

1. 建立工作目录

[root@benet23  mysql]# mkdir ../php

[root@benet23  mysql]# cd ../php/

[root@benet23  php]# rz -E

rz waiting to receive.

#传入php安装包php-7.1.10.tar.bz2

2. 编写 Dockerfile 脚本 

[root@benet23 php]# vim Dockerfile 

 

FROM centos:7

MAINTAINER this is php image

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

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

3.1 php.ini

该配置文件模板位于安装目录的 php-7.1.10/php.ini-development 位置

[root@benet23 php]# vim php.ini

 

#939行,取消注释,修改

date.timezone = Asia/Shanghai

#1170行,修改

mysqli.default_socket = /usr/local/mysql/mysql.sock

[root@benet23 php]# egrep -v "^;" php.ini | egrep -v "^$"[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]

3.2 php-fpm.conf 

该配置文件位于 /usr/local/php/etc/php-fpm.conf.default

[root@docker php]# vim php-fpm.conf 

 

#17行,删除注释符号“;”

pid = run/php-fpm.pid

[root@docker php]# egrep -v "^;" php-fpm.conf | egrep -v "^$"

[global]

pid = run/php-fpm.pid

include=/usr/local/php/etc/php-fpm.d/*.conf

3.3 www.conf 

该配置文件位于 usr/local/php/etc/php-fpm.d/www.conf.default

[root@docker php]# vim www.conf 

 

#23、24行,修改用户和组

user = nginx

group = nginx

#36行,修改监听IP和端口为容器IP:9000端口

listen = 172.20.0.30:9000

[root@docker php]# egrep -v "^;" www.conf | egrep -v "^$"

[www]

user = nginx

group = nginx

listen = 172.20.0.30:9000

pm = dynamic

pm.max_children = 5

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 3

4. 生成镜像 

[root@benet23  php]# docker build -t php:lnmp .

[root@benet23 php]# docker images
利用docker的LNMP,第9张

5. 启动镜像容器 

[root@benet23 php]# docker run -itd --name php --net mynetwork --ip 172.20.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp

38c3d71f3e4afcf060cb471ecd9c409d7f236b651bec752139cd5fd32916ee77

[root@benet23 php]# docker ps
利用docker的LNMP,第10张

6. 验证 php 

[root@benet23 php]# docker exec -it php bash

[root@03e251af5164 php-7.1.10]# ps -aux
利用docker的LNMP,第11张

启动 wordpress 服务 

1. mysql 授权

进入 mysql 容器

[root@e75631cda20b bin]# mysql -u root -p

Enter password: 

#初始密码为空

mysql> create database wordpress;

Query OK, 1 row affected (0.00 sec)

 

mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

2. 浏览器访问测试 

访问 http://192.168.90.10/wordpress/index.php

利用docker的LNMP,第12张

网友评论

搜索
最新文章
热门文章
热门标签