docker容器化部署lnmp
一、安装docker
#1、更新
yum update
#2、docker默认安装版本为1.13.1,这里安装docker-ce版,即使社区版
# step 1: 安装必要的一些系统工具
[root@localhost ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加docker-ce源
[root@localhost ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新,安装最新版docker-ce
[root@localhost ~]# sudo yum makecache fast
[root@localhost ~]# yum install docker-ce
# Step 4: 启动docker 服务,确认docker版本
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:49:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:48:24 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.11
GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8
runc:
Version: 1.0.3
GitCommit: v1.0.3-0-gf46b6ba
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@localhost ~]#
二 LNMP环境部署
1、安装nginx
1.1 拉取nginx镜像,这里pull版本1.18.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@localhost ~]# docker pull nginx:1.18.0
1.18.0: Pulling from library/nginx
f7ec5a41d630: Pull complete
0b20d28b5eb3: Pull complete
1576642c9776: Pull complete
c12a848bad84: Pull complete
03f221d9cf00: Pull complete
Digest: sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0
Status: Downloaded newer image for nginx:1.18.0
docker.io/library/nginx:1.18.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
[root@localhost ~]#
2、创建数据目录
[root@localhost ~]# mkdir -pv /lnmp/nginx/{conf/conf.d,data,logs}
mkdir: created directory ‘/lnmp’
mkdir: created directory ‘/lnmp/nginx’
mkdir: created directory ‘/lnmp/nginx/conf’
mkdir: created directory ‘/lnmp/nginx/conf/conf.d’
mkdir: created directory ‘/lnmp/nginx/data’
mkdir: created directory ‘/lnmp/nginx/logs’
[root@localhost ~]# ls /lnmp/nginx/
conf data logs
[root@localhost ~]#
3、生成配置文件
#先启动一个nginx容器,检查里面的nginx配置
[root@localhost ~]# docker run -it -d --privileged --name nginx -p 80:80 nginx:1.18.0
[root@localhost ~]# docker exec -it $(docker ps -aq) /bin/bash
root@081a2f663295:/# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
root@081a2f663295:/# cat /etc/nginx/conf.d/default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
root@081a2f663295:/# exit
exit
[root@localhost ~]#
制作配置文件,把上面容器中的配置文件制作到宿主机
[root@localhost ~]# vim /lnmp/nginx/conf/nginx.conf
[root@localhost ~]# vim /lnmp/nginx/conf/conf.d/default.conf
4、启动nginx容器
[root@localhost ~]# docker run --privileged -it -d --name nginx -p 80:80 -v /lnmp/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /lnmp/nginx/conf/conf.d:/etc/nginx/conf.d -v /lnmp/nginx/html:/usr/share/nginx/html -v /lnmp/nginx/logs:/var/log/nginx nginx:1.18.0
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 6 minutes ago Up 4 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]#
5、确认nginx是否正确安装成功,浏览器器输入宿主机IP,可以打开nginx欢迎页面。
6、编辑主页并测试
[root@localhost ~]# ls /lnmp/nginx/html/
[root@localhost ~]# echo "Hello World,This is a test pages" > /lnmp/nginx/html/index.html
[root@localhost ~]# ls /lnmp/nginx/html/
index.html
[root@localhost ~]#
至此,docker成功安装nginx。
三、安装mysql
与nginx一样,pull镜像,创建数据目录,启动容器
#拉取Mysql镜像,这里使用5.7版本
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
[root@localhost ~]# docker pull mysql:5.7.32
5.7.32: Pulling from library/mysql
a076a628af6f: Pull complete
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
7065aaa2655f: Pull complete
b4bc531db40f: Pull complete
8c3e9d7c9815: Pull complete
fadfb9734ed2: Pull complete
Digest: sha256:e08834258fcc0efd01df358222333919df53d4a0d9b2a54da05b204b822e3b7b
Status: Downloaded newer image for mysql:5.7.32
docker.io/library/mysql:5.7.32
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
mysql 5.7.32 cc8775c0fe94 15 months ago 449MB
[root@localhost ~]#
#创建数据目录
[root@localhost ~]# mkdir -pv /lnmp/mysql/{conf,data,logs}
mkdir: 已创建目录 "/lnmp/mysql"
mkdir: 已创建目录 "/lnmp/mysql/conf"
mkdir: 已创建目录 "/lnmp/mysql/data"
mkdir: 已创建目录 "/lnmp/mysql/logs"
[root@localhost ~]# ls /lnmp/mysql/
conf data logs
[root@localhost ~]#
#启动mysql容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 18 minutes ago Up 12 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]# docker run -d -p 3306:3306 --name mysql \
> -v /lnmp/mysql/conf:/etc/mysql/conf.d \
> -v /lnmp/mysql/logs:/logs \
> -v /lnmp/mysql/data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> mysql:5.7.32
55cc5694695d26327abee0580af2cbcaf28c49f33da8da24aa50c5b049946e01
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55cc5694695d mysql:5.7.32 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 18 minutes ago Up 12 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]#
到这里,docker安装mysql已完成。
四、安装PHP
方法同上,pull镜像,创建数据目录,生成配置文件,启动php容器
1、pull镜像前,先更新下镜像加速
[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com"]
}
2、下载PHP镜像
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
mysql 5.7.32 cc8775c0fe94 15 months ago 449MB
[root@localhost ~]# docker pull php:5.6-fpm
5.6-fpm: Pulling from library/php
5e6ec7f28fb7: Pull complete
cf165947b5b7: Pull complete
7bd37682846d: Pull complete
99daf8e838e1: Pull complete
f8628c9f032f: Pull complete
50ff925cdfa2: Pull complete
6ab76f312877: Pull complete
28ea94b4dd82: Pull complete
a6dbb35d45d2: Pull complete
98b901ec9e8d: Pull complete
Digest: sha256:4f070f1b7b93cc5ab364839b79a5b26f38d5f89461f7bc0cd4bab4a3ad7d67d7
Status: Downloaded newer image for php:5.6-fpm
docker.io/library/php:5.6-fpm
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
mysql 5.7.32 cc8775c0fe94 15 months ago 449MB
php 5.6-fpm 3458979c7744 3 years ago 344MB
[root@localhost ~]#
3、创建数据目录:
[root@localhost ~]# mkdir -pv /lnmp/php-fpm/
mkdir: 已创建目录 "/lnmp/php-fpm/"
[root@localhost ~]#
4、制作配置文件,同nginx一样,启动php容器,登录,把镜像中的PHP配置文件拿出来到宿主机
这部分略。
[root@localhost ~]# ls /lnmp/php-fpm/
[root@localhost ~]#
vim /lnmp/php-fpm/www.conf
"/lnmp/php-fpm/www.conf" [New] 543L, 23032C written
[root@localhost ~]# ll /lnmp/php-fpm/
总用量 24
-rw-r--r--. 1 root root 23032 4月 12 16:03 www.conf
[root@localhost ~]#
5、启动PHP容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55cc5694695d mysql:5.7.32 "docker-entrypoint.s…" 37 minutes ago Up 37 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 56 minutes ago Up 50 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]# docker run -d --name php-fpm \
> -p 9000:9000 \
> -v /lnmp/php-fpm/www.conf:/data/php-fpm/etc/php-fpm.d/www.conf \
> -v /lnmp/nginx/html:/var/www/html \
> php:5.6-fpm
861af3bccae4c7096bab66c04c1574273495fefffd9177dd27b0fe36bdf0d1c1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
861af3bccae4 php:5.6-fpm "docker-php-entrypoi…" 5 seconds ago Up 4 seconds 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp php-fpm
55cc5694695d mysql:5.7.32 "docker-entrypoint.s…" 37 minutes ago Up 37 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 56 minutes ago Up 50 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]#
6、配置nginx,使之支持PHP
[root@localhost ~]# vim /lnmp/nginx/conf/conf.d/default.conf
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 192.168.139.132:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
6、测试PHP是否正确安装
#重启nginx
[root@localhost ~]# docker restart nginx
nginx
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
861af3bccae4 php:5.6-fpm "docker-php-entrypoi…" 7 minutes ago Up 7 minutes 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp php-fpm
55cc5694695d mysql:5.7.32 "docker-entrypoint.s…" 45 minutes ago Up 45 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" About an hour ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]#
配置PHP测试页
[root@localhost ~]# echo "<?php phpinfo() ?>" > /lnmp/nginx/html/index.php
[root@localhost ~]# ls /lnmp/nginx/html/
index.html index.php
[root@localhost ~]# cat /lnmp/nginx/html/index.php
<?php phpinfo(); ?>
[root@localhost ~]#
测试,如下能打开PHP信息页表示PHP安装完成。
至此,docker 部署LNMP完成,
要发布网页,只需要把网页代码放到发布目录即可,比如发布一个wordpress