Beispiel für die Kompilierung von LNMP im Docker-Container

Beispiel für die Kompilierung von LNMP im Docker-Container

1. Projektbeschreibung

Verwenden Sie den Docker-Container, um durch Kompilieren und Installieren ein Nginx-Image basierend auf dem CentOS-Image, dem MySQL-Image und dem PHP-Image zu erstellen, und verwenden Sie schließlich den Netzwerkmodus des Containers, um beim Starten des Containers über das Image auf die PHP-Testseite zuzugreifen.

2. Nginx-Bildproduktion

//Ziehen Sie das CentOS-Image [root@Docker ~]# docker pull centos
Standard-Tag verwenden: latest
neuestes: Aus Bibliothek/CentOS ziehen
a1d0c7532777: Ziehen abgeschlossen 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Neueres Image für Centos:latest heruntergeladen
docker.io/library/centos:latest

[root@localhost ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
centos latest 5d0da3dc9764 vor 2 Monaten 231MB

// CentOS-Image ausführen [root@localhost ~]# docker run -it --name nginx 5d0da3dc9764 /bin/bash
[root@03ca6bdc0374 /]# 

// Übertragen Sie das Nginx-Installationspaket in den Container [root@localhost ~]# docker cp /usr/src/nginx-1.20.1.tar.gz 03ca6bdc0374:/usr/src/

// Nginx-Konto erstellen [root@03ca6bdc0374 /]# useradd -r -M -s /sbin/nologin nginx

//Abhängige Pakete installieren [root@03ca6bdc0374 /]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make

// Erstellen Sie ein Verzeichnis zum Speichern von Nginx-Protokollen [root@03ca6bdc0374 /]# mkdir -p /var/log/nginx
[root@03ca6bdc0374 /]# chown -R nginx.nginx /var/log/nginx/

// Entpacken Sie das Nginx-Paket zur Kompilierung und Installation [root@03ca6bdc0374 /]# cd /usr/src/
[root@03ca6bdc0374 quelle]# ls
Debuggen Sie den Kernel nginx-1.20.1.tar.gz
[root@03ca6bdc0374 src]# tar xf nginx-1.20.1.tar.gz 
[root@03ca6bdc0374 src]# cd nginx-1.20.1
[root@03ca6bdc0374 nginx-1.20.1]# ./konfigurieren \
--prefix=/usr/local/nginx \
--Benutzer=nginx \
--group=nginx \
--mit-debug \
--mit-http_ssl_module \
--mit-http_realip_module \
--mit-http_image_filter_module \
--mit-http_gunzip_module \
--mit-http_gzip_static_module \
--mit-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log

[root@03ca6bdc0374 nginx-1.20.1]# make && make install

// Umgebungsvariablen festlegen [root@03ca6bdc0374 nginx-1.20.1]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@03ca6bdc0374 nginx-1.20.1]# Quelle /etc/profile.d/nginx.sh 

// Den Abhörport anzeigen [root@03ca6bdc0374 nginx-1.20.1]# nginx
[root@03ca6bdc0374 nginx-1.20.1]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* 

[root@localhost ~]# curl 172.17.0.2 
<!DOCTYPE html>
<html>
<Kopf>
<title>Willkommen bei nginx!</title>
<Stil>
    Körper {
        Breite: 35em;
        Rand: 0 automatisch;
        Schriftfamilie: Tahoma, Verdana, Arial, serifenlos;
    }
</Stil>
</Kopf>
<Text>
<h1>Willkommen bei nginx!</h1>
<p>Wenn Sie diese Seite sehen, ist der nginx-Webserver erfolgreich installiert und
funktioniert. Weitere Konfiguration ist erforderlich.</p>

<p>Online-Dokumentation und Support finden Sie unter
<a href="http://nginx.org/" rel="external nofollow" >nginx.org</a>.<br/>
Kommerzieller Support ist verfügbar unter
<a href="http://nginx.com/" rel="external nofollow" >nginx.com</a>.</p>

<p><em>Danke, dass Sie nginx verwenden.</em></p>
</body>
</html>

// Ändern Sie die Konfigurationsdatei [root@03ca6bdc0374 nginx-1.20.1]# vim /usr/local/nginx/conf/nginx.conf
......
http {
    mime.types einschließen;
    Standardtyp Anwendung/Oktett-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 Protokolle/access.log Haupt;

    sendfile an;
    #tcp_nopush ein;

    #keepalive_timeout 0;
    KeepAlive-Timeout 65;

    #gzip ein;

    Server {
        hören Sie 80;
        Servername localhost;

        #Zeichensatz koi8-r;

        #access_log Protokolle/Host.access.log Haupt;

        Standort / {
            Stamm-HTML;
            index index.php index.html index.htm; // index.php hinzufügen
        }
        ......
        Standort ~ \.php$ {
            root /var/www/html; // Verzeichnis der PHP-Testseite fastcgi_pass 127.0.0.1:9000; // Bei der Arbeit sollte dies in die Adresse des PHP-Servers fastcgi_index index.php geändert werden;
            fastcgi_param SCRIPT_FILENAME $Dokumentenstammsatz$fastcgi_script_name;
            fastcgi_params einschließen;
        }

......
daemon off; // Bis zum Ende schreiben // Konfigurationsdatei neu laden [root@03ca6bdc0374 nginx-1.20.1]# nginx -s reload
[root@03ca6bdc0374 nginx-1.20.1]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*  

// Nginx-Image erstellen [root@localhost ~]# docker commit -a '[email protected]' -c 'CMD ["/usr/local/nginx/sbin/nginx"]' -p 03ca6bdc0374 gaofan1225/nginx:v0.1
sha256:453bfb1a13ae0aeba38e2e26ebe03e09544aa2ea8b477e45e4fb8aa51fec3e92
[root@localhost ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
gaofan1225/nginx v0.1 453bfb1a13ae vor 16 Sekunden 575 MB
centos latest 5d0da3dc9764 vor 2 Monaten 231MB

3. MySQL-Image-Erstellung

// Centos-Image ausführen [root@localhost ~]# Docker-Images
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
gaofan1225/nginx v0.1 453bfb1a13ae vor 16 Sekunden 575 MB
centos latest 5d0da3dc9764 vor 2 Monaten 231MB
[root@localhost ~]# docker run -it --name mysql 5d0da3dc9764 /bin/bash
[root@3ea39d4dfa8f /]# 

// Übertragen Sie das MySQL-Installationspaket in den Container [root@localhost ~]# docker cp /usr/src/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 9b6741a9ef22:/usr/src/

//Abhängige Pakete installieren [root@9b6741a9ef22 /]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel ncurses-compat-libs
[root@9b6741a9ef22 /]# yum -y installiere libaio*
[root@9b6741a9ef22 /]# yum -y installiere numactl.x86_64

// MySQL-Benutzer erstellen [root@9b6741a9ef22 /]# useradd -r -M -s /sbin/nologin mysql

// Entpacken Sie das Installationspaket [root@9b6741a9ef22 /]# cd /usr/src/
[root@9b6741a9ef22 src]# ls
Debuggen Sie Kernel mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
[root@9b6741a9ef22 src]# tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

// Erstelle einen Softlink und richte ihn für die ganze Schule ein [root@9b6741a9ef22 src]# cd /usr/local/
[root@9b6741a9ef22 lokal]# ls
bin include libexec share
usw. lib mysql-5.7.34-linux-glibc2.12-x86_64 src
Spiele lib64 sbin
[root@9b6741a9ef22 lokal]# ln -sv mysql-5.7.34-linux-glibc2.12-x86_64/mysql
'mysql' -> 'mysql-5.7.34-linux-glibc2.12-x86_64/'
[root@9b6741a9ef22 lokal]# chown -R mysql.mysql /usr/local/mysql*

// Umgebungsvariablen festlegen [root@9b6741a9ef22 local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@9b6741a9ef22 lokal]# Quelle /etc/profile.d/mysql.sh
[root@9b6741a9ef22 lokal]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

// Erstellen Sie einen Softlink zur Header-Datei [root@9b6741a9ef22 local]# ln -s /usr/local/mysql/include /usr/include/mysql

// Hilfedokument erstellen [root@9b6741a9ef22 local]# cat /etc/man_db.conf 
MANDATORY_MANPATH /usr/local/mysql/man

// Bibliotheksdatei erstellen [root@9b6741a9ef22 local]# cat /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@9b6741a9ef22 lokal]# ldconfig

// Erstellen Sie ein Datenspeicherverzeichnis [root@9b6741a9ef22 local]# mkdir -p /opt/data
[root@9b6741a9ef22 lokal]# chown -R mysql.mysql /opt/data
[root@9b6741a9ef22 lokal]# ls -l /opt/
gesamt 0
drwxr-xr-x. 2 mysql mysql 6 Dez 4 01:31 Daten

// Initialisieren Sie die Datenbank [root@9b6741a9ef22 local]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/

// Konfigurationsdatei generieren [root@9b6741a9ef22 local]# cat > /etc/my.cnf <<EOF
[mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
pid-Datei = /opt/data/mysql.pid
Benutzer = MySQL
Namensauflösung überspringen
Ende der Laufzeit

// MySQL-Startdienst konfigurieren [root@9b6741a9ef22 local]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /usr/local/mysql/support-files/mysql.server
[root@9b6741a9ef22 lokal]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /usr/local/mysql/support-files/mysql.server

// Starten Sie den MySQL-Dienst [root@9b6741a9ef22 local]# /usr/local/mysql/support-files/mysql.server start
MySQL.Logging wird in „/opt/data/9b6741a9ef22.err“ gestartet.
 ERFOLG! 
[root@9b6741a9ef22 lokal]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
HÖREN 0 80 *:3306 *:* 

// MySQL-Startskript schreiben [root@9b6741a9ef22 local]# cd /
[root@9b6741a9ef22 /]# cat /start.sh 
#!/bin/sh
/usr/local/mysql/support-files/mysql.server starten

/bin/bash
[root@9b6741a9ef22 /]# chmod +x /start.sh 

// MySQL-Image erstellen [root@localhost ~]# docker commit -a '[email protected]' -c 'CMD ["/bin/bash","/start.sh"]' -p 9b6741a9ef22 gaofan1225/mysql:v0.1
sha256:7abe6fc819127b8ef3d9ac0ea3d24aadda1b189d739e4b53416530fc79db795f
[root@localhost ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
gaofan1225/mysql v0.1 7abe6fc81912 vor 10 Sekunden 3,81 GB
gaofan1225/nginx v0.1 453bfb1a13ae vor 17 Minuten 575 MB
centos latest 5d0da3dc9764 vor 2 Monaten 231MB

4. PHP-Bilderstellung

// Centos-Image ausführen [root@localhost ~]# Docker-Images
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
gaofan1225/mysql v0.1 7abe6fc81912 vor 10 Sekunden 3,81 GB
gaofan1225/nginx v0.1 453bfb1a13ae vor 17 Minuten 575 MB
centos latest 5d0da3dc9764 vor 2 Monaten 231MB

[root@localhost ~]# docker run -it --name php 5d0da3dc9764
[root@c6882394804e /]# 

// Übertragen Sie das PHP-Installationspaket und die abhängigen Pakete in den Container [root@localhost ~]# docker cp /usr/src/php-8.0.12.tar.gz c6882394804e:/usr/src/
[root@localhost ~]# docker cp /usr/src/oniguruma-devel-6.8.2-2.el8.x86_64.rpm c6882394804e:/usr/src/

// Epel-Quellcode und Abhängigkeitspakete herunterladen [root@c6882394804e /]# yum -y install epel-release

[root@c6882394804e /]# yum -y installiere 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 libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel php-mysqlnd libzip-devel libsqlite3x libsqlite3x-devel oniguruma libzip-devel gcc gcc-c++ make

[root@c6882394804e /]# yum -y installiere libcurl-devel

// Entpacken Sie das PHP-Installationspaket zur Kompilierung und Installation [root@c6882394804e /]# cd /usr/src/
[root@c6882394804e src]# ls 
debug-oniguruma-devel-6.8.2-2.el8.x86_64.rpm
Kernel php-8.0.12.tar.gz
[root@c6882394804e src]# yum -y installiere oniguruma-devel-6.8.2-2.el8.x86_64.rpm 
[root@c6882394804e src]# tar xf php-8.0.12.tar.gz 

[root@c6882394804e src]# cd php-8.0.12
[root@c6882394804e php-8.0.12]# ./configure --prefix=/usr/local/php8 \
--with-config-file-path=/etc \
--enable-fpm \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--mit-openssl \
--enable-bcmath \
--mit-iconv \
--mit-bz2 \
--enable-calendar \
--mit-curl \
--enable-exif \
--enable-ftp \
--enable-gd \
--mit-jpeg \
--with-zlib-dir \
--mit-freetype \
--mit-gettext \
--enable-mbstring \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--mit-readline \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--mit-zip \
--enable-mysqlnd-compression-support \
--mit-Birne \
--enable-pcntl \
--enable-posix
[root@c6882394804e php-8.0.12]# make && make install

// Umgebungsvariablen festlegen [root@c6882394804e php-8.0.12]# echo 'export PATH=/usr/local/php8/bin:$PATH' > /etc/profile.d/php.sh
[root@c6882394804e php-8.0.12]# Quelle /etc/profile.d/php.sh

// php-fpm konfigurieren
[root@c6882394804e php-8.0.12]# cp php.ini-Produktion /etc/php.ini
cp: '/etc/php.ini' überschreiben? y
[root@c6882394804e php-8.0.12]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@c6882394804e php-8.0.12]# chmod +x /etc/rc.d/init.d/php-fpm
[root@c6882394804e php-8.0.12]# cd /usr/local/php8/etc/
[root@c6882394804e usw.]# cp php-fpm.conf.default php-fpm.conf
[root@c6882394804e usw.]# cd php-fpm.d/
[root@c6882394804e php-fpm.d]# cp www.conf.default www.conf

// Den Abhörport anzeigen [root@c6882394804e php-fpm.d]# /usr/local/php8/sbin/php-fpm 
[root@c6882394804e php-fpm.d]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*  

// Schreiben Sie das Startskript [root@c6882394804e php-fpm.d]# cd /
[root@c6882394804e /]# cat /start.sh 
#!/bin/sh
/usr/local/php8/sbin/php-fpm
/bin/bash
[root@c6882394804e /]# chmod +x /start.sh

// Testseite erstellen [root@c6882394804e /]# mkdir -p /var/www/html
[root@c6882394804e /]# cd /var/www/html/
[root@c6882394804e html]# vi index.php
[root@c6882394804e html]# Katze index.php 
<?php
  phpinfo();
?>

// Erstellen Sie ein PHP-Image [root@localhost ~]# docker commit -a '[email protected]' -c 'CMD ["/bin/bash","/start.sh"]' -p c6882394804e gaofan1225/php:v0.1
sha256:9bb6f6ec5b7cff9b3e92bc3b2f8eb2542c963643e74642be7eace465bc2225f9
[root@localhost ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
gaofan1225/php v0.1 9bb6f6ec5b7c vor 15 Sekunden 1,53 GB
gaofan1225/mysql v0.1 7abe6fc81912 vor 2 Stunden 3,81 GB
gaofan1225/nginx v0.1 453bfb1a13ae vor 2 Stunden 575 MB
centos latest 5d0da3dc9764 vor 2 Monaten 231MB

5. Führen Sie LNMP aus

Verwenden Sie den Containermodus-Netzwerkmodus

[root@localhost ~]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN

// Starten Sie den Nginx-Container [root@localhost ~]# docker run -dit --name nginx -p 80:80 453bfb1a13ae
a8ff680fc2bb61118d10ab1926fffed9c4975f72834d1628bf0cfff851bd7935

[root@localhost ~]# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
a8ff680fc2bb 453bfb1a13ae "/usr/local/nginx/sb..." vor 16 Sekunden. Vor 14 Sekunden aktiv. 0.0.0.0:80->80/tcp, :::80->80/tcp nginx

[root@localhost ~]# docker exec -it a8ff680fc2bb /bin/bash
[root@a8ff680fc2bb /]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* 

// Starten Sie den MySQL-Container [root@localhost ~]# docker run -dit --name mysql --network container:a8ff680fc2bb 7abe6fc81912
e776f9e93c6ca0d8fba53957cfa9e85105913fcbe53a9400c2657127eb049c2d

[root@localhost ~]# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
e776f9e93c6c 7abe6fc81912 "/bin/bash /start.sh" vor 9 Sekunden Up 8 Sekunden mysql
a8ff680fc2bb 453bfb1a13ae "/usr/local/nginx/sb..." vor 2 Minuten Vor 2 Minuten 0.0.0.0:80->80/tcp, :::80->80/tcp nginx

[root@localhost ~]# docker exec -it e776f9e93c6c /bin/bash
[root@a8ff680fc2bb /]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*                                                                 
HÖREN 0 80 *:3306 *:*    

// Starten Sie den PHP-Container [root@localhost ~]# docker run -dit --name php --network container:a8ff680fc2bb 9bb6f6ec5b7c 
e80155914f858910ffb678a7d294e68804f735bf9a52efd21a036f7abee23bbe

[root@localhost ~]# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
e80155914f85 9bb6f6ec5b7c "/bin/bash /start.sh" vor 4 Sekunden Up 3 Sekunden php
e776f9e93c6c 7abe6fc81912 "/bin/bash /start.sh" Vor etwa einer Minute Up Vor etwa einer Minute mysql
a8ff680fc2bb 453bfb1a13ae "/usr/local/nginx/sb..." vor 4 Minuten Vor 4 Minuten 0.0.0.0:80->80/tcp, :::80->80/tcp nginx

[root@localhost ~]# docker exec -it e80155914f85 /bin/bash
[root@a8ff680fc2bb /]# ss -antl
Status Recv-Q Send-Q Lokale Adresse:Port Peer-Adresse:Port Prozess                                                      
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*                                                                 
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*                                                                 
HÖREN 0 80 *:3306 *:*   

6. Webansicht

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel zum Kompilieren von LNMP in einem Docker-Container. Weitere relevante Inhalte zum Kompilieren von LNMP in Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So erstellen Sie schnell eine LNMP-Umgebung mit Docker (neueste Version)
  • Verwenden Sie Docker, um ein verteiltes lnmp-Image zu erstellen
  • So stellen Sie die LNMP-Architektur im Docker bereit
  • So erstellen Sie eine lnmp-Umgebung im Docker
  • Verwenden Sie Docker, um eine integrierte Service-LNMP-Umgebung zu erstellen
  • Detaillierte Erläuterung zur Verwendung von Docker zum Erstellen einer LNMP-Umgebung

<<:  Eine kurze Diskussion über die Anwendung von HTML-Webseiten-Tabellenstruktur-Markup

>>:  Implementierung des Vue-Top-Tags-Browserverlaufs

Artikel empfehlen

Optimierung der Datenbank-SQL-Anweisung

Warum optimieren: Beim Start des eigentlichen Pro...

Umfassende Inventarisierung wichtiger Logdateien in MySQL

Inhaltsverzeichnis Einführung Protokollklassifizi...

Lösen Sie das Problem der Verwendung des Swiper-Plugins in Vue

Da ich dieses Plugin beim Schreiben einer Demo ve...

Eine kurze Erläuterung der $notify-Punkte des Elements

Meine ursprüngliche Absicht war, die $notify-Bena...

Beispiel für die Anpassung von rem an mobile Geräte

Vorwort Überprüfung und Zusammenfassung von REM-A...

CentOS 7.2 erstellt einen Nginx-Webserver zum Bereitstellen des Uniapp-Projekts

Panther begann als Anfänger und ich bin immer noc...

Ausführliche Erläuterung der Mysql-Deadlock-Anzeige und Deadlock-Entfernung

Vorwort Vor einiger Zeit ist bei mir ein MySQL-De...

Fallstricke und Lösungen bei der MySQL-Zeitstempelvergleichsabfrage

Inhaltsverzeichnis Fallstricke bei Zeitstempelver...

Vue: Zwei Komponenten auf gleicher Ebene erreichen eine Wertübertragung

Vue-Komponenten sind verbunden, daher ist es unve...