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