Docker搭建LNMP

本操作在VMware中完成。

优化Linux系统

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config &> /dev/null
setenforce 0
systemctl stop firewalld &> /dev/null
systemctl disable firewalld &> /dev/null
iptables -F
systemctl stop NetworkManager &> /dev/null
systemctl disable NetworkManager &> /dev/null
echo 1 > /proc/sys/net/ipv4/ip_forward
hostnamectl set-hostname docker-server
exit

配置yum源

[root@docker-server ~]# vim /etc/yum.repos.d/CentOS7.repo
​
[aliyun-os]
name=aliyun-os
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
​
[aliyun-epel]
name=aliyun-epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0
​
[aliyun-extra]
name=aliyun-extra
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enabled=1
gpgcheck=0
​
[root@docker-server ~]# yum clean all && yum makecache
[root@docker-server ~]# yum install -y yum-utils
[root@docker-server ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker-server ~]# yum clean all && yum makecache

配置pip

[root@docker-server ~]# mkdir ~/.pip
[root@docker-server ~]# vim ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

安装docker

[root@docker-server ~]# yum remove -y docker docker-io docker-selinux python-docer-py
[root@docker-server ~]# yum install -y docker-ce
[root@docker-server ~]# systemctl start docker
[root@docker-server ~]# systemctl enable docker
[root@docker-server ~]# systemctl status docker
[root@docker-server ~]# docker version

配置国内Docker仓库加速站点

登录阿里云,控制台,搜索容器镜像服务,找到镜像加速器,看对应的操作文档。

[root@docker-server ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": [......]
}
​
[root@docker-server ~]# systemctl daemon-reload
[root@docker-server ~]# systemctl restart docker && systemctl status docker

测试拉取镜像是否成功

[root@docker-server ~]# docker pull centos:latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
root@docker-server ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       latest    5d0da3dc9764   14 months ago   231MB

搭建LNMP

获取MySQL5.7镜像

