1. 拉取centos镜像
[root@localhost ~]# docker pull centos Using default tag: 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@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATEDSIZE centos latest5d0da3dc9764 2 months ago 231MB [root@localhost ~]#
2. 构建nginx镜像
[root@localhost ~]# docker run --name nginx -it centos [root@522006030d19 /]# useradd -r -M -s /sbin/nologin nginx [root@522006030d19 /]# yum -y install pcre-devel pcre gcc gcc-c++ openssl-devel zlib zlib-devel make vim wget openssl openssl-devel gd-devel [root@522006030d19 /]# mkdir -p /var/log/nginx [root@522006030d19 /]# chown -R nginx.nginx /var/log/nginx [root@522006030d19 /]# cd /usr/src/ [root@522006030d19 src]# wget https://nginx.org/download/nginx-1.20.1.tar.gz [root@522006030d19 src]# tar xf nginx-1.20.1.tar.gz [root@522006030d19 src]# cd nginx-1.20.1 [root@522006030d19 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@522006030d19 nginx-1.20.1]# make -j $(grep \'processor\' /proc/cpuinfo | wc -l) && make install [root@522006030d19 nginx-1.20.1]# echo \'export PATH=/usr/local/nginx/sbin:$PATH\' > /etc/profile.d/nginx.sh[root@522006030d19 nginx-1.20.1]# source /etc/profile.d/nginx.sh [root@522006030d19 nginx-1.20.1]# nginx [root@522006030d19 nginx-1.20.1]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 1280.0.0.0:80 0.0.0.0:* [root@522006030d19 nginx-1.20.1]# [root@522006030d19 nginx-1.20.1]# echo \"daemon off;\" >> /usr/local/nginx/conf/nginx.conf [root@522006030d19 nginx-1.20.1]# tail -1 /usr/local/nginx/conf/nginx.conf daemon off; [root@522006030d19 nginx-1.20.1]#
//打开另外一个终端 [root@localhost ~]# docker commit -c \'CMD [\"/usr/local/nginx/sbin/nginx\"]\'-p nginx pengyudong/nginx:v1 sha256:2153a12060f6cca88646f285a1ae2af2a94c0d489ad8393f931d29c8fdd8af6e [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pengyudong/nginx v12153a12060f6 27 seconds ago 576MB centos latest5d0da3dc9764 2 months ago 231MB [root@localhost ~]#
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUSPORTS NAMES [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 522006030d19 centos\"/bin/bash\" 14 minutes ago Exited (0) 38 seconds ago nginx [root@localhost ~]# docker rm 522006030d19 522006030d19 [root@localhost ~]# docker run pengyudong/nginx:v1 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c129a20e7c7 pengyudong/nginx:v1 \"/usr/local/nginx/sb…\" About a minute ago Up 2 seconds blissful_perlman
[root@localhost ~]# docker inspect 9c129a20e7c7 ......省略N行 \"Gateway\": \"172.17.0.1\", \"GlobalIPv6Address\": \"\", \"GlobalIPv6PrefixLen\": 0, \"IPAddress\": \"172.17.0.2\", .....省略N行 [root@localhost ~]# curl 172.17.0.2 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href=\"http://nginx.org/\" rel=\"external nofollow\" >nginx.org</a>.<br/> Commercial support is available at <a href=\"http://nginx.com/\" rel=\"external nofollow\" >nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> [root@localhost ~]#
3. 构建mysql镜像
[root@localhost ~]# docker run --name mysql -it centos [root@16256ee64b9e /]# cd /usr/src/ [root@16256ee64b9e src]# ls debug kernels [root@16256ee64b9e src]#
//开启另外一个终端 [root@localhost src]# ls debug kernels mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz [root@localhost ~]# cd /usr/src/ [root@localhost src]# docker cp mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz mysql:/usr/src/
[root@16256ee64b9e src]# ls debug kernels mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz [root@16256ee64b9e src]# [root@16256ee64b9e src]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel ncurses-compat-libs libaio numactl [root@16256ee64b9e src]# useradd -r -M -s /sbin/nologin mysql [root@16256ee64b9e src]# tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz [root@16256ee64b9e src]# mv mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql [root@16256ee64b9e src]# cd /usr/local/ [root@16256ee64b9e local]# ls bin etc games include lib lib64 libexec mysql sbin share src [root@16256ee64b9e local]# chown -R mysql.mysql /usr/local/mysql [root@16256ee64b9e local]# mkdir /opt/data [root@16256ee64b9e local]# chown -R mysql.mysql /opt/data [root@16256ee64b9e local]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data 2021-12-06T02:53:34.095554Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2021-12-06T02:53:35.482793Z 0 [Warning] InnoDB: New log files created, LSN=45790 2021-12-06T02:53:35.506011Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2021-12-06T02:53:35.562063Z 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: b4aa24d8-563f-11ec-80a8-0242ac110003. 2021-12-06T02:53:35.562798Z 0 [Warning] Gtid table is not ready to be used. Table \'mysql.gtid_executed\' cannot be opened. 2021-12-06T02:53:35.979249Z 0 [Warning] CA certificate ca.pem is self signed. 2021-12-06T02:53:36.217615Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. [root@16256ee64b9e local]# [root@16256ee64b9e local]# echo \'export PATH=/usr/local/mysql/bin:$PATH\' > /etc/profile.d/mysql.sh [root@16256ee64b9e local]# . /etc/profile.d/mysql.sh [root@16256ee64b9e local]# echo $PATH /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [root@16256ee64b9e local]# cat > /etc/my.cnf <<EOF > [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 > EOF [root@16256ee64b9e local]# cat /etc/m machine-idmodprobe.d/ motd my.cnf makedumpfile.conf.sample modules-load.d/ mtab my.cnf.d/ [root@16256ee64b9e local]# 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@16256ee64b9e local]# [root@16256ee64b9e local]# sed -ri \'s#^(basedir=).*#\\1/usr/local/mysql#g\' /usr/local/mysql/support-files/mysql.server [root@16256ee64b9e local]# sed -ri \'s#^(datadir=).*#\\1/opt/data#g\' /usr/local/mysql/support-files/mysql.server [root@16256ee64b9e local]# sed -n \'46,1p\' /usr/local/mysql/support-files/mysql.server basedir=/usr/local/mysql [root@16256ee64b9e local]# sed -n \'47,1p\' /usr/local/mysql/support-files/mysql.server datadir=/opt/data [root@16256ee64b9e local]# sed -n \'46,47p\' /usr/local/mysql/support-files/mysql.server basedir=/usr/local/mysql datadir=/opt/data [root@16256ee64b9e local]# [root@16256ee64b9e ~]# /usr/local/mysql/support-files/mysql.server start Starting MySQL.Logging to \'/opt/data/16256ee64b9e.err\'. SUCCESS! [root@16256ee64b9e ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 80 *:3306 *:* [root@16256ee64b9e ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \\g. Your MySQL connection id is 2 Server version: 5.7.34 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> set password = password(\'123\'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> exit Bye [root@16256ee64b9e ~]# [root@16256ee64b9e ~]# mkdir /scripts [root@16256ee64b9e ~]# vi /scripts/start.sh [root@16256ee64b9e ~]# sed -n \'1,3p\' /scripts/start.sh #!/bin/bash /usr/local/mysql/support-files/mysql.server start /bin/bash [root@16256ee64b9e ~]# chmod +x /scripts/start.sh [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pengyudong/nginx v12153a12060f6 28 minutes ago 576MB centos latest5d0da3dc9764 2 months ago 231MB [root@localhost ~]# docker commit -c \'CMD [\"/scripts/start.sh\"]\' -p mysql pengyudong/mysql:v1 sha256:9c8b9aa2d9177e737138f7a42976210fd6e7b039cb543c306281be72c351806e [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pengyudong/mysql v19c8b9aa2d917 4 seconds ago3.81GB pengyudong/nginx v12153a12060f6 30 minutes ago 576MB centos latest5d0da3dc9764 2 months ago 231MB
[root@localhost ~]# docker run –name mysql-1 -dit –net=container:97c5a3076d39 pengyudong/mysql:v1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ade839dc292e pengyudong/mysql:v1 “/scripts/start.sh” 12 minutes ago Up 12 minutes mysql-1
29007b1a67a8 pengyudong/nginx:v1 “/usr/local/nginx/sb…” 2 hours ago Up About an hour
[root@localhost ~]# docker exec -it mysql-1 /bin/bash
[root@29007b1a67a8 /]# 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 80 *:3306 :
4. 构建php镜像
[root@localhost ~]# cd /usr/src/ [root@localhost src]# ls debug kernels mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz php-8.0.10.tar.gz [root@localhost src]# docker cp php-8.0.10.tar.gz php8:/usr/src/ [root@a116c2a489fe src]# ls debug kernels php-8.0.10.tar.gz [root@a116c2a489fe src]# yum -y install epel-release [root@a116c2a489fe src]# yum -y install sqlite-devel libzip-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel 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@a116c2a489fe 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@a116c2a489fe src]# tar xf php-8.0.10.tar.gz [root@a116c2a489fe src]# cd php-8.0.10 [root@a116c2a489fe php-8.0.10]# ./configure --prefix=/usr/local/php8 \\ > --with-config-file-path=/etc \\ > --enable-fpm \\ > --disable-debug \\ > --disable-rpath \\ > --enable-shared \\ > --enable-soap \\ nable-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 \\ --en> --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@a116c2a489fe php-8.0.10]# make -j $(grep \'processor\' /proc/cpuinfo | wc -l) && make install [root@a116c2a489fe php-8.0.10]# echo \'export PATH=/usr/local/php7/bin:$PATH\' > /etc/profile.d/php.sh [root@a116c2a489fe php-8.0.10]# source /etc/profile.d/php.sh [root@a116c2a489fe php-8.0.10]# cp -f /usr/src/php-8.0.10/php.ini-production /etc/php.i cp: overwrite \'/etc/php.i\'? yes [root@a116c2a489fe php-8.0.10]# cp -f /usr/src/php-8.0.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@a116c2a489fe php-8.0.10]# chmod +x /etc/init.d/php-fpm [root@a116c2a489fe php-8.0.10]# cp -f /usr/local/php8/etc/php-fpm.conf.default /usr/local//php8/etc/php-fpm.conf [root@a116c2a489fe php-8.0.10]# cp -f /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf [root@a116c2a489fe php-8.0.10]# mkdir /scripts [root@a116c2a489fe php-8.0.10]# vi /scripts/start.sh [root@a116c2a489fe php-8.0.10]# cat /scripts/start.sh #!/bin/bash /etc/init.d/php-fpm start /bin/bash [root@a116c2a489fe php-8.0.10]# chmod +x /scripts/start.sh [root@a116c2a489fe php-8.0.10]# /etc/init.d/php-fpm start Starting php-fpm done [root@a116c2a489fe php-8.0.10]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 127.0.0.1:90000.0.0.0:* [root@a116c2a489fe php-8.0.10]#
[root@0e6298ebe47d php-8.0.10]#
[root@0e6298ebe47d php-8.0.10]# mkdir -p /var/www/html
[root@0e6298ebe47d php-8.0.10]# vi /var/www/html/index.php
[root@0e6298ebe47d php-8.0.10]# cat /var/www/html/index.php
<?php phpinfo(); ?>
[root@0e6298ebe47d php-8.0.10]#
[root@localhost src]# docker commit -c \'CMD [\"/bin/bash\",\"/scripts/start.sh\"]\' -p php8 pengyudong/php8:v1 sha256:8ee4d3fb7bd27b0242cf096464932ff98fbc42d641d1f6b9cac7ddccb429f450 [root@localhost src]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pengyudong/php8v18ee4d3fb7bd2 22 seconds ago 1.52GB pengyudong/mysql v19c8b9aa2d917 30 minutes ago 3.81GB pengyudong/nginx v12153a12060f6 About an hour ago 576MB centos latest5d0da3dc9764 2 months ago231MB [root@localhost src]#
5. 配置lnmp
//配置nginx [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a116c2a489fe centos\"/bin/bash\" 28 minutes ago Up 28 minutes php8 16256ee64b9e centos\"/bin/bash\" 55 minutes ago Up 29 minutes mysql 9c129a20e7c7 pengyudong/nginx:v1 \"/usr/local/nginx/sb…\" 59 minutes ago Up 57 minutes blissful_perlman [root@localhost ~]# docker exec -it 9c129a20e7c7 /bin/bash [root@9c129a20e7c7 ~]# vi /usr/local/nginx/conf/nginx.conf ... location / { root html; index index.php index.html 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; //修改 includefastcgi_params; } ...
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a116c2a489fe centos\"/bin/bash\" 35 minutes ago Up 35 minutes php8 16256ee64b9e centos\"/bin/bash\" About an hour ago Up 36 minutes mysql 9c129a20e7c7 pengyudong/nginx:v1 \"/usr/local/nginx/sb…\" About an hour ago Up 46 seconds blissful_perlman [root@localhost ~]# docker commit -c \'CMD [\"/usr/local/nginx/sbin/nginx\"]\'-p 9c129a20e7c7 pengyudong/nginx:v2 sha256:8ca4733bb94edf9dac98982610e626b663052000d2c165127e257eeebec34027 [root@localhost ~]# sha256:dd9ec3401a3df247bc19cb792a076cfa915e67cb88fdbdfbf2284bbda6ac9a78 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pengyudong/nginx v2dd9ec3401a3d 7 seconds ago 576MB pengyudong/php8v18ee4d3fb7bd2 8 minutes ago 1.52GB pengyudong/mysql v19c8b9aa2d917 38 minutes ago 3.81GB pengyudong/nginx v12153a12060f6 About an hour ago 576MB centos latest5d0da3dc9764 2 months ago231MB [root@localhost ~]#
//配置php [root@localhost ~]# docker exec -it php8 /bin/bash [root@a116c2a489fe /]# mkdir -p /var/www/html [root@a116c2a489fe /]# vi /var/www/html/index.php [root@a116c2a489fe /]# cat /var/www/html/index.php <?php phpinfo(); ?> [root@a116c2a489fe /]# [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a116c2a489fe centos\"/bin/bash\" 37 minutes ago Up 37 minutes php8 16256ee64b9e centos\"/bin/bash\" About an hour ago Up 38 minutes mysql 9c129a20e7c7 pengyudong/nginx:v1 \"/usr/local/nginx/sb…\" About an hour ago Up 3 minutes blissful_perlman [root@localhost ~]# docker commit -c \'CMD [\"/bin/bash\",\"/scripts/start.sh\"]\' -p php8 pengyudong/php8:v2 sha256:6e582cd9d5e8ce4b91addb12e6a53a6e3f5cf762aabe2ce24e5f6396ec3f15ed [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pengyudong/php8v26e582cd9d5e8 8 seconds ago 1.52GB pengyudong/nginx v2dd9ec3401a3d 2 minutes ago 576MB pengyudong/php8v18ee4d3fb7bd2 10 minutes ago 1.52GB pengyudong/mysql v19c8b9aa2d917 40 minutes ago 3.81GB pengyudong/nginx v12153a12060f6 About an hour ago 576MB centos latest5d0da3dc9764 2 months ago231MB [root@localhost ~]#
//使用container模式使容器间通信 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a116c2a489fe centos\"/bin/bash\" 38 minutes ago Up 38 minutes php8 16256ee64b9e centos\"/bin/bash\" About an hour ago Up 40 minutes mysql 9c129a20e7c7 pengyudong/nginx:v1 \"/usr/local/nginx/sb…\" About an hour ago Up 4 minutes blissful_perlman [root@localhost ~]# docker rm -f a116c2a489fe 16256ee64b9e 9c129a20e7c7 a116c2a489fe 16256ee64b9e 9c129a20e7c7 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUSPORTS NAMES [root@localhost ~]# [root@localhost ~]# docker run --name nginx -dit -p 80:80 pengyudong/nginx:v2 f64441e51181b9dc41806a9b1363a22ce28fd83f4cbd7f85df6eed88774a4197 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f64441e51181 pengyudong/nginx:v2 \"/usr/local/nginx/sb…\" 7 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx [root@localhost ~]# [root@localhost ~]# docker run --name mysql -dit --net=container:f64441e51181 pengyudong/mysql:v1 96530de34b37a5fc6af1564df64f423321b04641f6aea5a3dd5be199f02a8510 [root@localhost ~]# docker run --name php8 -dit --net=container:f64441e51181 pengyudong/php8:v2 27834149fc66f007ba1cca5d298351d39f7d819af3f1ec6fcf8e12bbdc39fb4d [root@localhost ~]# [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 27834149fc66 pengyudong/php8:v2\"/bin/bash /scripts/…\" 29 seconds ago Up 28 seconds php8 96530de34b37 pengyudong/mysql:v1 \"/scripts/start.sh\" About a minute ago Up About a minute mysql f64441e51181 pengyudong/nginx:v2 \"/usr/local/nginx/sb…\" 2 minutes agoUp 2 minutes0.0.0.0:80->80/tcp, :::80->80/tcp nginx [root@localhost ~]# docker exec -it nginx /bin/bash [root@f64441e51181 /]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 127.0.0.1:90000.0.0.0:* LISTEN 0 1280.0.0.0:80 0.0.0.0:* LISTEN 0 80 *:3306 *:* [root@f64441e51181 /]#