Board logo

标题: CentOS8_在Docker中安装LAMP [打印本页]

作者: admin    时间: 2023-1-30 21:43     标题: CentOS8_在Docker中安装LAMP

笺注:Docker的安装可参考 CentOS8_在Docker中使用Nginx的反向代理 查看Docker的版本信息: [root@centos8 ~]# docker -v Docker version 20.10.21, build baeda1f [root@centos8 ~]# 已经设置开机自动启动Docker: [root@centos8 ~]# systemctl is-enabled docker enabled [root@centos8 ~]# [root@centos8 ~]# yum -y install net-tools [root@centos8 ~]# ifconfig docker0: flags=4163 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:99ff:fea5:bcb6 prefixlen 64 scopeid 0x20 ether 02:42:99:a5:bc:b6 txqueuelen 0 (Ethernet) RX packets 445 bytes 97545 (95.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 459 bytes 63899 (62.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens160: flags=4163 mtu 1500 inet 192.168.168.154 netmask 255.255.255.0 broadcast 192.168.168.255 inet6 fe80::92ab:5fb4:5373:ad53 prefixlen 64 scopeid 0x20 ether 00:0c:29:0e:fa:49 txqueuelen 1000 (Ethernet) RX packets 197116 bytes 285229969 (272.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 59085 bytes 3932166 (3.7 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 1000 (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 veth17d4fc8: flags=4163 mtu 1500 inet6 fe80::74a0:dfff:fee0:bdf6 prefixlen 64 scopeid 0x20 ether 76:a0:df:e0:bd:f6 txqueuelen 0 (Ethernet) RX packets 15 bytes 1972 (1.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 31 bytes 2876 (2.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos8 ~]# 给Docker创建自定义虚拟网卡,并且指定网段: [root@centos8 ~]# docker network create --subnet=172.19.0.0/16 zhuohua-docker cd1995d89cccb6a5211c907c6391b5b3ffb2c6172d7a724cf2333c63de917567 [root@centos8 ~]# 备注:给Docker创建自定义虚拟网卡后,容器才能使用固定IP地址; 查看Docker所有的虚拟网卡: [root@centos8 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 87097a7d771c bridge bridge local ecf4d5fc9a71 host host local f3a83278f2d8 none null local cd1995d89ccc zhuohua-docker bridge local [root@centos8 ~]# 备注: 网卡ID“cd1995d89ccc”是自动生成的; 网卡名“zhuohua-docker”是自定义的; [root@centos8 ~]# ifconfig br-cd1995d89ccc: flags=4099 mtu 1500 inet 172.19.0.1 netmask 255.255.0.0 broadcast 172.19.255.255 ether 02:42:80:1e:9f:82 txqueuelen 0 (Ethernet) RX packets 197198 bytes 285236155 (272.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 59116 bytes 3937298 (3.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 docker0: flags=4163 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:99ff:fea5:bcb6 prefixlen 64 scopeid 0x20 ether 02:42:99:a5:bc:b6 txqueuelen 0 (Ethernet) RX packets 445 bytes 97545 (95.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 459 bytes 63899 (62.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens160: flags=4163 mtu 1500 inet 192.168.168.154 netmask 255.255.255.0 broadcast 192.168.168.255 inet6 fe80::92ab:5fb4:5373:ad53 prefixlen 64 scopeid 0x20 ether 00:0c:29:0e:fa:49 txqueuelen 1000 (Ethernet) RX packets 197198 bytes 285236155 (272.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 59116 bytes 3937298 (3.7 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 1000 (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 veth17d4fc8: flags=4163 mtu 1500 inet6 fe80::74a0:dfff:fee0:bdf6 prefixlen 64 scopeid 0x20 ether 76:a0:df:e0:bd:f6 txqueuelen 0 (Ethernet) RX packets 15 bytes 1972 (1.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 31 bytes 2876 (2.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos8 ~]# ###### 搭建Apache+PHP容器: 从公网下载镜像:( 以下是下载Apache2.4+PHP5.6的镜像 ) [root@centos8 ~]# docker pull php:5.6-apache 5.6-apache: Pulling from library/php 5e6ec7f28fb7: Already exists cf165947b5b7: Already exists 7bd37682846d: Already exists 99daf8e838e1: Already exists ae320713efba: Pull complete ebcb99c48d8c: Pull complete 9867e71b4ab6: Pull complete 936eb418164a: Pull complete bc298e7adaf7: Pull complete ccd61b587bcd: Pull complete b2d4b347f67c: Pull complete 56e9dde34152: Pull complete 9ad99b17eb78: Pull complete Digest: sha256:0a40fd273961b99d8afe69a61a68c73c04bc0caa9de384d3b2dd9e7986eec86d Status: Downloaded newer image for php:5.6-apache docker.io/library/php:5.6-apache [root@centos8 ~]# 查看宿主机的所有镜像: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE php 5.6-apache 24c791995c1e 4 years ago 355MB [root@centos8 ~]# 使用镜像“php:5.6-apache”创建并启动容器“Apache_1”: [root@centos8 ~]# docker run -itd --name Apache_1 -p 80:80 -v /opt/Apache_1:/var/www/html --net zhuohua-docker --ip 172.19.0.2 php:5.6-apache 34c8454daca4a345c66482d64c41d7efb4b2203d7be408c5da2e23f7bc690e34 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 第一个80是宿主机的端口,暴露给外部直接访问;第二个80是容器的端口。 -v 挂载目录 : 这里是把宿主机的目录/opt/Apache_1挂载到容器的目录/var/www/html;假如目录不存在,就会自动创建。 --net zhuohua-docker --ip : 指定容器的固定IP地址(使用虚拟网卡“zhuohua-docker”)。 php:5.6-apache : 镜像名称:版本号 在宿主机查看正在运行的容器: [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 34c8454daca4 php:5.6-apache "docker-php-entrypoi…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp Apache_1 [root@centos8 ~]# 注释:宿主机的TCP 80端口,映射到容器“Apache_1”的TCP 80端口。 ### 进入容器“Apache_1”: [root@centos8 ~]# docker exec -it Apache_1 /bin/bash root@34c8454daca4:/var/www/html# root@34c8454daca4:/var/www/html# pwd /var/www/html root@34c8454daca4:/var/www/html# ls root@34c8454daca4:/var/www/html# 查看容器“Apache_1”的系统版本信息: root@34c8454daca4:~# cat /etc/issue Debian GNU/Linux 9 \n \l root@34c8454daca4:~# more /etc/debian_version 9.6 root@34c8454daca4:~# uname -r 4.18.0-193.el8.x86_64 root@34c8454daca4:~# 查看容器“Apache_1”的IP地址: root@34c8454daca4:~# ifconfig bash: ifconfig: command not found root@34c8454daca4:~# root@34c8454daca4:~# apt-get update root@34c8454daca4:~# apt-get -y install net-tools root@34c8454daca4:~# ifconfig eth0: flags=4163 mtu 1500 inet 172.19.0.2 netmask 255.255.0.0 broadcast 172.19.255.255 ether 02:42:ac:13:00:02 txqueuelen 0 (Ethernet) RX packets 2279 bytes 8511723 (8.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2096 bytes 114568 (111.8 KiB) 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 loop txqueuelen 1000 (Local Loopback) RX packets 6 bytes 526 (526.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6 bytes 526 (526.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@34c8454daca4:~# 备注: 宿主机或容器重启后,IP地址都是不变的; Apache的默认站点的默认首页文件: root@34c8454daca4:~# cat /etc/apache2/conf-enabled/docker-php.conf |grep "index" DirectoryIndex index.php index.html root@34c8454daca4:~# ### 在宿主机上创建容器“Apache_1”的Apache的默认站点的默认首页文件: [root@centos8 Apache_1]# pwd /opt/Apache_1 [root@centos8 Apache_1]# echo 'Welcome to zhuohua.' > index.html [root@centos8 Apache_1]# 创建PHP测试页: [root@centos8 Apache_1]# cat /opt/Apache_1/test.php [root@centos8 Apache_1]# ### 在容器“Apache_1”上查看Apache的默认站点里的文件: root@34c8454daca4:~# cd /var/www/html/ root@34c8454daca4:/var/www/html# ls index.html test.php root@34c8454daca4:/var/www/html# 注释:因为在创建容器“Apache_1”的时候,把宿主机的目录/opt/Apache_1挂载到容器的目录/var/www/html,所以这两个目录里的数据是双向同步的。 ### 在宿主机的防火墙firewalld打开TCP 80端口: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload 查看防火墙所有打开的端口: [root@centos8 ~]# firewall-cmd --zone=public --list-ports 80/tcp [root@centos8 ~]# ### 在客户端访问容器“Apache_1”的Apache的默认站点的默认首页文件: http://192.168.168.154/ 图片1.png 在客户端访问容器“Apache_1”的Apache的默认站点里的PHP测试页: http://192.168.168.154/test.php PHP的版本: 图片2.png Apache的版本: 图片3.png 注释:此时,外面的客户端访问宿主机的TCP 80端口时,等于访问容器“Apache_1”的TCP 80端口。 ###### 搭建MySQL容器: 从公网下载镜像:( 以下是下载MySQL5.7的镜像 ) [root@centos8 ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql d26998a7c52d: Pull complete 4a9d8a3567e3: Pull complete bfee1f0f349e: Pull complete 71ff8dfb9b12: Pull complete bf56cbebc916: Pull complete 9a7bdfff0f5b: Pull complete b7677d20b791: Pull complete b4bcfc1167c2: Pull complete 03f1c0b71b70: Pull complete 61aa2e026ac3: Pull complete 3b784fa66c50: Pull complete Digest: sha256:f04fc2e2f01e65d6e2828b4cce2c4761d9258aee71d989e273b2ae309f44a945 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7 [root@centos8 ~]# 查看宿主机的所有镜像: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 e982339a20a5 12 days ago 452MB php 5.6-apache 24c791995c1e 4 years ago 355MB [root@centos8 ~]# 使用镜像“mysql:5.7”创建并启动容器“MySQL_1”: [root@centos8 ~]# docker run -itd --name MySQL_1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=888 --restart=always -v /opt/MySQL_1:/home/MySQL_1 --net zhuohua-docker --ip 172.19.0.3 mysql:5.7 3d05e80cf82a2cbac2c02649343fb4a2036be14e2891a2cac115cf8c31d55471 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 第一个3306是宿主机的端口,暴露给外部直接访问;第二个3306是容器的端口。 -e 环境配置 : 指定数据库管理员root@localhost的密码为888 --restart=always : 让容器随宿主机的启动而启动;还会自动启动MySQL数据库 -v 挂载目录 : 这里是把宿主机的目录/opt/MySQL_1挂载到容器的目录/home/MySQL_1;假如目录不存在,就会自动创建。 --net zhuohua-docker --ip : 指定容器的固定IP地址(使用虚拟网卡“zhuohua-docker”)。 mysql:5.7 : 镜像名称:版本号 在宿主机查看所有的容器:(无论是否正在运行) [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d05e80cf82a mysql:5.7 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp MySQL_1 34c8454daca4 php:5.6-apache "docker-php-entrypoi…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp, :::80->80/tcp Apache_1 [root@centos8 ~]# 注释:宿主机的TCP 3306端口,映射到容器“MySQL_1”的TCP 3306端口。 ### 进入容器“MySQL_1”: [root@centos8 ~]# docker exec -it MySQL_1 /bin/bash bash-4.2# 查看容器“MySQL_1”的系统版本信息: bash-4.2# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo) bash-4.2# uname -r 4.18.0-193.el8.x86_64 bash-4.2# 查看容器“MySQL_1”的IP地址: bash-4.2# ifconfig bash: ifconfig: command not found bash-4.2# 可以直接使用公网Yum源: bash-4.2# yum -y install net-tools bash-4.2# ifconfig eth0: flags=4163 mtu 1500 inet 172.19.0.3 netmask 255.255.0.0 broadcast 172.19.255.255 ether 02:42:ac:13:00:03 txqueuelen 0 (Ethernet) RX packets 20336 bytes 91088646 (86.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16887 bytes 923362 (901.7 KiB) 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 loop txqueuelen 1000 (Local Loopback) RX packets 47 bytes 5974 (5.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 47 bytes 5974 (5.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 bash-4.2# 查看MySQL的版本信息: bash-4.2# mysql -V mysql Ver 14.14 Distrib 5.7.41, for Linux (x86_64) using EditLine wrapper bash-4.2# MySQL的主配置文件:(以下是初始状态) bash-4.2# cat /etc/my.cnf |grep -v "^#" |grep -v "^$" [mysqld] skip-host-cache skip-name-resolve datadir=/var/lib/mysql socket=/var/run/mysqld/mysqld.sock secure-file-priv=/var/lib/mysql-files user=mysql symbolic-links=0 pid-file=/var/run/mysqld/mysqld.pid [client] socket=/var/run/mysqld/mysqld.sock !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ bash-4.2# 本地登录MySQL数据库:(使用的是数据库管理员root@localhost,密码888) bash-4.2# mysql -uroot -p"888" 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 3 Server version: 5.7.41 MySQL Community Server (GPL) Copyright (c) 2000, 2023, 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> 查看数据库里有哪些库:(以下4个库是默认就有的) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> 查看所有数据库用户及其主机信息:(以下是初始状态) mysql> select user,host from mysql.user; +---------------+-----------+ | user | host | +---------------+-----------+ | root | % | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 4 rows in set (0.00 sec) mysql> 删除数据库用户root@'%': mysql> drop user root@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> select user,host from mysql.user; +---------------+-----------+ | user | host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 3 rows in set (0.00 sec) mysql> 创建一个数据库用户并授权: MySQL服务器授权数据库用户Python@'172.19.0.2'(密码P@ssw0rd),仅仅在使用IP地址172.19.0.2时可以进行访问,对所有的库有完全控制的权限: mysql> grant all on *.* to Python@'172.19.0.2' identified by 'P@ssw0rd'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> mysql> select user,host from mysql.user; +---------------+------------+ | user | host | +---------------+------------+ | Python | 172.19.0.2 | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+------------+ 4 rows in set (0.00 sec) mysql> 查看数据库用户Python@'172.19.0.2'的权限: mysql> show grants for Python@'172.19.0.2'; +------------------------------------------------------+ | Grants for Python@172.19.0.2 | +------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'Python'@'172.19.0.2' | +------------------------------------------------------+ 1 row in set (0.00 sec) mysql> ### 在宿主机上创建容器“Apache_1”的PHP与MySQL的连接测试页: [root@centos8 ~]# cat /opt/Apache_1/mysql.php 172.19.0.3','Python','P@ssw0rd'); if(!$link) echo "远程MySQL5.7连接失败。"; else echo "远程MySQL5.7连接正常。"; mysql_close(); ?> [root@centos8 ~]# ### 在容器“Apache_1”上查看Apache的默认站点里的文件: root@34c8454daca4:~# ls /var/www/html/ index.html mysql.php test.php root@34c8454daca4:~# 注释:因为在创建容器“Apache_1”的时候,把宿主机的目录/opt/Apache_1挂载到容器的目录/var/www/html,所以这两个目录里的数据是双向同步的。 ### 在客户端访问容器“Apache_1”的Apache的默认站点里的MySQL测试页: http://192.168.168.154/mysql.php 图片4.png 错误: Fatal error: Call to undefined function mysql_connect() in /var/www/html/mysql.php on line 3 这是因为容器“Apache_1”的PHP没有安装相关的MySQL扩展。 进入容器“Apache_1”安装相关的MySQL扩展: root@34c8454daca4:~# docker-php-ext-install pdo_mysql root@34c8454daca4:~# docker-php-ext-install mysql root@34c8454daca4:~# docker-php-ext-install mysqli root@34c8454daca4:~# docker-php-ext-install pdo 在宿主机重启容器“Apache_1”: [root@centos8 ~]# docker restart Apache_1 Apache_1 [root@centos8 ~]# 再次,在客户端访问容器“Apache_1”的Apache的默认站点里的MySQL测试页: http://192.168.168.154/mysql.php 图片5.png 相关文章: CentOS8_在Docker中安装MySQL CentOS8_在Docker中安装MariaDB CentOS8_在Docker中安装LAMP(使用参数--link) CentOS8安装LAMP+phpMyAdmin Windows2008R2_IIS+PHP Manger+Zend Guard Loader/OPcache

