Dockerfile部署LNMP

一、LNMP架构

搭建一个lnmp环境,需要涉及到两个目录结构。一个是Dockerfile配置的目录结构,另一个是最终lnmp运行的目录结构。Dockerfile配置目录主要存放Dockerfile构建脚本和一些配置文件,lnmp运行目录主要存放程序运行产生的一些数据,比如mysql数据等。
以下是此次Dockerfile配置的目录结构,包括了nginx、php、mysql的配置文件。

[root@docker /opt]# ll mysqld/
总用量 47704
-rw-r--r-- 1 root root     1224 11月 13 23:34 Dockerfile
-rw-r--r-- 1 root root      556 11月 13 23:35 my.cnf
-rw-r--r-- 1 root root 48833145 11月 13 23:33 mysql-boost-5.7.20.tar.gz
-rw-r--r-- 1 root root      171 11月 13 23:36 run.sh
[root@docker /opt]# ll nginx/
总用量 9840
-rw-r--r-- 1 root root     627 11月 13 23:18 Dockerfile
-rw-r--r-- 1 root root  981687 11月 13 23:14 nginx-1.12.2.tar.gz
-rw-r--r-- 1 root root     791 11月 13 23:20 nginx.conf
-rw-r--r-- 1 root root 9082696 11月 13 23:15 wordpress-4.9.4-zh_CN.tar.gz
[root@docker /opt]# ll php/
总用量 19096
-rw-r--r--  1 root root      963 11月 13 23:52 Dockerfile
drwxrwxr-x 15 1000 1000     4096 9月  27 2017 php-7.1.10
-rw-r--r--  1 root root 19440059 11月 14 00:19 php-7.1.10.tar.gz
-rw-r--r--  1 root root     4462 11月 14 00:39 php-fpm.conf
-rw-r--r--  1 root root    71122 11月 14 00:20 php.ini
-rw-r--r--  1 root root    18524 11月 14 00:38 www.conf

二、所需安装包下载

链接:https://pan.baidu.com/s/1DB95Izwn54u8Za4tjNBdWA?pwd=4yxs 
提取码:4yxs 
复制这段内容后打开百度网盘手机App,操作更方便哦

 

任务需求:
(1)、使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台
(2)、限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap
(3)、限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s
(4)、将所有容器进行快照,然后将 Docker 镜像打包成 tar 包备份到本地

三、Dockerfile部署LNMP

先自定义网络,再使用指定IP运行docker

是LNMP各组件处于同一网段

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

[root@docker ~]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
d5a456f440cd   bridge      bridge    local
61afab7b07f5   host        host      local
f711d6884458   mynetwork   bridge    local
b5f2fbc24b81   none        null      local

