Docker容器与虚拟化技术:Dockerfile部署LNMP

news2025/7/19 9:58:04

目录

一、理论

1.LNMP架构

2.背景

3.Dockerfile部署LNMP

3.构建Nginx镜像

4.构建MySQL容器

5.构建PHP镜像

6.启动 wordpress 服务 

二、实验

 1.环境准备

2.构建Nginx镜像

3.构建MySQL容器

4.构建PHP镜像

5.启动 wordpress 服务 

三、问题

1.构建nginx镜像报错

2.构建php镜像报错

2.生成PHP镜像一直为Exited状态

3.wordpress页面无法跳转

4.如何将运行中的 docker容器保存为 docker 镜像并保存到本地tar包

 四、总结


一、理论

1.LNMP架构

(1)架构

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

lnmp
	- nginx
		- Dockerfile
		- nginx.conf
		- sites-enabled
			- default.conf
			...
	- php
		- Dockerfile
		- php.ini
		- php-fpm.conf
		- www.conf
	- mysql
		- Dockerfile
		- mysqld.cnf

2.背景

(1)项目环境

公司在实际的生产环境中,需要使用 Docker 技术在一台主机上创建 LNMP 服务并运行 Wordpress 网站平台。然后对此服务进行相关的性能调优和管理工作。

(2)所有安装包下载

nginx:

nginx:下载

MySQL:

MySQL :: MySQL 下载

PHP:

PHP: 下载

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

3.Dockerfile部署LNMP

(1)关闭防火墙

systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

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

是LNMP各组件处于同一网段

docker network create --subnet=172.20.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

Docker各组件的ip为:

容器操作系统IP地址主要软件
nginxCentOS 7172.20.0.10Docker-Nginx
mysqlCentOS 7172.20.0.20Docker-Mysql
phpCentOS 7172.20.0.30Docker-php
 

 此实验所需的软件有:

mysql-boost-5.7.20.tar.gz
nginx-1.12.0.tar.gz
php-7.1.10.tar.bz2
wordpress-4.9.4-zh_CN.tar.gz

检测网络:

[root@localhost nginx]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
67e4b5a96733   bridge      bridge    local
f0c0eb06bea1   host        host      local
74f81b65c02c   mynetwork   bridge    local
f20ccdc6d825   none        null      local
[root@localhost nginx]# 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:58ff:fe04:a8bd  prefixlen 64  scopeid 0x20<link>
        ether 02:42:58:04:a8:bd  txqueuelen 0  (Ethernet)
        RX packets 15632  bytes 631663 (616.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23932  bytes 92428320 (88.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.0.1  netmask 255.255.0.0  broadcast 172.20.255.255
        inet6 fe80::42:47ff:fe2b:be52  prefixlen 64  scopeid 0x20<link>
        ether 02:42:47:2b:be:52  txqueuelen 0  (Ethernet)
        RX packets 7  bytes 1189 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22  bytes 2393 (2.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.构建Nginx镜像

(1) 创建nginx的工作目录

mkdir /opt/nginx
cd /opt/nginx/

(2) 上传 nginx-1.12.0.tar.gz、wordpress-4.9.4-zh_CN.tar.gz 到 /opt/nginx/ 目录中

[root@localhost nginx]# rz -E
rz waiting to receive.
[root@localhost nginx]# ls
Dockerfile  nginx-1.12.0.tar.gz  nginx.conf  run.sh  wordpress-4.9.4-zh_CN.tar.gz

(3)编辑Dockerfile配置文件

vim 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.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;" ]

(4) 准备Dockerfile文件中所需要的其他配置文件

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

(5) 构建nginx镜像

docker build -t nginx:lnmp .

(6) 启动Nginx容器

docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.20.0.10 nginx:lnmp

(7)查看

docker inspect nginx
 "Networks": {
                "mynetwork": {
                    "IPAMConfig": {
                        "IPv4Address": "172.20.0.10"

(8)验证nginx

curl http://192.168.204.140:80

4.构建MySQL容器

(1) 创建MySQL工作目录

mkdir /opt/mysqld
cd /opt/mysqld

(2) 上传 mysql-boost-5.7.20.tar.gz 到 /opt/mysqld 目录中

[root@localhost mysql]# rz -E
rz waiting to receive.
[root@localhost mysql]# ls
mysql-boost-5.7.20.tar.gz

(3) 编辑Dockerfile文件

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

(4)编辑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

(5)编辑MySQL的启动脚本

vim run.sh
 
#!/bin/bash
/usr/local/mysql/bin/mysqld
systemctl enable mysqld

(6)构建MySQL镜像

docker build -t mysql:lnmp .

(7)启动MySQL镜像

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

(8)验证 mysql 

[root@localhost mysql]# docker exec -it mysql bash
[root@75e85cb863da bin]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: activating (start) since Fri 2023-08-18 06:15:20 UTC; 1min 54s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 99 ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 80 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   CGroup: /docker/75e85cb863da16ddb6d557159d0a946fc2841da58683486ec8781464bbf19a8d/system.slice/mysqld.service
           └─101 /usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/my...

5.构建PHP镜像

(1) 创建工作目录

mkdir /opt/php
cd /opt/php

(2)上传 php-7.1.10.tar.bz2 到 /opt/php 目录中

[root@localhost php]# ls
[root@localhost php]# rz -E
rz waiting to receive.
[root@localhost php]# ls
php-7.1.10.tar.bz2  php-fpm.conf  php.ini  www.conf

(3)编辑Dockerfile文件

vim 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

(4)准备Dockerfile需要的PHP配置文件

①配置php.ini文件

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]

②配置php-fpm.conf文件

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

③配置www.conf文件

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

(5)构建php镜像

docker build -t php:lnmp .

(6)启动PHP镜像

注意:此时MySQL容器要处于运行的状态

docker run -itd --name php --net mynetwork --ip 172.20.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp

(7) 验证php

(1)进入php容器

[root@localhost php]# docker exec -it php bash
[root@12a35bf91472 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 pts/0    Ss+  07:01   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nginx         7  0.0  0.0 113028  3772 pts/0    S+   07:01   0:00 php-fpm: pool www
nginx         8  0.0  0.0 113028  3772 pts/0    S+   07:01   0:00 php-fpm: pool www
root          9  0.6  0.0  11828  1892 pts/1    Ss   07:02   0:00 bash
root         23  0.0  0.0  51732  1724 pts/1    R+   07:02   0:00 ps -aux

6.启动 wordpress 服务 

(1) mysql 授权
进入 mysql 容器

[root@75e85cb863da 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.01 sec)

mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 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)

mysql> 

浏览器访问:

部署

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

二、实验

 1.环境准备

(1)关闭防火墙

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

是LNMP各组件处于同一网段

 

Docker各组件的ip为:

2.构建Nginx镜像

(1) 创建nginx的工作目录

(2) 上传 软件包到 /opt/nginx/ 目录中

 

(3)编辑Dockerfile配置文件

(4) 准备Dockerfile文件中所需要的其他配置文件

取消注释,指定PHP网页文件、指定IP和端口号

(5) 构建nginx镜像

(6) 启动Nginx容器

 (7)查看 

 

 (8)验证 nginx 

 

3.构建MySQL容器

(1) 创建MySQL工作目录

(2) 上传 mysql-boost-5.7.20.tar.gz 到 /opt/mysqld 目录中

(3) 编辑Dockerfile文件

(4)编辑mysql的配置文件

(5)构建MySQL镜像

(6)启动MySQL镜像

(7)验证 mysql 

4.构建PHP镜像

(1) 创建工作目录

(2)上传 php-7.1.10.tar.bz2 到 /opt/php 目录中

(3)编辑Dockerfile文件

(4)准备Dockerfile需要的PHP配置文件

(5)构建php镜像​​​​​​​

 ​​​​​​​

(6)启动PHP镜像

注意:此时MySQL容器要处于运行的状态

 查看,php镜像启动成功

(7) 验证php

5.启动 wordpress 服务 

(1)mysql 授权

进入mysql容器,登录数据库​​​​​​​

(2) 浏览器访问测试

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

进入配置页面

 输入用户名和密码

 现在安装

 设置用户名和密码

点击 登录

 登录成功

 进入系统

http://192.168.204.140/wordpress/wp-admin/

 首页展示

三、问题

1.构建nginx镜像报错

(1)报错

 (2)原因分析

存放的wordpress版本错误

(3)解决方法

重新上传(正确的为4.9.4)

2.构建php镜像报错

(1)报错

 (2)原因分析

存放的php版本错误

(3)解决方法

重新上传(正确的为bz2)

2.生成PHP镜像一直为Exited状态

(1)报错

PHP镜像一直为Exited状态

查看日志

 (2)原因分析

无法监听正确地址,需要修改监听地址

(3)修改配置文件​​​​​​​

3.wordpress页面无法跳转

(1)报错

访问页面无法跳转wordoress

(2)原因分析

 nginx配置文件反向代理地址填写错误,需要修改

(3)修改

4.如何将运行中的 docker容器保存为 docker 镜像并保存到本地tar包

(1)方法

1、docker commit <容器id> <镜像名>:<tag>     ---- 将容器保存成镜像,tag比如说latest
 
保存后 docker images 便可以看到镜像
 
2、docker save -o <tar包名>.tar <镜像名>:<tag>      ---- 将镜像保存为.tar文件,默认保存在当前目录

(2)从 tar 包导入docker镜像

1、docker load -i <tar包名>.tar     ---- 从 tar 包导入镜像
 
导入镜像后,通过 docker images 便可看到导入的镜像。
 
2、docker run -itd -p <本地端口>:<容器端口> <镜像名>:<tag>    ---- 通过镜像起容器

(3)案例「仅保存到tar包」

#查看容器ID
[root@localhost nginx]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                   CREATED             STATUS             PORTS                                       NAMES
8e4a9fe69ef3   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
a4a0028e17e9   php:lnmp     "/bin/sh -c '/usr/lo…"   About an hour ago   Up About an hour   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php
75e85cb863da   mysql:lnmp   "/usr/sbin/init"          3 hours ago         Up 3 hours         3306/tcp                                    mysql


# 将容器保存成镜像
[root@localhost nginx]# docker commit 8e4a9fe69ef3 jiajianwei/wordpress:nginx
sha256:38b898818fd95029b914009ceba88c54bd16bc5d1b03500127f14a1210cd757e
[root@localhost nginx]# docker commit a4a0028e17e9 jiajianwei/wordpress:php
sha256:73c263cec3817fe320b10ef81165f9516b7209b21efd7c9cea55ba7cb2b3b996
[root@localhost nginx]# docker commit 75e85cb863da jiajianwei/wordpress:mysql
sha256:04bd50e63925df7e7c56e2bb411376510619f78a989d0eedd33fad3b3a0a927b

#查看镜像
[root@localhost nginx]# docker images
REPOSITORY             TAG       IMAGE ID       CREATED             SIZE
jiajianwei/wordpress   mysql     04bd50e63925   4 seconds ago       10.1GB
jiajianwei/wordpress   php       73c263cec381   25 seconds ago      1.35GB
jiajianwei/wordpress   nginx     38b898818fd9   47 seconds ago      598MB
nginx                  lnmp      a01cdeeb3075   About an hour ago   598MB
php                    lnmp      9e5e554f9300   2 hours ago         1.35GB
mysql                  lnmp      b61c11e30aed   3 hours ago         10.1GB


[root@localhost appsVolumn]# docker save -o mywordpress_nginx_config.tar jiajianwei/wordpress:nginx
[root@localhost appsVolumn]# docker save -o mywordpress_mysql_config.tar jiajianwei/wordpress:mysql
[root@localhost appsVolumn]# docker save -o mywordpress_php_config.tar jiajianwei/wordpress:php
[root@localhost appsVolumn]# ls
mywordpress_mysql_config.tar  mywordpress_nginx_config.tar  mywordpress_php_config.tar

 

 

 四、总结

快速检索PHP配置文件:

egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$"

egrep -v "^;" php.ini | egrep -v "^$"

egrep -v "^;" www.conf | egrep -v "^$"

读取容器共享信息:


 #表示读取nginx容器的共享信息
--volumes-from nginx: 

 #表示读取mysql容器的共享信息
--volumes-from mysql: 

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

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

相关文章

库克发文庆祝苹果入华 30 周年

8月18日&#xff0c;苹果CEO蒂姆库克在微博上发布了一条庆祝苹果进入中国30周年的消息&#xff0c;称“我们衷心感谢所有的同事、顾客和合作伙伴&#xff01;” 此外&#xff0c;苹果官方新闻稿也发文庆祝入华 30 周年&#xff0c;库克在新闻稿中表示&#xff1a;“30 年来&am…

公文处理101:高效率的文件管理与优化流程

公文处理是每个企业和机构中不可或缺的日常工作。对公文的高效管理和流程优化不仅能提高工作效率&#xff0c;还能确保文件的安全、准确和及时性。本文为你提供一套公文处理的基础知识和技巧。 1.文件分类与归档 重要性&#xff1a;结构化的文件分类可以确保每个文档都能迅速找…

财务数据分析模板有哪些,能满足决策吗?

虽然企业的业务经营各有不同&#xff0c;但在财务数据分析上却有着相似的需求与流程&#xff0c;因此财务数据分析是可以形成一套标准化模板的。奥威BI数据可视化工具从多年丰富的BI项目中总结经验&#xff0c;形成一套标准化、系统化的财务数据分析模板&#xff0c;内含资产负…

比较20组迭代次数的大小36-12

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A有3个点&#xff0c;B有1个点&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 其中有20组数据 差值结构 迭代次数 构造平均列A 平均列A …

labelme安装以及标注自己的目标检测数据集

目录 一、labelme安装指令 二、使用教程 三、 快捷键 一、labelme安装指令 winR之后在弹出的对话框中输入cmd按回车进入终端 conda activate 虚拟环境名称 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/ 二、使用教程 安装成功之后在终端输入label…

支持多种推送方式的消息推送设计方案

文章目录 1 摘要2 消息推送架构3 数据库设计脚本4 核心代码4.1 消息推送业务实现4.2 消息重试推送 5 可优化思路6 Github 源码 1 摘要 通过邮件、短信等方式向用户发送通知是一项很常见的业务场景。如何设计一套好用、简洁消息推送架构&#xff1f;这是一个问题。本文将介绍一…

AI绘画小程序源码:创业的新机遇

随着AI绘画的兴起&#xff0c;人们对于这项技术的需求与日俱增。现有的小程序和AI绘图软件已经无法满足用户的画图需求&#xff0c;经常出现排队等待的情况&#xff0c;甚至有些人需要等上数小时&#xff0c;或者面对长达数万人的排队队伍。 因此&#xff0c;我们迫切需要新的、…

排污口水质在线监测,实时掌握排口水质助力生态治理

水是生命之源&#xff0c;良好的水生态环境是社会发展的必然要求。然而随着工业化和城市化的发展&#xff0c;人类面临空气和水环境污染等严峻挑战&#xff0c;其中水环境问题尤为突出。排污成为城市和工业生产过程中不可避免的环保问题。 为加快解决生态环境突出问题&#xff…

SparkSQL源码分析系列02-编译环境准备

本文主要描述一些阅读Spark源码环境的准备工作&#xff0c;会涉及到源码编译&#xff0c;插件安装等。 1. 克隆代码。 打开IDEA&#xff0c;在Git下的Clone中&#xff0c;输入 https://github.com/apache/spark&#xff0c;克隆代码到本地&#xff0c;CheckOut到目标版本Spar…

音视频FAQ(一):视频直播卡顿

一、摘要 本文介绍了视频直播卡顿的四个主要原因&#xff0c;用户网络问题、用户设备性能问题、技术路线的选择和实现问题。因本文主要阐述视频直播的卡顿&#xff0c;故技术路线的实现指的是&#xff1a;CDN供应商的实现问题&#xff0c;包含CDN性能不足、CDN地区覆盖不足。对…

修复由于找不到vcruntime140.dll,无法继续执行代码的问题

前段时间时间Office软件出现故障&#xff0c;但是由于一个项目没有做完&#xff0c;就没有卸载重新安装。刚抽时间卸载了Office2019&#xff0c;然后发现CAD、NX、Comsol等软件打开的时候报错&#xff1a;“由于找不到vcruntime140.dll 无法继续执行”。 于是我推测是刚才卸载…

数据集成中的关键挑战与策略:数据安全与隐私保护

在互联网的普及和信息技术的发展下&#xff0c;数据集成成为了现代社会中各个领域中不可或缺的任务。数据集成是指将来自不同数据源的数据整合到一个统一的数据集中&#xff0c;以便进行进一步的分析和利用。然而&#xff0c;由于数据的多样性和复杂性&#xff0c;数据集成过程…

git 开发环境配置

系统&#xff1a;Mac OS 1、下载git&#xff0c;官网已经推荐使用命令下载。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) 2、验证git是否安装成功 git --version 3、配置本地git全局变量 git config --global user.n…

面试题-React(三):什么是JSX?它与常规JavaScript有什么不同?

在React的世界中&#xff0c;JSX是一项引人注目的技术&#xff0c;它允许开发者在JavaScript中嵌套类似HTML的标签&#xff0c;用于描述UI组件的结构。本篇博客将通过丰富的代码示例&#xff0c;深入探索JSX语法&#xff0c;解析其在React中的用法和优势。 一、JSX基础语法 在…

决策准则之赫维兹准则、萨维奇遗憾准则、拉普拉斯不充分理由准则、沃尔德准则

一、Hurwicz criteria(赫维兹准则) 赫维兹准则是一种决策准则&#xff0c;用于在不确定条件下进行决策。考虑决策者对不同结果的态度&#xff0c;通过调整“乐观度参数”(optimism parameter)来权衡最优和最坏结果的可能性。 “乐观度参数”在0到1之间取值&#xff1a; 当乐…

推特群推王:引爆您的产品

作为出海市场的营销平台&#xff0c;Twitter的流量不断攀升&#xff0c;已然成为跨境贸易企业的一部分。当前&#xff0c;Twitter已不再是一个简单的社交平台&#xff0c;而是一个强大的营销平台&#xff0c;使企业能够与受众实时互动。然而&#xff0c;与其他社交媒体一样&…

springboot数据库密码加密的配置方法_Java

前言 由于系统安全的考虑&#xff0c;配置文件中不能出现明文密码的问题&#xff0c;本文就给大家详细介绍下springboot配置数据库密码加密的方法&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧 1.导入依赖 <!--数据库密码加密--> <dependency>&…

密码学学习笔记(十九):密码学关键术语的解释1

数据加密标准(DES) 数据加密标准是使用最广泛的加密体制&#xff0c;它于1977年被美国国家标准和技术研究所(NIST)采纳为联邦信息处理标准FIPS PUB 46。 DES3DESAES明文分组长度&#xff08;位&#xff09;6464128密文分组长度&#xff08;位&#xff09;6464128密钥长度&…

Spring-4-掌握Spring事务传播机制

今日目标 能够掌握Spring事务配置 Spring事务管理 1 Spring事务简介【重点】 1.1 Spring事务作用 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败 Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功同失败 1.2 案例分析Spring…

Nginx前后端服务器部署

Nginx作为正反向代理的中转站&#xff0c;是连接前后端网络服务的媒介 Nginx下载&#xff1a;http://nginx.org/download/http://nginx.org/download/ 一、上传到服务器固定路径下并解压 上传到/opt/software/nginx-1.19.0.tar.gz cd /opt/software/ tar -zxvf nginx-1.19.0.…