docker基于centos镜像搭建lnmp
1.拉取centos镜像
[root@node2 ~]# docker pull centos
[AUsing default tag: latest
latest: Pulling from library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Image is up to date for centos:latest
docker.io/library/centos:latest
2.创建基于centos镜像的(nginx、mysql、php)的容器
[root@node3 ~]# docker run -d -it --name nginx 5d0da3dc9764 /bin/bash
d1c7cd62f1f998b7af2bbb74eedbe4a11937c899fe3bf00974ae9263f629d99e
[root@node3 ~]# docker run -d -it --name mysql 5d0da3dc9764 /bin/bash
7c824c7d2e75c2ece8fc0b91d6b7273b1cdefac81d3f5ecd17c0a66f636c6b80
[root@node3 ~]# docker run -d -it --name php 5d0da3dc9764 /bin/bash
9d679e39b4d6d41988918989d30435a35d1c1434b6176fd3d09509a5873823c6
[root@node3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d679e39b4d6 5d0da3dc9764 "/bin/bash" 4 seconds ago Up 2 seconds php
7c824c7d2e75 5d0da3dc9764 "/bin/bash" 10 seconds ago Up 9 seconds mysql
d1c7cd62f1f9 5d0da3dc9764 "/bin/bash" 20 seconds ago Up 19 seconds nginx
3.给容器里面上传相应的包
[root@node3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d679e39b4d6 5d0da3dc9764 "/bin/bash" 4 seconds ago Up 2 seconds php
7c824c7d2e75 5d0da3dc9764 "/bin/bash" 10 seconds ago Up 9 seconds mysql
d1c7cd62f1f9 5d0da3dc9764 "/bin/bash" 20 seconds ago Up 19 seconds nginx
[root@node3 ~]# ls
anaconda-ks.cfg apr-util-1.6.1.tar.gz mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz oniguruma-6.9.4.tar.gz
apr-1.7.0.tar.gz httpd-2.4.49.tar.gz nginx-1.20.1.tar.gz php-7.4.24.tar.gz
[root@node3 ~]# docker cp /root/nginx-1.20.1.tar.gz d1c7cd62f1f9:/usr/src
[root@node3 ~]# docker cp /root/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 7c824c7d2e75:/usr/src
[root@node3 ~]# docker cp /root/php-7.4.24.tar.gz 9d679e39b4d6:/usr/src
[root@node3 ~]#
4.编译安装nginx
[root@node3 ~]# docker exec -it d1c7cd62f1f9 /bin/bash
[root@d1c7cd62f1f9 /]# cd /usr/src
[root@d1c7cd62f1f9 src]# ls
debug kernels nginx-1.20.1.tar.gz
[root@d1c7cd62f1f9 src]#
4.1.创建用户
[root@d1c7cd62f1f9 src]# useradd -r -M -s /sbin/nologin nginx
[root@d1c7cd62f1f9 src]#
4.2.安装依赖包
[root@d1c7cd62f1f9 src]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ wget make ncurses-compat-libs
[root@d1c7cd62f1f9 src]# yum -y groups mark install 'Development Tools'
4.3.创建日志存放目录
[root@d1c7cd62f1f9 src]# mkdir -p /var/log/nginx
[root@d1c7cd62f1f9 src]# chown -R nginx.nginx /var/log/nginx
[root@d1c7cd62f1f9 src]#
4.4.解压编译安装
[root@d1c7cd62f1f9 src]# tar xf nginx-1.20.1.tar.gz
[root@d1c7cd62f1f9 src]# ls
debug kernels nginx-1.20.1 nginx-1.20.1.tar.gz
[root@d1c7cd62f1f9 src]# cd nginx-1.20.1
[root@d1c7cd62f1f9 nginx-1.20.1]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-debug \
> --with-http_ssl_module \
> --with-http_realip_module \
> --with-http_image_filter_module \
> --with-http_gunzip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --http-log-path=/var/log/nginx/access.log \
> --error-log-path=/var/log/nginx/error.log
[root@d1c7cd62f1f9 nginx-1.20.1]# make && make install
4.5.配置环境变量
[root@d1c7cd62f1f9 nginx-1.20.1]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@d1c7cd62f1f9 nginx-1.20.1]# . /etc/profile.d/nginx.sh
[root@d1c7cd62f1f9 nginx-1.20.1]#
4.6.启动nginx
[root@d1c7cd62f1f9 local]# nginx
[root@d1c7cd62f1f9 local]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
[root@d1c7cd62f1f9 local]#
4.7.编写shell启动脚本
[root@d1c7cd62f1f9 ~]# cat /start.sh
#!/bin/sh
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/bin/bash
[root@d1c7cd62f1f9 ~]#
4.8.修改配置文件
[root@d1c7cd62f1f9 ~]# vim /usr/local/nginx/conf/nginx.conf
location ~ \.php$ { //取消掉这里所有得注释
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //这里改成 $document_root
include fastcgi_params;
}
location / {
root html;
index index.php index.html index.htm; //这里加上index.php
}
[root@d1c7cd62f1f9 ~]# nginx -s stop
[root@d1c7cd62f1f9 ~]# nginx
[root@d1c7cd62f1f9 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
[root@d1c7cd62f1f9 ~]#
4.9.index.php
[root@d1c7cd62f1f9 ~]# echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php
[root@d1c7cd62f1f9 ~]#
5.mysql安装
[root@node3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d679e39b4d6 5d0da3dc9764 "/bin/bash" 17 minutes ago Up 17 minutes php
7c824c7d2e75 5d0da3dc9764 "/bin/bash" 17 minutes ago Up 17 minutes mysql
d1c7cd62f1f9 5d0da3dc9764 "/bin/bash" 17 minutes ago Up 17 minutes nginx
[root@node3 ~]# docker exec -it 7c824c7d2e75 /bin/bash
[root@7c824c7d2e75 /]# cd /usr/src
[root@7c824c7d2e75 src]# ls
debug kernels mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
[root@7c824c7d2e75 src]#
5.1.安装mysql依赖包
[root@7c824c7d2e75 src]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel libaio.x86_64 numactl
5.2.创建用户
[root@7c824c7d2e75 src]# useradd -r -M -s /sbin/nologin mysql
[root@7c824c7d2e75 src]#
5.3.解压并重命名
[root@7c824c7d2e75 src]# tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local
[root@7c824c7d2e75 src]# cd /usr/local
[root@7c824c7d2e75 local]# mv mysql-5.7.34-linux-glibc2.12-x86_64/ mysql
[root@7c824c7d2e75 local]#
5.4.修改mysql的属主属组并添加环境变量
[root@7c824c7d2e75 local]# chown -R mysql.mysql mysql
[root@7c824c7d2e75 local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@7c824c7d2e75 local]# source /etc/profile.d/mysql.sh
[root@7c824c7d2e75 local]#
[root@7c824c7d2e75 local]# ln -s /usr/local/mysql/include/ /usr/include/mysql/
[root@7c824c7d2e75 local]#
5.5.写配置文件
[root@7c824c7d2e75 ~]# vim /etc/ld.so.conf.d/mysql.conf
[root@7c824c7d2e75 ~]# cat /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@7c824c7d2e75 ~]# ldconfig
[root@7c824c7d2e75 ~]#
5.6.创建数据存放目录
[root@7c824c7d2e75 ~]# mkdir /opt/data
[root@7c824c7d2e75 ~]# chown -R mysql.mysql /opt/data
[root@7c824c7d2e75 ~]#
5.7.初始化
[root@7c824c7d2e75 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
2021-12-03T10:05:32.092282Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-12-03T10:05:32.291058Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-12-03T10:05:32.320487Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-12-03T10:05:32.376987Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 8d0d03c4-5420-11ec-928b-0242ac110003.
2021-12-03T10:05:32.377978Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-12-03T10:05:32.924868Z 0 [Warning] CA certificate ca.pem is self signed.
2021-12-03T10:05:33.095400Z 1 [Note] A temporary password is generated for root@localhost: 5qgssdb1;k&Z
[root@7c824c7d2e75 ~]#
5.8.生成配置文件
[root@7c824c7d2e75 ~]# vim /etc/my.cnf
[root@7c824c7d2e75 ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
[root@7c824c7d2e75 ~]#
5.9.配置启动文件
[root@7c824c7d2e75 ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@7c824c7d2e75 ~]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /etc/init.d/mysqld
[root@7c824c7d2e75 ~]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /etc/init.d/mysqld
[root@7c824c7d2e75 ~]#
5.10.编写启动脚本
[root@7c824c7d2e75 ~]# cat /start.sh
#!/bin/sh
/etc/init.d/mysqld start
/bin/bash
[root@7c824c7d2e75 ~]#
[root@7c824c7d2e75 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/opt/data/7c824c7d2e75.err'.
SUCCESS!
[root@7c824c7d2e75 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 80 *:3306 *:*
[root@7c824c7d2e75 ~]#
6.php安装
6.1.查看包
[root@node3 ~]# docker exec -it 9d679e39b4d6 /bin/bash
[root@9d679e39b4d6 local]# cd /usr/src
[root@9d679e39b4d6 src]# ls
debug kernels php-7.4.24.tar.gz
[root@9d679e39b4d6 src]#
6.2.安装依赖包
[root@9d679e39b4d6 src]# yum -y install epel-release
[root@9d679e39b4d6 src]# yum -y install sqlite-devel libzip-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel readline readline-devel libxslt libxslt-devel oniguruma gcc gcc-c++ make libcurl-devel
[root@9d679e39b4d6 src]# yum -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
[root@9d679e39b4d6 src]# yum -y install libzip-devel.x86_64
[root@9d679e39b4d6 src]# yum -y install libsqlite3x-devel.x86_64
6.3.解压
[root@9d679e39b4d6 src]# tar xf php-7.4.24.tar.gz -C /usr/local
[root@9d679e39b4d6 src]# cd /usr/local/php-7.4.24/
[root@9d679e39b4d6 php-7.4.24]#
6.4.编译
[root@9d679e39b4d6 php-7.4.24]# ./configure --prefix=/usr/local/php7 --with-config-file-path=/etc --enable-fpm --disable-debug --disable-rpath --enable-shared --enable-soap --with-openssl --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl --enable-exif --enable-ftp --enable-gd --with-jpeg --with-zlib-dir --with-freetype --with-gettext --enable-mbstring --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-readline --enable-shmop --enable-simplexml --enable-sockets --with-zip --enable-mysqlnd-compression-support --with-pear --enable-pcntl --enable-posix
[root@9d679e39b4d6 php-7.4.24]# make && make install
6.5.设置环境变量
[root@9d679e39b4d6 php-7.4.24]# echo 'export PATH=/usr/local/php8/bin:$PATH' > /etc/profile.d/php.sh
[root@9d679e39b4d6 php-7.4.24]# source /etc/profile.d/php.sh
[root@9d679e39b4d6 php-7.4.24]#
6.7.启动
[root@9d679e39b4d6 /]# /usr/local/php7/sbin/php-fpm
[root@9d679e39b4d6 /]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:* [root@9d679e39b4d6 ~]# cat /start.sh
#!/bin/sh
/usr/local/php7/sbin/php-fpm
/bin/bash
[root@9d679e39b4d6 ~]#
6.8.构建镜像
[root@syndic ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7f604cebf74 43be0e44cf87 "/bin/bash start.sh" 9 minutes ago Up 9 minutes mysql
f3ef9b30991d f13fba8e80ef "/bin/bash /start.sh" 10 minutes ago Up 10 minutes php
76272b72c9a9 3b6aa0358efe "/bin/bash start.sh" 11 minutes ago Up 11 minutes
nginx
[root@syndic ~]# docker commit -p -c 'CMD ["/bin/bash","start.sh"]' 76272b72c9a9 3199560936/nginx:v0.1
[root@syndic ~]# docker commit -p -c 'CMD ["/bin/bash","start.sh"]' f3ef9b30991d 3199560936/php:v0.3
[root@syndic ~]# docker commit -p -c 'CMD ["/bin/bash","start.sh"]' f7f604cebf74 3199560936/mysql:v0.1
[root@syndic ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
3199560936/php v0.3 f13fba8e80ef About an hour ago 1.46GB
3199560936/mysql v0.1 43be0e44cf87 2 hours ago 3.81GB
3199560936/nginx v0.1 3b6aa0358efe 2 hours ago 553MB
centos latest 5d0da3dc9764 2 months ago 231MB
[root@syndic ~]#
7.映射nginx端口
//映射端口记得把所有容器停掉
[root@syndic ~]# docker run -itd --name nginx -p 80:80 3b6aa0358efe //nginx镜像ID
76272b72c9a9eb6308985ff4b97f25837f1033670742ebe2561ad3bd0757110f
[root@syndic ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
[root@syndic ~]#
[root@syndic ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7f604cebf74 43be0e44cf87 "/bin/bash start.sh" 9 minutes ago Up 9 minutes mysql
f3ef9b30991d f13fba8e80ef "/bin/bash /start.sh" 10 minutes ago Up 10 minutes php
76272b72c9a9 3b6aa0358efe "/bin/bash start.sh" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@syndic ~]#
[root@syndic ~]# docker exec -it 76272b72c9a9 /bin/bash //映射端口后进入nginx中
[root@1b71cc60cd47 /]#
[root@1b71cc60cd47 /]# vi /usr/local/nginx/conf/nginx.conf
。。。
location / {
root html;
index index.html index.php index.htm; //添加index.php
}
。。。
location ~ \.php$ {
root /var/www/html; //添加路径
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //更改为$document_root
include fastcgi_params;
}
。。。
[root@1b71cc60cd47 /]# nginx -s reload
8.配置container
[root@syndic ~]# docker run -it --name php --network container:nginx f13fba8e80ef //php镜像ID
[root@76272b72c9a9 /]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
[root@76272b72c9a9 /]#
[root@1b71cc60cd47 /]# mkdir -p /var/www/html
[root@1b71cc60cd47 /]# cd /var/www/html/
[root@1b71cc60cd47 html]# vi index.php //注意这里实在php容器里面得操作
[root@1b71cc60cd47 html]# cat index.php
<?php
phpinfo();
?>
[root@1b71cc60cd47 html]#
[root@syndic ~]# docker run -it --name mysql --network container:nginx 43be0e44cf87 //mysql镜像ID
Starting MySQL SUCCESS!
[root@76272b72c9a9 /]# Logging to '/opt/data/76272b72c9a9.err'.
[root@76272b72c9a9 /]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
[root@76272b72c9a9 /]#
9.访问测试