[root@docker ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:33ff:fe3c:bcb3  prefixlen 64  scopeid 0x20<link>
        ether 02:42:33:3c:bc:b3  txqueuelen 0  (Ethernet)
        RX packets 9458  bytes 385476 (376.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19108  bytes 68273889 (65.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.20.0.1  netmask 255.255.0.0  broadcast 172.20.255.255
        ether 02:42:68:a3:3d:cd  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Docker各组件的ip为:

容器 操作系统 IP 软件
Nginx centos7 172.20.0.10 Docker-Nginx
MySQL centos7 172.20.0.20 Docker-Mysql
PHP centos7 172.20.0.30 Docker-php

3.1、构建Nginx镜像

(1)、创建nginx的工作目录

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

(2)、编辑Dockerfile配置文件

cat Dockerfile 
FROM centos:7
MAINTAINER this is nginx image <lnmp>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.2
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配置文件

cat 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.20.0.30:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

(4)、构建nginx镜像

[root@docker /opt/nginx]# docker build -t nginx:lnmp .
[+] Building 48.6s (13/13) FINISHED                                                               docker:default
 => [internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 666B                                                                        0.0s
 => [internal] load .dockerignore                                                                           0.0s
 => => transferring context: 2B                                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                 2.2s
 => CACHED [1/8] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32  0.0s
 => [internal] load build context                                                                           0.1s
 => => transferring context: 10.07MB                                                                        0.1s
 => [2/8] RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx      35.7s
 => [3/8] ADD nginx-1.12.2.tar.gz /usr/local/src/                                                           0.2s 
 => [4/8] WORKDIR /usr/local/src/nginx-1.12.2                                                               0.0s 
 => [5/8] RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_mod  7.6s 
 => [6/8] ADD nginx.conf /usr/local/nginx/conf/                                                             0.0s 
 => [7/8] ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html                                            0.6s 
 => [8/8] RUN chmod 777 -R /usr/local/nginx/html/                                                           1.1s 
 => exporting to image                                                                                      1.2s 
 => => exporting layers                                                                                     1.2s 
 => => writing image sha256:cded2fd2df295ec08e8303faf8fc9238d59b61d84d9f2d33a688df39f6b0cbf1                0.0s 
 => => naming to docker.io/library/nginx:lnmp                                                               0.0s

(5)、启动nginx容器

[root@docker /opt/nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginx        lnmp      cded2fd2df29   About a minute ago   608MB

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

[root@docker /opt/nginx]# docker inspect nginx
...
            "Networks": {
                "mynetwork": {
                    "IPAMConfig": {
                        "IPv4Address": "172.20.0.10"

...

[root@docker /opt/nginx]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED         STATUS         PORTS                               NAMES
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx

(6)、验证nginx

[root@docker /opt/nginx]# curl -I http://192.168.100.60:80
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 13 Nov 2023 15:28:18 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Mon, 13 Nov 2023 15:21:56 GMT
Connection: keep-alive
ETag: "65523f14-264"
Accept-Ranges: bytes

[root@docker /opt/nginx]# curl -I http://172.20.0.10:80
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 13 Nov 2023 15:28:28 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Mon, 13 Nov 2023 15:21:56 GMT
Connection: keep-alive
ETag: "65523f14-264"
Accept-Ranges: bytes

3.2、构建MySQL容器

(1)、创建MySQL工作目录

[root@docker /opt/nginx]# mkdir /opt/mysqld
[root@docker /opt/nginx]# cd /opt/mysqld
[root@docker /opt/mysqld]# 

(2)、编辑Dockerfile文件

[root@docker /opt/mysqld]# cat Dockerfile 
FROM centos:7
MAINTAINER this is mysql image <lnmp>
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)、编辑MySQL配置文件

[root@docker /opt/mysqld]# cat 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)、编写MySQL启动脚本

[root@docker /opt/mysqld]# cat run.sh 
#!/bin/bash

/usr/local/mysql/bin/mysqld
systemctl enable mysqld

(6)、构建MySQL镜像

[root@docker /opt/mysqld]# docker build -t mysql:lnmp .
[+] Building 591.6s (14/14) FINISHED                                                              docker:default
 => [internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 1.26kB                                                                      0.0s
 => [internal] load .dockerignore                                                                           0.0s
 => => transferring context: 2B                                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                 1.4s
 => CACHED [1/9] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32  0.0s
 => [internal] load build context                                                                           0.8s
 => => transferring context: 48.85MB                                                                        0.7s
 => [2/9] RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;use  33.6s
 => [3/9] ADD mysql-boost-5.7.20.tar.gz /usr/local/src/                                                    14.1s
 => [4/9] WORKDIR /usr/local/src/mysql-5.7.20/                                                              0.0s 
 => [5/9] RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.soc  507.9s 
 => [6/9] ADD my.cnf /etc/my.cnf                                                                            0.0s 
 => [7/9] RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf                          7.2s 
 => [8/9] WORKDIR /usr/local/mysql/bin/                                                                     0.0s 
 => [9/9] RUN ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/  1.9s 
 => exporting to image                                                                                     25.4s 
 => => exporting layers                                                                                    25.3s 
 => => writing image sha256:17aeac0f7ef8901572a24ca4623d44da7ae72e337607dba5fdf9b7dae309a9df                0.0s 
 => => naming to docker.io/library/mysql:lnmp                                                               0.0s

(7)、启动MySQL镜像

[root@docker /opt/mysqld]# docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp                                                                
3a250bbce6cce35046eb84f1eb2aa213d6716961a5c363478c111913f80e6782

[root@docker /opt/mysqld]# docker ps 
CONTAINER ID   IMAGE        COMMAND                   CREATED          STATUS          PORTS                               NAMES
3a250bbce6cc   mysql:lnmp   "/usr/sbin/init"          9 seconds ago    Up 3 seconds    3306/tcp                            mysql
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   23 minutes ago   Up 23 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx

(8)验证MySQL

[root@docker /opt/mysqld]# docker exec -it mysql bash
[root@3a250bbce6cc bin]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: activating (start) since Mon 2023-11-13 15:48:03 UTC; 55s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 85 ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 62 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   CGroup: /docker/3a250bbce6cce35046eb84f1eb2aa213d6716961a5c363478c111913f80e6782/system.slice/mysqld.service
           └─87 /usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid

3.3、构建PHP镜像

(1)、创建工作目录

[root@docker /opt/mysqld]# mkdir /opt/php
[root@docker /opt/mysqld]# cd /opt/php

(2)、编辑Dockerfile文件

[root@docker /opt/php]# cat 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.gz /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)、准备Dockerfile需要的PHP配置文件

该配置文件模板位于安装目录的 php-7.1.10/php.ini-development 位置
[root@localhost php]# vim php.ini
#939行,取消注释,修改
date.timezone = Asia/Shanghai
#1170行,修改
mysqli.default_socket = /usr/local/mysql/mysql.sock

tar xvf php-7.1.10.tar.gz
cp php-7.1.10/php.ini-development ./php.ini
[root@docker /opt/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]

(4)、配置php-fpm.conf文件

该配置文件位于
[root@docker /opt/php]# find ./ -name php-fpm.conf.in
./php-7.1.10/sapi/fpm/php-fpm.conf.in

[root@docker /opt/php]# cp ./php-7.1.10/sapi/fpm/php-fpm.conf.in ./php-fpm.conf

[root@docker /opt/php]# egrep -v "^;" php-fpm.conf | egrep -v "^$"
[global]
pid = run/php-fpm.pid
include=/usr/local/php/etc/php-fpm.d/*.conf

(5)、配置www.conf文件

该配置文件位于
[root@docker /opt/php]# find ./ -name www.conf.in
./php-7.1.10/sapi/fpm/www.conf.in

[root@docker /opt/php]# vim www.conf
#23、24行,修改用户和组
user = nginx
group = nginx
#36行,修改监听IP和端口为容器IP:9000端口
listen = 172.20.0.30:9000

[root@docker /opt/php]# cp ./php-7.1.10/sapi/fpm/www.conf.in ./www.conf

[root@docker /opt/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

(6)、构建PHP镜像

[root@docker /opt/php]# docker build -t php:lnmp .
[+] Building 250.3s (13/13) FINISHED                                                             docker:default
 => [internal] load build definition from Dockerfile                                                       0.0s
 => => transferring dockerfile: 1.00kB                                                                     0.0s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                1.7s
 => CACHED [1/8] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d3  0.0s
 => [internal] load build context                                                                          0.2s
 => => transferring context: 19.54MB                                                                       0.2s
 => [2/8] RUN yum install -y gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml  79.0s
 => [3/8] ADD php-7.1.10.tar.gz /usr/local/src/                                                            6.2s
 => [4/8] WORKDIR /usr/local/src/php-7.1.10                                                                0.5s 
 => [5/8] RUN ./configure --prefix=/usr/local/php --with-mysql-sock=/usr/local/mysql/mysql.sock --with-  160.7s 
 => [6/8] ADD php.ini     /usr/local/php/lib/                                                              0.0s 
 => [7/8] ADD php-fpm.conf /usr/local/php/etc/                                                             0.0s 
 => [8/8] ADD www.conf /usr/local/php/etc/php-fpm.d/                                                       0.0s 
 => exporting to image                                                                                     2.1s 
 => => exporting layers                                                                                    2.1s 
 => => writing image sha256:af8793e17ba4b10604dd642a378c69ba07564ec2350072fa0b1eada85e5bc415               0.0s 
 => => naming to docker.io/library/php:lnmp                                                                0.0s

(7)、启动PHP镜像

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

[root@docker /opt/php]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED             STATUS             PORTS                                       NAMES
b96869ae1432   php:lnmp     "/bin/sh -c '/usr/lo…"   12 seconds ago      Up 12 seconds      0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php
3a250bbce6cc   mysql:lnmp   "/usr/sbin/init"          58 minutes ago      Up 58 minutes      3306/tcp                                    mysql
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   About an hour ago   Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx

(8)、验证PHP

[root@docker /opt/php]# docker exec -it php bash
[root@b96869ae1432 php-7.1.10]# ps -aux 
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.2 113044 16604 pts/0    Ss+  16:46   0:00 php-fpm: master process (/usr/local/php/etc/p
nginx          7  0.0  0.1 113044  8716 pts/0    S+   16:46   0:00 php-fpm: pool www
nginx          8  0.0  0.1 113044  8768 pts/0    S+   16:46   0:00 php-fpm: pool www
root           9  0.1  0.0  11844  3012 pts/1    Ss   16:47   0:00 bash
root          23  0.0  0.0  51748  3536 pts/1    R+   16:47   0:00 ps -aux
[root@b96869ae1432 php-7.1.10]# exit
exit

3.4、启动 wordpress 服务

 (1)、MySQL授权:

[root@docker /opt/php]# docker exec -it mysql bash
[root@3a250bbce6cc bin]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


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.01 sec)

mysql> exit
Bye
[root@3a250bbce6cc bin]# exit
exit

浏览器访问测试:

http://192.168.100.60/wordpress/wp-admin/setup-config.php

 

配置:

 安装:

 

 登录:

 

四、将运行中的 docker容器保存为 docker 镜像并保存到本地tar包

#查看容器ID
[root@docker /opt]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                   CREATED          STATUS          PORTS                                       NAMES
b96869ae1432   php:lnmp     "/bin/sh -c '/usr/lo…"   35 minutes ago   Up 35 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php
3a250bbce6cc   mysql:lnmp   "/usr/sbin/init"          2 hours ago      Up 2 hours      3306/tcp                                    mysql
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   2 hours ago      Up 2 hours      0.0.0.0:80->80/tcp, :::80->80/tcp           nginx

# 将容器保存成镜像
[root@docker /opt]# docker commit 3a250bbce6cc wordpress:mysql
sha256:93e608356a55e1f029b80c3ebbaf7089898b9fc9b9f6a15c2f9e4e2b1865f1c6
[root@docker /opt]# docker commit f84017fa05ec wordpress:nginx
sha256:1e441558d6ab3c707499af47a214bcf34aaac20808329eb0d56eaeb7bccc8d44
[root@docker /opt]# docker commit b96869ae1432 wordpress:php
sha256:49774de6a417e6cd26d47fb382882b09711aa18eece394c6695aada78fb36c97

#查看镜像
[root@docker /opt]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
wordpress    nginx     1e441558d6ab   10 seconds ago       608MB
wordpress    mysql     93e608356a55   29 seconds ago       10.1GB
wordpress    php       49774de6a417   About a minute ago   1.37GB
php          lnmp      af8793e17ba4   36 minutes ago       1.37GB
mysql        lnmp      17aeac0f7ef8   2 hours ago          10.1GB
nginx        lnmp      cded2fd2df29   2 hours ago          608MB

[root@docker /opt]# docker save -o mywordpress_nginx_config.tar wordpress:nginx
[root@docker /opt]# docker save -o mywordpress_mysql_config.tar wordpress:mysql
[root@docker /opt]# docker save -o mywordpress_php_config.tar wordpress:php
[root@docker /opt]# ls
containerd  mysqld                        mywordpress_nginx_config.tar  nginx  test
Dockerfile  mywordpress_mysql_config.tar  mywordpress_php_config.tar    php

#从tar包导入镜像
[root@docker /opt]# docker load -i mywordpress_nginx_config.tar
Loaded image: wordpress:nginx

五、将镜像推送到Harbor仓库

#给镜像打标签
docker tag wordpress:mysql 192.168.100.54/library/wordpress:mysql
docker tag wordpress:php 192.168.100.54/library/wordpress:php
docker tag wordpress:nginx 192.168.100.54/library/wordpress:nginx

#推送镜像
docker push 192.168.100.54/library/wordpress:nginx
docker tag wordpress:php 192.168.100.54/library/wordpress:php
docker tag wordpress:mysql 192.168.100.54/library/wordpress:mysql

#删除192.168.100.54/library/wordpress tag镜像
[root@docker ~]# docker rmi 192.168.100.54/library/wordpress:nginx
Untagged: 192.168.100.54/library/wordpress:nginx
Untagged: 192.168.100.54/library/wordpress@sha256:eaf89f4b864359bf09a26df4b6e7a40c8cf650b2ab3c83f6786e433a86689a15
[root@docker ~]# docker rmi 192.168.100.54/library/wordpress:php
Untagged: 192.168.100.54/library/wordpress:php
Untagged: 192.168.100.54/library/wordpress@sha256:2fe700063118de10a9f555c851f72ed28c920199582afb523081ccaf7cef7401
[root@docker ~]# docker rmi 192.168.100.54/library/wordpress:mysql
Untagged: 192.168.100.54/library/wordpress:mysql
Untagged: 192.168.100.54/library/wordpress@sha256:cd3a26d1204d4fa8ae695b2e9fad9b570867d40c9ebb00574a26505db7e34d32

#查看
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
wordpress    nginx     1e441558d6ab   38 minutes ago      608MB
wordpress    mysql     93e608356a55   39 minutes ago      10.1GB
wordpress    php       49774de6a417   39 minutes ago      1.37GB
php          lnmp      af8793e17ba4   About an hour ago   1.37GB
mysql        lnmp      17aeac0f7ef8   2 hours ago         10.1GB
nginx        lnmp      cded2fd2df29   3 hours ago         608MB
[root@docker ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED             STATUS          PORTS                                       NAMES
b96869ae1432   php:lnmp     "/bin/sh -c '/usr/lo…"   About an hour ago   Up 20 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php
3a250bbce6cc   mysql:lnmp   "/usr/sbin/init"          2 hours ago         Up 20 minutes   3306/tcp                                    mysql
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   3 hours ago         Up 20 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx

在镜像仓库查看

 

参考:https://blog.csdn.net/cronaldo91/article/details/132347643

posted @ 2023-11-14 01:03  我的城市没有海  阅读(135)  评论(0)    收藏  举报