[root@docker-server ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
​
启动容器weme_mysql
​
[root@docker-server ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=weme --name weme_mysql mysql:5.7
3eecbc7e374139c986f7dc7712ef7fe4c9e019952e3897429f262dc3de1b16e8
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-e 设置环境变量,这里设置mysql的root用户的初始密码
--name 容器的名称、只要求唯一性

获取php7.2镜像

[root@docker-server ~]# docker pull php:7.2-fpm
7.2-fpm: Pulling from library/php
6ec7b7d162b2: Pull complete 
db606474d60c: Pull complete 
afb30f0cd8e0: Pull complete 
3bb2e8051594: Pull complete 
4d71313b39b0: Pull complete 
381de550657f: Pull complete 
e671c4250cc8: Pull complete 
111da53eb201: Pull complete 
e12697892372: Pull complete 
0540b5ed3310: Pull complete 
0461cc2270a7: Pull complete 
Digest: sha256:9c84ae47fddb97b94d1d2e289635b7306142a5336bc4ece0a393458c5e0d2cef
Status: Downloaded newer image for php:7.2-fpm
docker.io/library/php:7.2-fpm
​
启动PHP容器
​
[root@docker-server ~]# docker run -d -v /var/nginx/www/html:/var/www/html -p 9000:9000 --link weme_mysql:mysql --name weme_phpfpm php:7.2-fpm
5f0ee6a370e096f4852e2030aa3baca7f7090dedefcbea3a9d5e2ba03770c2e5
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,主机上的/var/nginx/www/html映射到容器里面 的/var/www/html,如果主机没有这个目录就创建这个目录,或者映射别的目录,但是后面路径要统一
-name 容器的名字
-link 容器与另外一个容器建立联系,这样就可以在当前的容器去使用另一个容器里的服务
​
测试目录映射
在主机/var/nginx/www/html目录下创建PHP测试界面,会直接映射到容器里面。
​
[root@docker-server ~]# vim /var/nginx/www/html/index.php

[root@docker-server ~]# docker exec -it 5f0ee6a370e0 /bin/bash
root@5f0ee6a370e0:/var/www/html# ls
index.php
root@5f0ee6a370e0:/var/www/html# cat index.php

获取Nginx1.12.2镜像

root@5f0ee6a370e0:/var/www/html# exit
exit
[root@docker-server ~]# docker pull nginx:1.12.2
1.12.2: Pulling from library/nginx
f2aa67a397c4: Pull complete 
e3eaf3d87fe0: Pull complete 
38cb13c1e4c9: Pull complete 
Digest: sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728
Status: Downloaded newer image for nginx:1.12.2
docker.io/library/nginx:1.12.2
​
启动Nginx容器
​
[root@docker-server ~]# docker run -d -p 80:80 --name weme_nginx -v /var/nginx/www/html:/var/www/html --link weme_phpfpm:phpfpm --name weme_nginx nginx:1.12.2
6e0f65dd757366a4709f16ceb75fcf4025b158a641a6cec8c271d5c7e8959a7b
参数说明
-d 让容器运行在后台
-p 添加主机到容器的端口映射
-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一定非要一样,如果不一样在配置nginx的时候需要注意
-name 容器的名称
-link 容器之间建立起来联系
​

修改Nginx的配置文件,让其支持php,方式有多种,这里我用直接拷贝出配置文件修改再导入进去即可。

[root@docker-server ~]# cd /opt/
[root@docker-server opt]# docker cp 6e0f65dd7573:/etc/nginx/conf.d/default.conf /opt/
[root@docker-server opt]# ls
containerd  default.conf
[root@docker-server opt]# cat default.conf 
server {
    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@docker-server opt]# vim default.conf
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /var/www/html;                       # 修改这里默认的路径
        index  index.html index.htm index.php;     #这里加入添加php的方式
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        root           html;
        fastcgi_pass   5f0ee6a370e0:9000;        #这里可以用容器ID,也可以用容器IP,都具备唯一性,注意这里的9000端口是容器的端口,不是宿主机的端口
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;      #修改这里的路径
        include        fastcgi_params;
    }
}

修改完毕后复制配置文件到Nginx容器里面

[root@docker-server opt]# docker cp default.conf 6e0f65dd7573:/etc/nginx/conf.d/default.conf
​
进入容器里面重新加载配置文件
​
[root@docker-server opt]# docker exec -it 6e0f65dd7573 /bin/bash
root@6e0f65dd7573:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@6e0f65dd7573:/# nginx -s reload
2022/11/14 07:58:26 [notice] 22#22: signal process started
​
root@6e0f65dd7573:/# exit
exit
参数说明
-t 在容器里面生产一个伪终端
-i 对容器内的标准输入(STDIN)进行交互

查看所有容器映射的端口

[root@docker-server opt]# ss -anlt
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN      0      128                   *:3306                              *:*                  
LISTEN      0      128                   *:80                                *:*                  
LISTEN      0      128                   *:22                                *:*                  
LISTEN      0      100           127.0.0.1:25                                *:*                  
LISTEN      0      128                   *:9000                              *:*                  
LISTEN      0      128                  :::3306                             :::*                  
LISTEN      0      128                  :::80                               :::*                  
LISTEN      0      128                  :::22                               :::*                  
LISTEN      0      100                 ::1:25                               :::*                  
LISTEN      0      128                  :::9000                             :::*               

查看主机IP

