Docker构建LNMP部署WordPress

news2024/11/24 11:56:37

前言

使用容器化技术如 Docker 可以极大地简化应用程序的部署和管理过程,本文将介绍如何利用 Docker 构建 LNMP 环境,并通过部署 WordPress 来展示这一过程。

目录

一、环境准备

1. 项目需求

2. 安装包下载

3. 服务器环境

4. 规划工作目录 

5. 创建自定义网络 

二、Nginx 镜像创建

1. 建立工作目录

2. 编写 Dockerfile 文件

3. 准备 nginx.conf 配置文件

4. 生成镜像

5. 启动镜像容器 

6. 验证 nginx

三、Mysql 镜像创建

1. 进入工作目录 

2. 编写 Dockerfile 文件

3. 准备 my.cnf 文件

4. 生成镜像

5. 启动镜像容器

6. 验证 mysql

四、Php 镜像创建

1. 进入工作目录 

2. 编写 Dockerfile 文件

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

3.1 php.ini

3.2 php-fpm.conf

3.3 www.conf 

4. 生成镜像

5. 启动镜像容器 

6. 验证 php

7. 进入容器登录 mysql 授权

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

9. 浏览器访问 wordpress

五、Docker 镜像打包

1. 基本信息

2. 容器导出  


一、环境准备

1. 项目需求

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

2. 安装包下载

wget https://cdn.mysql.com//archives/mysql-5.7/mysql-boost-5.7.20.tar.gz
wget http://nginx.org/download/nginx-1.12.0.tar.gz
wget https://www.php.net/distributions/php-7.1.10.tar.bz2
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

3. 服务器环境

容器名宿主机系统/配置IP地址Docker版本基于镜像安装软件
nginxCentos 7.4;4C/8G172.19.8.1020.10.17centos:7

Docker-Nginx

Docker-Wordpress

mysqlCentos 7.4;4C/8G172.19.8.2020.10.17centos:7Docker-Mysql
phpCentos 7.4;4C/8G172.19.8.3020.10.17centos:7Docker-php

安装 docker-ce-20.10.17: 

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装所需的依赖
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 添加Docker官方仓库,正常后面还是用国内阿里源更合适
sudo yum makecache fast
# 更新Yum缓存
sudo yum install docker-ce-20.10.17 docker-ce-cli-20.10.17 containerd.io
# 安装Docker CE 20.10.17
sudo systemctl start docker
sudo systemctl enable docker
# 启动并启用Docker服务
docker --version
# 验证安装

4. 规划工作目录 

[root@localhost ~]# tree /lnmp/ -L 2
/lnmp/
├── images
│   ├── mysql_image.tar
│   ├── nginx_image.tar
│   └── php_image.tar
├── mysql
│   ├── Dockerfile
│   ├── my.cnf
│   └── mysql-boost-5.7.20.tar.gz
├── nginx
│   ├── Dockerfile
│   ├── html
│   ├── nginx-1.12.0.tar.gz
│   ├── nginx.conf
│   └── wordpress-4.9.4-zh_CN.tar.gz
└── php
    ├── Dockerfile
    ├── php-7.1.10.tar.bz2
    ├── php-fpm.conf
    ├── php.ini
    └── www.conf

5. 创建自定义网络 

创建了一个名为 mynetwork 的自定义 Docker 网络,子网为 172.19.0.0/16,并指定了桥接名称为 docker1。

[root@localhost ~]# docker network create --subnet=172.19.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
d2b40d071ba33351aeb1d4a6a8d9738fb6fb7a01991bd26c8fdb7244fce3819f
[root@localhost ~]# docker network ls | grep mynetwork
d2b40d071ba3   mynetwork   bridge    local
[root@localhost ~]# docker inspect d2b40d071ba3 | grep -i subnet
                    "Subnet": "172.19.0.0/16"
# 可以看到网络的子网是172.19.0.0/16

二、Nginx 镜像创建

1. 建立工作目录

