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

这篇具有很好参考价值的文章主要介绍了Docker容器与虚拟化技术:Dockerfile部署LNMP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论

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包

 四、总结


 文章来源地址https://www.toymoban.com/news/detail-758741.html

 

 

 

一、理论

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

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

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地址 主要软件
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
 

 

 此实验所需的软件有:

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

①进入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)关闭防火墙

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

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

是LNMP各组件处于同一网段

 dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

Docker各组件的ip为:

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

2.构建Nginx镜像

(1) 创建nginx的工作目录

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

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

 dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(3)编辑Dockerfile配置文件dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

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

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

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

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(5) 构建nginx镜像dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(6) 启动Nginx容器

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 (7)查看 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 (8)验证 nginx dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

3.构建MySQL容器

(1) 创建MySQL工作目录

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

(2) 上传 mysql-boost-5.7.20.tar.gz 到 /opt/mysqld 目录中dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

(3) 编辑Dockerfile文件

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(4)编辑mysql的配置文件

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

(5)构建MySQL镜像dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(6)启动MySQL镜像dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

 

(7)验证 mysql 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

4.构建PHP镜像

(1) 创建工作目录dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

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

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(3)编辑Dockerfile文件

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

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

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(5)构建php镜像dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 ​​​​​​​dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(6)启动PHP镜像

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

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 查看,php镜像启动成功

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(7) 验证php

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

5.启动 wordpress 服务 

(1)mysql 授权

进入mysql容器,登录数据库​​​​​​​dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(2) 浏览器访问测试

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

进入配置页面

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 输入用户名和密码

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 现在安装

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 设置用户名和密码

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

点击 登录

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 登录成功dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 进入系统

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

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 首页展示

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

三、问题

1.构建nginx镜像报错

(1)报错

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 (2)原因分析

存放的wordpress版本错误

(3)解决方法

重新上传(正确的为4.9.4)

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

2.构建php镜像报错

(1)报错

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 (2)原因分析

存放的php版本错误

(3)解决方法

重新上传(正确的为bz2)

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

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

(1)报错

PHP镜像一直为Exited状态

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

查看日志

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 (2)原因分析

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

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

 

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

3.wordpress页面无法跳转

(1)报错

访问页面无法跳转wordoress

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

(2)原因分析

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

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

(3)修改

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

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

dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维dockerfile lnmp,Docker容器与虚拟化技术,docker,容器,运维

 

 

 四、总结

快速检索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: 

 

 

 

 

 

到了这里,关于Docker容器与虚拟化技术:Dockerfile部署LNMP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker容器与虚拟化技术:Docker架构、镜像管理

    目录 一、理论 1.Doker概述 2.Docker核心概念 3.Docker安装 4.Docker的镜像管理命令 二、实验 1.Docker安装 2.查看Docker信息 3.Docker的镜像管理命令 三、问题 1.如何注册Docker账号  2.如何设置Docker公共存储库 四、总结 (1) IT架构 裸金属 → 虚拟机 → 容器→ 函数化、代码化 云计算涌现出很

    2024年02月13日
    浏览(31)
  • Docker容器与虚拟化技术:Docker-Compose

    目录 一、理论 1.Docker-Compose 二、实验 1. Docker Compose 安装部署 2.Docker Compose撰写nginx 镜像 3.Docker Compose撰写tomcat 镜像 三、问题 1.Docker Compose 和 Dockerfile 的区别 四、总结 (1)使用场景 使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务

    2024年02月12日
    浏览(33)
  • Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

    目录 一、理论 1.Docker consul 二、实验 1.consul部署 2. consul-template部署 三、总结 (1)服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现

    2024年02月11日
    浏览(32)
  • 架构师之路 -- 虚拟化技术与容器Docker,rabbitmq面试题

    通常架构师们为了提高系统及硬件资源的利用率引入了虚拟化技术。 虚拟化是一种资源管理技术,它可以把各种实体资源抽像后再分隔,从而打破实体结构的限制,最大程度的提高资源的利用率。 今天我们来聊一下传统虚拟化技术和以Docker为代表的容器技术。 虚拟化 虚拟化

    2024年04月12日
    浏览(32)
  • 【Docker】Docker中Linux 容器、网络虚拟化与虚拟局域网的技术特点详细讲解

    前言 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介: 热爱跑步的恒川 ,致力于

    2024年02月09日
    浏览(35)
  • Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

    那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关

    2024年02月09日
    浏览(23)
  • Docker 基础知识解析:容器与传统虚拟化对比:资源利用、启动时间、隔离性和部署效率

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(26)
  • 【云计算学习教程】云计算虚拟化技术和容器技术详解_云计算虚拟化技术与容器技术

    这跟交通网络很相似,连接两个城市的交通网络具备的第一个功能就是汽车从一个城市到达另一个城市;第二个功能是控制到底走哪条线路最好。前者就是由公路组成的交通网络,后者就是交通控制系统。 下面我们再来看看传统的网络设备(比如一台路由器)的逻辑分层结构

    2024年04月22日
    浏览(38)
  • 虚拟化和容器技术综合实验

    一、VMware workstation虚拟化平台的搭建和使用 在VMware workstation中创建虚拟机并安装CentOS。 完成虚拟机的网络配置,添加1块网络适配器,第一块网络适配器采用桥接的方式接入网络,第二块采用NAT的方式接入网络,并配置固定IP地址,使得虚拟机能够ping通物理机并访问外网。

    2024年02月03日
    浏览(66)
  • 虚拟化容器化与docker

    物理机 : 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。 虚拟化 :是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包