DockerコンテナでLNMPをコンパイルする例

DockerコンテナでLNMPをコンパイルする例

1. プロジェクトの説明

Dockerコンテナを使用して、centosイメージ、mysqlイメージ、phpイメージに基づいてnginxイメージをコンパイルしてインストールし、最後にコンテナモードのネットワークモードを使用して、イメージを介してコンテナを起動するときにphpテストページにアクセスします。

2. Nginxイメージの作成

// Centos イメージをプルする [root@Docker ~]# docker pull centos
デフォルトタグの使用: 最新
最新: library/centos から取得
a1d0c7532777: プル完了 
ダイジェスト: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
ステータス: centos:latest の新しいイメージをダウンロードしました
docker.io/ライブラリ/centos:最新

[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
centos 最新 5d0da3dc9764 2か月前 231MB

// Centos イメージを実行 [root@localhost ~]# docker run -it --name nginx 5d0da3dc9764 /bin/bash
[ルート@03ca6bdc0374 /]# 

// nginx インストール パッケージをコンテナーに転送します [root@localhost ~]# docker cp /usr/src/nginx-1.20.1.tar.gz 03ca6bdc0374:/usr/src/

// nginx アカウントを作成 [root@03ca6bdc0374 /]# useradd -r -M -s /sbin/nologin nginx

//依存パッケージをインストールします [root@03ca6bdc0374 /]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make

// nginx ログを保存するためのディレクトリを作成します [root@03ca6bdc0374 /]# mkdir -p /var/log/nginx
[root@03ca6bdc0374 /]# chown -R nginx.nginx /var/log/nginx/

// コンパイルとインストールのために nginx パッケージを解凍します [root@03ca6bdc0374 /]# cd /usr/src/
[root@03ca6bdc0374 src]# ls
デバッグカーネル 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]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--デバッグあり\
--http_ssl_module \ で始まる
--http_realip_module \ で始まる
--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@03ca6bdc0374 nginx-1.20.1]# make && make install

// 環境変数を設定する [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]# ソース /etc/profile.d/nginx.sh 

// リスニングポートを表示 [root@03ca6bdc0374 nginx-1.20.1]# nginx
[root@03ca6bdc0374 nginx-1.20.1]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 128 0.0.0.0:80 0.0.0.0:* 

[root@localhost ~]# カール 172.17.0.2 
<!DOCTYPE html>
<html>
<ヘッド>
<title>nginx へようこそ!</title>
<スタイル>
    体 {
        幅: 35em;
        マージン: 0 自動;
        フォントファミリー: Tahoma、Verdana、Arial、sans-serif;
    }
</スタイル>
</head>
<本文>
<h1>nginx へようこそ!</h1>
<p>このページが表示されたら、nginxウェブサーバーは正常にインストールされており、
動作しています。さらに設定が必要です。</p>

<p>オンラインドキュメントとサポートについては、
<a href="http://nginx.org/" rel="external nofollow" >nginx.org</a>。<br/>
商用サポートは以下からご利用いただけます。
<a href="http://nginx.com/" rel="external nofollow" >nginx.com</a> です。</p>

<p><em>nginx をご利用いただきありがとうございます。</em></p>
</本文>
</html>