[root@localhost ~]# mkdir /lnmp/{nginx,mysql,php} -p
[root@localhost nginx]# ls
nginx-1.12.0.tar.gz  wordpress-4.9.4-zh_CN.tar.gz  # 准备安装包
[root@localhost nginx]# mkdir html/
[root@localhost nginx]# tar zxvf wordpress-4.9.4-zh_CN.tar.gz -C /lnmp/nginx/html
[root@localhost nginx]# cd html/;ls
wordpress
[root@localhost html]# cd wordpress/;ls
index.php        wp-admin              wp-content         wp-load.php      wp-signup.php
license.txt      wp-blog-header.php    wp-cron.php        wp-login.php     wp-trackback.php
readme.html      wp-comments-post.php  wp-includes        wp-mail.php      xmlrpc.php
wp-activate.php  wp-config-sample.php  wp-links-opml.php  wp-settings.php
# 准备 wordpress 网站文件

2. 编写 Dockerfile 文件

[root@localhost wordpress]# cd ../..     
[root@localhost nginx]# vim Dockerfile   
FROM centos:7                           # 基于centOS:7镜像作为基础镜像
MAINTAINER nginx image <fql>            # 指定镜像的维护者信息
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make # yum安装必要的软件包至镜像;
RUN useradd -M -s /sbin/nologin nginx   # 创建nginx的系统用户,且无法登录系统
ADD nginx-1.12.0.tar.gz /usr/local/src/ # 将nginx文件解压到/usr/local/src/目录下
WORKDIR /usr/local/src/nginx-1.12.0     # 工作目录切换
RUN ./configure \                       # 配置、编译并安装Nginx,指定安装路径、用户、用户组以及使用了 with-http_sub_status_module 模块
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j 4 && make instal
ENV PATH /usr/local/nginx/sbin:$PATH    # 将Nginx可执行文件路径添加到环境变量中
ADD nginx.conf /usr/local/nginx/conf/   # 将宿主机当前目录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                               # 暴露容器的80端口,http
EXPOSE 443                              # 暴露容器的443端口,https
VOLUME [ "/usr/local/nginx/html/" ]     # 在Docker内创建挂载点
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ] 
# 启动Nginx并以非守护进程方式运行

3. 准备 nginx.conf 配置文件

[root@localhost nginx]# egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$"
# 从文件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$ {                  # 指定了匹配请求URI以.php结尾的条件,~表示使用正则表达式匹配
            root           html;             # 查找文件的根目录为html
            fastcgi_pass   172.19.0.30:9000; # Nginx将把.php文件发送到172.19.0.30上的FastCGI服务器的9000端口
            fastcgi_index  index.php;        # 当请求URI以/结尾时,Nginx应该使用的默认文件
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
# 这个参数告诉FastCGI服务器要执行的PHP脚本的路径。$fastcgi_script_name是一个FastCGI变量,代表请求的文件路径
            include        fastcgi_params;   # 包含了一个外部文件fastcgi_params
        }
    }
}
# 根据请求的URI找到对应的PHP文件,将请求发送给FastCGI服务器进行处理,并设置一些FastCGI参数。这样可以实现在Nginx服务器上运行PHP脚本的功能。

4. 生成镜像