图片附件: 图片1.png (2023-1-30 21:45, 32.09 KB) / 下载次数 16
http://blog.zhuohua.store/attachment.php?aid=22157&k=2abba0eab4dfe1d4d7a3fed738a0483a&t=1714399362&sid=r4UFDi



图片附件: 图片2.png (2023-1-30 21:46, 88.05 KB) / 下载次数 19
http://blog.zhuohua.store/attachment.php?aid=22158&k=6e784c50310b1d575033c3bcb28b4959&t=1714399362&sid=r4UFDi



图片附件: 图片3.png (2023-1-30 21:46, 68.12 KB) / 下载次数 14
http://blog.zhuohua.store/attachment.php?aid=22159&k=d6d24863f524883f22e41b8a5db36338&t=1714399362&sid=r4UFDi



图片附件: 图片4.png (2023-1-30 21:52, 82.36 KB) / 下载次数 15
http://blog.zhuohua.store/attachment.php?aid=22160&k=a8c6d833bd072857e9af0d836c9524fe&t=1714399362&sid=r4UFDi



图片附件: 图片5.png (2023-1-30 21:53, 63.2 KB) / 下载次数 13
http://blog.zhuohua.store/attachment.php?aid=22161&k=9dc012b5887387459842d6992ec1c7c1&t=1714399362&sid=r4UFDi






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2