// 設定ファイルを変更する [root@03ca6bdc0374 nginx-1.20.1]# vim /usr/local/nginx/conf/nginx.conf
......
http {
    mime.types を含めます。
    デフォルトタイプ アプリケーション/オクテットストリーム;

    #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 ログ/access.log メイン;

    ファイル送信オン;
    #tcp_nopush オン;

    #キープアライブタイムアウト 0;
    キープアライブタイムアウト65;

    #gzip オン;

    サーバー{
        聞く 80;
        server_name ローカルホスト;

        #文字セット koi8-r;

        #access_log ログ/host.access.log メイン;

        位置 / {
            ルートhtml;
            index index.php index.html index.htm; // index.php を追加
        }
        ......
        場所 ~ \.php$ {
            root /var/www/html; // PHP テスト ページ ディレクトリ fastcgi_pass 127.0.0.1:9000; // 作業時には、これを PHP サーバーのアドレスに変更する必要があります fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $Document_Root$fastcgi_script_name;
            fastcgi_params を含めます。
        }

......
daemon off; // 最後まで書き込む // 設定ファイルを再読み込みする [root@03ca6bdc0374 nginx-1.20.1]# nginx -s reload
[root@03ca6bdc0374 nginx-1.20.1]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 128 0.0.0.0:80 0.0.0.0:*  

// nginx イメージを作成 [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 イメージ
リポジトリ タグ イメージ ID 作成 サイズ
gaofan1225/nginx v0.1 453bfb1a13ae 16秒前 575MB
centos 最新 5d0da3dc9764 2か月前 231MB

3. MySQLイメージの作成

// Centos イメージを実行 [root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
gaofan1225/nginx v0.1 453bfb1a13ae 16秒前 575MB
centos 最新 5d0da3dc9764 2か月前 231MB
[root@localhost ~]# docker run -it --name mysql 5d0da3dc9764 /bin/bash
[ルート@3ea39d4dfa8f /]# 

// mysql インストール パッケージをコンテナーに転送します [root@localhost ~]# docker cp /usr/src/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 9b6741a9ef22:/usr/src/

//依存パッケージをインストールします [root@9b6741a9ef22 /]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel ncurses-compat-libs
[root@9b6741a9ef22 /]# yum -y libaio* をインストールします
[root@9b6741a9ef22 /]# yum -y インストール numactl.x86_64

// mysqlユーザーを作成 [root@9b6741a9ef22 /]# useradd -r -M -s /sbin/nologin mysql

// インストールパッケージを解凍します [root@9b6741a9ef22 /]# cd /usr/src/
[root@9b6741a9ef22 src]# ls
デバッグカーネル 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/

// ソフトリンクを作成し、学校全体に設定します [root@9b6741a9ef22 src]# cd /usr/local/
[root@9b6741a9ef22 ローカル]# ls
bin include libexec 共有
等ライブラリ mysql-5.7.34-linux-glibc2.12-x86_64 ソース
ゲーム lib64 sbin
[root@9b6741a9ef22 ローカル]# ln -sv mysql-5.7.34-linux-glibc2.12-x86_64/mysql
'mysql' -> 'mysql-5.7.34-linux-glibc2.12-x86_64/'
[root@9b6741a9ef22 ローカル]# chown -R mysql.mysql /usr/local/mysql*

// 環境変数を設定する [root@9b6741a9ef22 local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@9b6741a9ef22 ローカル]# ソース /etc/profile.d/mysql.sh
[root@9b6741a9ef22 ローカル]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

// ヘッダーファイルへのソフトリンクを作成します [root@9b6741a9ef22 local]# ln -s /usr/local/mysql/include /usr/include/mysql

// ヘルプドキュメントを作成 [root@9b6741a9ef22 local]# cat /etc/man_db.conf 
MANDATORY_MANPATH /usr/local/mysql/man

// ライブラリファイルを作成 [root@9b6741a9ef22 local]# cat /etc/ld.so.conf.d/mysql.conf
ローカル
[root@9b6741a9ef22 ローカル]# ldconfig

// データ保存ディレクトリを作成 [root@9b6741a9ef22 local]# mkdir -p /opt/data
[root@9b6741a9ef22 ローカル]# chown -R mysql.mysql /opt/data
[root@9b6741a9ef22 ローカル]# ls -l /opt/
合計 0
drwxr-xr-x. 2 mysql mysql 6 12月 4 01:31 データ

// データベースを初期化します [root@9b6741a9ef22 local]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/

// 設定ファイルを生成 [root@9b6741a9ef22 local]# cat > /etc/my.cnf <<EOF
[mysqld]
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /opt/data
ソケット = /tmp/mysql.sock
ポート = 3306
pid ファイル = /opt/data/mysql.pid
ユーザー = mysql
名前解決をスキップ
終了

// mysql スタートアップ サービスを構成する [root@9b6741a9ef22 local]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /usr/local/mysql/support-files/mysql.server
[root@9b6741a9ef22 ローカル]# sed -ri 's#^(datadir=).*#\1/opt/data#g​​' /usr/local/mysql/support-files/mysql.server

// mysql サービスを開始します [root@9b6741a9ef22 local]# /usr/local/mysql/support-files/mysql.server start
MySQL を起動しています。'/opt/data/9b6741a9ef22.err' にログを記録しています。
 成功! 
[root@9b6741a9ef22 ローカル]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 80 *:3306 *:* 

// mysql起動スクリプトを記述する [root@9b6741a9ef22 local]# cd /
[root@9b6741a9ef22 /]# cat /start.sh 
#!/bin/sh
/usr/local/mysql/support-files/mysql.server を起動します

バイナリ
[root@9b6741a9ef22 /]# chmod +x /start.sh 

// mysql イメージを作成 [root@localhost ~]# docker commit -a '[email protected]' -c 'CMD ["/bin/bash","/start.sh"]' -p 9b6741a9ef22 gaofan1225/mysql:v0.1
sha256:7abe6fc819127b8ef3d9ac0ea3d24aadda1b189d739e4b53416530fc​​79db795f
[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
gaofan1225/mysql v0.1 7abe6fc81912 10秒前 3.81GB
gaofan1225/nginx v0.1 453bfb1a13ae 17分前 575MB
centos 最新 5d0da3dc9764 2か月前 231MB

4. PHPイメージの作成

// Centos イメージを実行 [root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
gaofan1225/mysql v0.1 7abe6fc81912 10秒前 3.81GB
gaofan1225/nginx v0.1 453bfb1a13ae 17分前 575MB
centos 最新 5d0da3dc9764 2か月前 231MB

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

// PHP インストール パッケージと依存パッケージをコンテナーに転送します [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 ソースと依存パッケージをダウンロード [root@c6882394804e /]# yum -y install epel-release

[root@c6882394804e /]# yum -y install 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 libcurl-develをインストールします

// コンパイルとインストールのために PHP インストール パッケージを解凍します [root@c6882394804e /]# cd /usr/src/
[root@c6882394804e src]# ls 
デバッグ-鬼車-devel-6.8.2-2.el8.x86_64.rpm
カーネル php-8.0.12.tar.gz
[root@c6882394804e src]# yum -y インストール 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 \
--openssl \ で
--enable-bcmath \
--アイコン付き\
--with-bz2 \
--enable-calendar \
--curl \ で
--enable-exif \
--enable-ftp \
--enable-gd \
--jpeg 付き \
--with-zlib-dir \
--freetype \ で
--gettext \ で
--enable-mbstring \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--readline で読み込みます \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--zip \ で
--enable-mysqlnd-compression-support \
--梨付き\
--enable-pcntl \
--enable-posix
[root@c6882394804e php-8.0.12]# make && make install

// 環境変数を設定する [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]# ソース /etc/profile.d/php.sh

// php-fpm を設定する
[root@c6882394804e php-8.0.12]# cp php.ini-production /etc/php.ini
cp: '/etc/php.ini' を上書きしますか? 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 など]# cp php-fpm.conf.default php-fpm.conf
[root@c6882394804e など]# cd php-fpm.d/
[root@c6882394804e php-fpm.d]# cp www.conf.default www.conf

// リスニングポートを表示 [root@c6882394804e php-fpm.d]# /usr/local/php8/sbin/php-fpm 
[root@c6882394804e php-fpm.d]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 128 127.0.0.1:9000 0.0.0.0:*  

// 起動スクリプトを記述する [root@c6882394804e php-fpm.d]# cd /
[root@c6882394804e /]# cat /start.sh 
#!/bin/sh
php-fpm は、/usr/local/php8/sbin/php-fpm にあります。
バイナリ
[root@c6882394804e /]# chmod +x /start.sh

// テストページを作成する [root@c6882394804e /]# mkdir -p /var/www/html
[root@c6882394804e /]# cd /var/www/html/
[root@c6882394804e html]# vi index.php
[root@c6882394804e html]# cat index.php 
<?php
  phpinfo();
?>

// PHP イメージを作成する [root@localhost ~]# docker commit -a '[email protected]' -c 'CMD ["/bin/bash","/start.sh"]' -p c6882394804e gaofan1225/php:v0.1
sha256:9bb6f6ec5b7cff9b3e92bc3b2f8eb2542c963643e74642be7eace465bc2225f9
[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
gaofan1225/php v0.1 9bb6f6ec5b7c 15秒前 1.53GB
gaofan1225/mysql v0.1 7abe6fc81912 2時間前 3.81GB
gaofan1225/nginx v0.1 453bfb1a13ae 2時間前 575MB
centos 最新 5d0da3dc9764 2か月前 231MB

5. LNMPを実行する

コンテナモードネットワークモードを使用する

[root@localhost ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名

// nginxコンテナを起動します [root@localhost ~]# docker run -dit --name nginx -p 80:80 453bfb1a13ae
a8ff680fc2bb61118d10ab1926fffed9c4975f72834d1628bf0cfff851bd7935

[root@localhost ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
a8ff680fc2bb 453bfb1a13ae "/usr/local/nginx/sb..." 16 秒前 14 秒前にアップ 0.0.0.0:80->80/tcp、:::80->80/tcp nginx

[root@localhost ~]# docker exec -it a8ff680fc2bb /bin/bash
[root@a8ff680fc2bb /]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 128 0.0.0.0:80 0.0.0.0:* 

// mysqlコンテナを起動します [root@localhost ~]# docker run -dit --name mysql --network container:a8ff680fc2bb 7abe6fc81912
e776f9e93c6ca0d8fba53957cfa9e85105913fcbe53a9400c2657127eb049c2d

[root@localhost ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
e776f9e93c6c 7abe6fc81912 "/bin/bash /start.sh" 9秒前 8秒前 mysql
a8ff680fc2bb 453bfb1a13ae "/usr/local/nginx/sb..." 2 分前 2 分前にアップ 0.0.0.0:80->80/tcp、:::80->80/tcp nginx

[root@localhost ~]# docker exec -it e776f9e93c6c /bin/bash
[root@a8ff680fc2bb /]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 128 0.0.0.0:80 0.0.0.0:*                                                                 
聞く 0 80 *:3306 *:*    

// PHPコンテナを起動します [root@localhost ~]# docker run -dit --name php --network container:a8ff680fc2bb 9bb6f6ec5b7c 
e80155914f858910ffb678a7d294e68804f735bf9a52efd21a036f7abee23bbe

[root@localhost ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
e80155914f85 9bb6f6ec5b7c "/bin/bash /start.sh" 4秒前 3秒前 php
e776f9e93c6c 7abe6fc81912 "/bin/bash /start.sh" 約 1 分前 約 1 分前 mysql
a8ff680fc2bb 453bfb1a13ae "/usr/local/nginx/sb..." 4 分前 4 分前にアップ 0.0.0.0:80->80/tcp、:::80->80/tcp nginx

[root@localhost ~]# docker exec -it e80155914f85 /bin/bash
[root@a8ff680fc2bb /]# ss -antl
状態 受信Q 送信Q ローカルアドレス:ポート ピアアドレス:ポート プロセス                                                      
聞く 0 128 127.0.0.1:9000 0.0.0.0:*                                                                 
聞く 0 128 0.0.0.0:80 0.0.0.0:*                                                                 
聞く 0 80 *:3306 *:*   

6. Webビュー

ここに画像の説明を挿入

これで、Docker コンテナで LNMP をコンパイルする実装例に関するこの記事は終了です。Docker で LNMP をコンパイルする方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker で LNMP 環境を素早く構築する方法 (最新)
  • Dockerを使用して分散lnmpイメージを作成する
  • DockerでLNMPアーキテクチャを展開する方法
  • dockerでlnmp環境を構築する方法
  • Dockerを使用して統合サービスlnmp環境を作成する
  • Dockerを使用してLNMP環境を構築する詳細な説明

<<:  HTMLウェブページテーブル構造化マークアップの応用に関する簡単な説明

>>:  CSS3 シンプルカットカルーセル画像実装コード

推薦する

Echatsチャートの大画面適応を実装する方法

目次説明する成し遂げるプロジェクトのディレクトリ構造は次のとおりです。効果図は以下のとおりです要約す...

MySQL での %% のようなファジークエリの実装

1、%: 0 個以上の任意の文字を表します。あらゆるタイプと長さの文字に一致します。場合によっては、...

GaussDB for MySQL パフォーマンス最適化の詳細な説明

目次背景インスピレーションは人生から生まれる速達配送の最適化原則GaussDB の最適化 (MySQ...

MySQLクエリ制御ステートメントの詳細なグラフィック説明

mysql クエリ制御ステートメントフィールド重複排除 **キーワード: 明確** 構文: テーブル...

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

js で虫眼鏡効果を実現するためのアイデアとコード

この記事の例では、虫眼鏡効果を実現するためのjsの具体的なコードを参考までに共有しています。具体的な...

MySQL インストール プロンプト「詳細なヘルプについては NET HELPMSG 3534 と入力してください」の解決方法

今日、MySQL をインストールすると次のエラー メッセージが表示されます。 かなり長い時間ネットで...

さまざまなReact状態マネージャーの解釈と使用方法

まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...

Docker イメージ + nginx を使用して Vue プロジェクトをデプロイする方法

1. Vueプロジェクトのパッケージ化開発されたvueプロジェクトに次の名前を入力し、パッケージ化し...

NavicatがLinuxサーバー上のMySQLに接続できない問題を解決する

最初は悲しい気持ちになりました。スクリーンショットは以下の通りです。 少し苦労しましたが、解決策は次...

Docker の詳細なイラスト

1. Dockerの紹介1.1 仮想化1.1.1 仮想化とは何ですか?コンピュータにおける仮想化とは...

SQL と NoSQL の違いのまとめ

主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...

チェックボックスとラジオボタンの配置を実装する方法

ブラウザによって動作が異なるだけでなく、フォントやテキスト サイズによっても動作が異なります。フォー...

MySql 8.0.16 バージョンのインストールでは、「UTF8B3」ではなく「UTF8B4」が使用されるように求められます。

MySQL 8.0.16 にインストールする場合、「UTF8B3」ではなく「UTF8B4」が使用さ...

React-Dropzone をベースにアップロードコンポーネント機能を開発する (サンプルデモ)

今回はReact-Flaskフレームワーク上でアップロードコンポーネントを開発するスキルについてお話...