[root@localhost nginx]# docker build -t nginx:lnmp .
[root@localhost nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        lnmp      b0ab50b55dac   43 seconds ago   569MB
nginx        latest    7383c266ef25   4 days ago       188MB
centos       7         eeb6ee3f44bd   2 years ago      204MB

5. 启动镜像容器 

限制 Nginx 容器最多使用 512Mb 的内存和 1G 的 Swap:

[root@localhost nginx]# docker run -d --name nginx -p 80:80 -m 512M --memory-swap=1G -v /lnmp/nginx/html:/usr/local/nginx/html --net mynetwork --ip 172.19.0.10 nginx:lnmp
30bac7a9755929001177b15047c39680cc0a26ea8ddf17ea32fd31045b3c6aa1
[root@localhost nginx]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                        NAMES
30bac7a97559   nginx:lnmp   "/usr/local/nginx/sb…"   50 seconds ago   Up 48 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   nginx
[root@localhost nginx]# docker inspect nginx 
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.10",
[root@localhost nginx]# docker stats
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O       BLOCK I/O   PIDS
30bac7a97559   nginx     0.00%     952KiB / 512MiB     0.18%     2.41kB / 0B   0B / 0B     2

6. 验证 nginx

在宿主机目录建立html文件:
[root@localhost nginx]# echo nginx welcome > html/index.html

三、Mysql 镜像创建

1. 进入工作目录 

[root@localhost nginx]# cd ../mysql/
[root@localhost mysql]# ls
mysql-boost-5.7.20.tar.gz    # 准备安装包

2. 编写 Dockerfile 文件

[root@localhost mysql]# vim Dockerfile
FROM centos:7
MAINTAINER mysql image <fql>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/ # 将MySQL源代码包解压缩到镜像/usr/local/src/目录下
WORKDIR /usr/local/src/mysql-5.7.20/          # 设置工作目录为MySQL源代码包的目录
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
ADD my.cnf /etc/
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH # 将MySQL的可执行文件路径添加到环境变量中
RUN useradd -M -s /sbin/nologin  mysql
RUN chown mysql:mysql /etc/my.cnf
RUN chown -R mysql:mysql /usr/local/mysql/
RUN /usr/local/mysql/bin/mysqld \    # 运行MySQL的初始化命令,初始化MySQL数据库
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
EXPOSE 3306
CMD ["/usr/local/mysql/bin/mysqld"]  # 启动MySQL数据库服务

3. 准备 my.cnf 文件

[root@localhost mysql]# cat my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash

[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. 生成镜像

Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum makecache
# 如果遇到类似dns问题,可修改dns、替换阿里源尝试解决

[root@localhost mysql]# docker build -t mysql:lnmp .
[root@localhost mysql]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
mysql        lnmp      2b328d4ecd04   About a minute ago   10.1GB
nginx        lnmp      b0ab50b55dac   2 hours ago          569MB

5. 启动镜像容器

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

[root@localhost mysql]# docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql -P --net mynetwork --ip 172.19.0.20 mysql:lnmp
ddd452f38b116b7c01a85676837933d25cacb53e65e2a61f36e43e7725544bae
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED             STATUS          
7da2cc6a302c   nginx:lnmp   "/usr/local/nginx/sb…"   About an hour ago   Up 15 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp    nginx
817aedefb6f6   mysql:lnmp   "/usr/local/mysql/bi…"   About an hour ago   Up 14 minutes   0.0.0.0:49153->3306/tcp, :::49153->3306/tcp   mysql

测试IO:

[root@localhost mysql]# docker exec -it mysql /bin/bash
[root@ddd452f38b11 mysql-5.7.20]# dd if=/dev/zero of=test bs=20M count=5 oflag=direct
5+0 records in
5+0 records out
104857600 bytes (105 MB) copied, 9.97887 s, 10.5 MB/s
# 速率限制是近似值,并且在实际应用中可能会有一些波动

6. 验证 mysql

容器登录:
[root@localhost mysql]# docker exec -it mysql /bin/bash
[root@ddd452f38b11 mysql-5.7.20]# mysql -uroot -p   # 默认没有密码,直接回车
mysql>

远程登录:
[root@slave01 ~]# mysql -u root -h 192.168.190.108 -P 49153 -p'abc123'
mysql>

四、Php 镜像创建

1. 进入工作目录 

[root@localhost mysql]# cd ../php/
[root@localhost php]# ls
php-7.1.10.tar.bz2        # 准备安装包

2. 编写 Dockerfile 文件

[root@localhost php]# vim Dockerfile
FROM centos:7
MAINTAINER php image <fql>
RUN yum -y install 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
RUN useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src/ # 将php文件解压并复制到/usr/local/src/目录下
WORKDIR /usr/local/src/php-7.1.10      # 设置工作目录
RUN ./configure \                      # 配置PHP编译选项
--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 # 将PHP可执行文件路径添加到系统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                                        # 暴露容器的9000端口,用于PHP-FPM服务
ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ] # 启动PHP-FPM服务并以守护进程方式运行

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

  • php.ini 用于配置 PHP 的运行时参数和特性
  • php-fpm.conf 用于配置 PHP-FPM 的全局行为和进程管理
  • www.conf 用于配置 PHP-FPM 的进程池参数,如进程数和管理方式
[root@localhost php]# ls
Dockerfile  php-7.1.10.tar.bz2  php-fpm.conf  php.ini  www.conf

3.1 php.ini

[root@localhost php]# vim php.ini
 939 date.timezone = Asia/Shanghai  # 取消注释,修改
1170 mysqli.default_socket = /usr/local/mysql/mysql.sock
# MySQL数据库的默认socket文件路径,用于PHP连接MySQL数据库时寻找MySQL服务器的通信端口
[root@localhost php]# egrep -v "^;" php.ini | egrep -v "^$"
# 显示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]

3.2 php-fpm.conf

[root@localhost php]# vim php-fpm.conf
 17 pid = run/php-fpm.pid        # 删除注释符号“;”
[root@localhost 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 

[root@localhost php]# vim www.conf
 23 user = nginx
 24 group = nginx
 36 listen = 172.19.0.30:9000  # 修改监听IP和端口为容器IP:9000端口
[root@localhost php]# egrep -v "^;" www.conf | egrep -v "^$"
[www]
user = nginx
group = nginx
listen = 172.19.0.30:9000
listen.allowed_clients = 127.0.0.1,172.19.0.10
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

4. 生成镜像

[root@localhost php]# docker build -t php:lnmp .
[root@localhost php]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
php          lnmp      39e39b251e20   24 seconds ago   1.4GB
mysql        lnmp      2b328d4ecd04   44 minutes ago   10.1GB
nginx        lnmp      b0ab50b55dac   2 hours ago      569MB

5. 启动镜像容器 

[root@localhost php]# docker run --name=php -d -p 9000:9000 --volumes-from mysql --volumes-from nginx --net mynetwork --ip 172.19.0.30 php:lnmp
5e91e0162badda54ad70cb39240b3b7e633b5764ad12830edad17f6c152645d9
[root@localhost php]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS             PORTS                                        NAMES
5e91e0162bad   php:lnmp     "/usr/local/php/sbin…"   5 seconds ago    Up 3 seconds       0.0.0.0:9000->9000/tcp, :::9000->9000/tcp    php
ddd452f38b11   mysql:lnmp   "/usr/local/mysql/bi…"   43 minutes ago   Up 43 minutes      3306/tcp                                     mysql
30bac7a97559   nginx:lnmp   "/usr/local/nginx/sb…"   2 hours ago      Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   nginx

6. 验证 php

[root@localhost php]# docker exec -it php /bin/bash
[root@5e91e0162bad php-7.1.10]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0 113028  7520 ?        Ss   09:39   0:00 php-fpm: master process (/usr/loc
nginx         8  0.0  0.0 113028  3768 ?        S    09:39   0:00 php-fpm: pool www
nginx         9  0.0  0.0 113028  3768 ?        S    09:39   0:00 php-fpm: pool www
root         10  1.5  0.0  11828  1880 pts/0    Ss   09:46   0:00 /bin/bash
root         24  0.0  0.0  51732  1724 pts/0    R+   09:46   0:00 ps -aux

7. 进入容器登录 mysql 授权

[root@localhost php]# docker exec -it mysql /bin/bash
[root@ddd452f38b11 mysql-5.7.20]# mysql 
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
mysql> flush privileges;

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

[root@localhost ~]# cd /lnmp/nginx/html/wordpress
[root@localhost wordpress]# cp wp-config-sample.php wp-config.php
[root@localhost wordpress]# vim wp-config.php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', '123456');
# 修改WordPress数据库信息

9. 浏览器访问 wordpress

http://192.168.190.108/wordpress/index.php

五、Docker 镜像打包

1. 基本信息

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED             STATUS          PORTS                                         NAMES
b4d901f2bccc   php:lnmp     "/bin/sh -c '/usr/lo…"   30 minutes ago      Up 11 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp     php
7da2cc6a302c   nginx:lnmp   "/usr/local/nginx/sb…"   About an hour ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp    nginx
817aedefb6f6   mysql:lnmp   "/usr/local/mysql/bi…"   About an hour ago   Up 11 minutes   0.0.0.0:49153->3306/tcp, :::49153->3306/tcp   mysql
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
php          lnmp      d36e706ae5d6   31 minutes ago      1.4GB
nginx        lnmp      a6b0e83b8ff8   About an hour ago   569MB
mysql        lnmp      2b328d4ecd04   5 hours ago         10.1GB

2. 容器导出  

[root@localhost ~]# mkdir /lnmp/images
[root@localhost ~]# cd /lnmp/images/
[root@localhost images]# docker export nginx > nginx_image.tar
[root@localhost images]# docker export mysql > mysql_image.tar
[root@localhost images]# docker export php > php_image.tar
[root@localhost images]# ll -h
总用量 9.4G
-rw-r--r--. 1 root root 7.6G 4月  28 22:11 mysql_image.tar
-rw-r--r--. 1 root root 503M 4月  28 22:06 nginx_image.tar
-rw-r--r--. 1 root root 1.3G 4月  28 22:13 php_image.tar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无言:破局之道:顿悟+坚持——早读(逆天打工人爬取热门微信文章解读)

致无言 引言Python 代码第一篇 洞见 7年跟踪调查北京28个精英家庭&#xff1a;为什么顶尖大学孩子大多来自有钱家庭&#xff1f;第二篇 人民日报 来了&#xff01;新闻早班车要闻社会政策 结尾 控制你的情绪 否则它将控制你 在紧张的游戏中 控制情绪 避免冲动行为 是每个玩家的…

Redis 实战1

SDS Redis 只会使用 C 字符串作为字面量&#xff0c; 在大多数情况下&#xff0c; Redis 使用 SDS &#xff08;Simple Dynamic String&#xff0c;简单动态字符串&#xff09;作为字符串表示。 比起 C 字符串&#xff0c; SDS 具有以下优点&#xff1a; 常数复杂度获取字符串…

设计模式之模板模式TemplatePattern(五)

一、模板模式介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式&#xff08;Template Pattern&#xff09;&#xff0c; 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现&#xff0c;但可以成为典型类中…

基于Springboot的校园食堂订餐系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园食堂订餐系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

在离线环境中将 CentOS 7.5 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文将说明如何在离线环境中将 CentOS 7.5 升级并迁移至 RHEL 7.9。为了简化准备过程&#xff0c;本文前面将在在线环境中安装用到的各种所需验证软件&#xff0c;而在后面升级迁移的时候再切换到由 ISO 构成的离线 Yum Repo…

前端工程化03-贝壳找房项目案例JavaScript常用的js库

4、项目实战&#xff08;贝壳找房&#xff09; 这个项目包含&#xff0c;基本的ajax请求调用,内容的渲染&#xff0c;防抖节流的基本使用&#xff0c;ajax请求工具类的封装 4.1、项目的接口文档 下述接口文档&#xff1a; 简述内容baseURL&#xff1a;http://123.207.32.32…

macOS sonoma 14.4.1编译JDK 12

macOS sonoma 14.4.1编译JDK 12 环境参考文档开始简述问题心路历程着手解决最终解决(前面有点啰嗦了&#xff0c;可以直接看这里) 记录一次靠自己看代码解决问题的经历(总之就是非常开心)。 首先&#xff0c;先diss一下bing&#xff0c;我差一点就放弃了。 环境 macOS sonom…

excel怎么删除条件格式规则但保留格式?

这个问题的意思就是要将设置的条件格式&#xff0c;转换成单元格格式。除了使用VBA代码将格式转换外&#xff0c;还可以用excel自己的功能来完成这个任务。 一、将条件格式“留下来” 1.设置条件格式 选中数据&#xff0c;点击开始选项卡&#xff0c;设置条件格式&#xff0…

2024五一数学建模C题煤矿深部开采冲击地压危险预测原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024五一数学建模竞赛C题的完整论文啦。 实在精力有限&#xff0c;具体的讲解大家可以去讲解视频&#xff1a; 2024五一数学建模C题完整原创论文讲解&#xff0c;手把手保姆级教学&#xff01;_哔哩哔哩_bilibili 202…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外&#xff0c;读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

ChatGPT的AI“记忆”可以记住付费客户的偏好

通过记住有关 ChatGPT Plus 订阅者的详细信息&#xff0c;OpenAI 的聊天机器人添加了更多个人助理风格的功能 OpenAI 在今年二月宣布了 “记忆 ”功能&#xff0c;该功能允许 ChatGPT 更永久地存储查询、提示和其他自定义功能。当时&#xff0c;只有 “一小部分 ”用户可以使用…

虚拟机网络桥接模式无法通信,获取到的ip为169.254.X.X

原因&#xff1a;VMware自动选择的网卡可能不对 解决&#xff1a;编辑-虚拟网络编辑器-更改桥接模式-选择宿主机物理网卡&#xff0c;断开虚拟机网络连接后重新连接即可

精简函数栈帧:优化创建和销毁过程的完全解析(建议收藏,提升内功)

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 【前文】一、函数栈帧的概念&#xff08;stack frame&#xff…

uniapp 自定义相机插件(组件版、缩放、裁剪)组件 Ba-CameraView

自定义相机插件&#xff08;组件版、缩放、裁剪&#xff09; Ba-CameraView 简介&#xff08;下载地址&#xff09; Ba-CameraView 是一款自定义相机拍照组件&#xff0c;支持任意界面&#xff0c;支持裁剪 支持任意自定义界面支持手势缩放支持裁剪&#xff08;手势拖动、比…

等级保护测评一般多长时间能做完?

一个二级或三级的系统&#xff0c;整体持续周期一到两个月 具体时间还要根据信息系统数量&#xff0c;及信息系统的规模&#xff0c;以及测评方与被测方的配合情况等&#xff0c;有所增减。 现场测评周期一般一周左右 小规模安全整改&#xff0c;包括管理制度策略配置技术&a…

【算法设计与分析】实验报告c++python实现(TSP问题、哈夫曼编码问题、顾客安排问题、最小生成树问题、图着色问题)

一、实验目的 1&#xff0e;加深学生对贪心算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用贪心算…

基于Springboot的web后端开发三层架构上手实操

引言 我们拿到了xml文件 我们要将将xml文件中的数据加载并解析 完成数据的处理 并且返回给前端页面(result格式) 1.将xml文件放在resources目录下 xml是我们需要解析的文件 查看xml文件 2.在springboot中引入dom4j依赖 解析xml需要在springboot中引入dom4j依赖 这边我们…

iOS 创建依赖其他开源库的开源库

参考文章&#xff08;感激各位大神前路的明灯&#xff09; 参考文章一 参考项目 整体流程 流程简介 1&#xff09;使用pod命令行创建本地项目和git仓库并回答终端里的四个问题 2&#xff09;编辑podspec文件 3&#xff09;将需要开源的代码添加到Development Pods文件夹中&am…

2024第84届中国(云南昆明)教育装备展示会

关于第84届中国教育装备展示会将在云南昆明举办&#xff01; 谨此奉邀! 第84届中国教育装备展示会组委会 一、展会时间、地点 布展时间&#xff1a;2024年10月22日-24日 开展时间&#xff1a;2024年10月25日-27日 撤展时间&#xff1a;2024年10月27日 16:00-24:00 地点&a…

2024年5月前端面试记录:裸辞、旅游、面试

在职期间面试 富途 有效括号匹配 判断b是否是a的子集&#xff08;a和b有重复元素&#xff0c;要求b的同个元素出现次数<a的同个元素出现次数&#xff09; 离职原因 最有挑战的项目 技术分享做过哪些 如何发现用户痛点并解决 vue和react的相同点和不同点 单项数据流…