[root@docker-server opt]# ifconfig
docker0: flags=4163  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:97ff:feec:5367  prefixlen 64  scopeid 0x20
        ether 02:42:97:ec:53:67  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 438 (438.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
ens33: flags=4163  mtu 1500
        inet 192.168.10.21  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:fe36:61ae  prefixlen 64  scopeid 0x20
        ether 00:0c:29:36:61:ae  txqueuelen 1000  (Ethernet)
        RX packets 431069  bytes 581393905 (554.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 95605  bytes 6335972 (6.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1  (Local Loopback)
        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
​
veth265e233: flags=4163  mtu 1500
        inet6 fe80::e857:b3ff:fe57:81c9  prefixlen 64  scopeid 0x20
        ether ea:57:b3:57:81:c9  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
veth66a4318: flags=4163  mtu 1500
        inet6 fe80::a89d:a0ff:feb9:4226  prefixlen 64  scopeid 0x20
        ether aa:9d:a0:b9:42:26  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1086 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
​
vethc79aab6: flags=4163  mtu 1500
        inet6 fe80::f48f:2eff:fe43:d10b  prefixlen 64  scopeid 0x20
        ether f6:8f:2e:43:d1:0b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

通过主机IP访问PHP测试页面

[root@docker-server opt]# elinks 192.168.10.21
-bash: elinks: 未找到命令
[root@docker-server opt]# yum install -y elinks
​
[root@docker-server opt]# elinks 192.168.10.21

Docker搭建LNMP_第1张图片

[root@docker-server opt]# cd /var/nginx/www/html/
[root@docker-server html]# ls
index.php
[root@docker-server html]# cat index.php 

[root@docker-server html]# mv index.php index.php.bak

上传世界级飞机大战游戏代码

[root@docker-server html]# rz
​
没有此airplane-game.tar.gz请自行查找。
​
[root@docker-server html]# ls
airplane-game.tar.gz  index.php.bak
[root@docker-server html]# tar xvf airplane-game.tar.gz 
./audio/
./audio/arrow_shot.wav
./audio/bgm_zhandou2.mp3
./audio/bgm_zhuxuanlv.mp3
./audio/effcet_sfx_sandan.mp3
./audio/meteorit_explode.mp3
./css/
./css/main.css
./image/
./image/big_1.png
./image/blow1.gif
./image/blow2.gif
./image/blow4.gif
./image/bullet1.png
./image/hit_3.png
./image/img_bg_level_3.jpg
./image/img_bg_logo.jpg
./image/LOGO.png
./image/My_plane.png
./image/My_zidan.png
./image/small_5.png
./index.html
./js/
./js/main.js
​
[root@docker-server html]# ls
airplane-game.tar.gz  audio  css  image  index.html  index.php.bak  js
[root@docker-server html]# ll
-rw-r--r-- 1 root root 3553280 10月 18 09:43 airplane-game.tar.gz
drwxr-xr-x 2 root root     134 5月  18 2015 audio
drwxr-xr-x 2 root root      22 5月  17 2015 css
drwxr-xr-x 2 root root     234 5月  17 2015 image
-rw-r--r-- 1 root root    1492 5月  18 2015 index.html
-rw-r--r-- 1 root root      28 11月 14 14:56 index.php.bak
drwxr-xr-x 2 root root      21 5月  17 2015 js
[root@docker-server html]# ls -dl /var/nginx/www/html/
drwxr-xr-x 6 root root 120 Sep 15 08:37 /var/nginx/www/html/
[root@docker-server html]# elinks 192.168.10.21

Docker搭建LNMP_第2张图片

通过浏览器输入主机IP就可以玩世界级飞机大战游戏

 Docker搭建LNMP_第3张图片

查看数据库状态

[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                                                  NAMES
6e0f65dd7573   nginx:1.12.2   "nginx -g 'daemon of…"   58 minutes ago      Up 58 minutes      0.0.0.0:80->80/tcp, :::80->80/tcp                      weme_nginx
5f0ee6a370e0   php:7.2-fpm    "docker-php-entrypoi…"   About an hour ago   Up About an hour   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp              weme_phpfpm
3eecbc7e3741   mysql:5.7      "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   weme_mysql
[root@docker-server ~]# docker exec -it 3eecbc7e3741 /bin/bash
root@3eecbc7e3741:/# mysql -uroot -pweme
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)
​
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
​
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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
​
mysql> exit
Bye
root@3eecbc7e3741:/# exit
exit
​

你可能感兴趣的:(docker,linux,运维)