ホームページ  >  記事  >  運用・保守  >  dockerfileを使用してnginxイメージを構築する方法

dockerfileを使用してnginxイメージを構築する方法

WBOY
WBOY転載
2023-05-14 20:13:104154ブラウズ

dockerfile の概要

Docker は、dockerfile の内容を読み取ることで、イメージを自動的に構築できます。dockerfile は、必要なすべてのコマンドを含むテキスト ファイルです。ビルドプロセス中に実行されます。また、dockfile は docker プログラムによって解釈されるスクリプトであることも理解できます。dockfile は 1 つずつの命令で構成されています。各命令は Linux システム上のコマンドに対応します。docker プログラムは、これらの dockerfile 命令を実際の Linux コマンドに変換します。 Dockerfile には独自の記述形式とサポートされるコマンドがあり、docker プログラムは makefile と同様にこれらのコマンド間の依存関係を解決します。

Docker プログラムは dockerfile を読み取り、指示に従ってカスタマイズされたイメージを生成します。ブラックボックスのようなイメージと比較して、dockerfile のような明白なスクリプトは、イメージがどのように生成されるかを明確に示すため、ユーザーに受け入れられやすいです。 dockerfile を使用すると、独自の追加要件をカスタマイズする必要がある場合、dockerfile 上の命令を追加または変更してイメージを再生成するだけでよく、コマンドを入力する手間が省けます。

Docker によるイメージのビルド方法: commit、dockerfile

1. commit を使用してイメージをビルドします:

Commit は元のイメージに基づいてビルドされます。 image このメソッドを使用してイメージを構築する目的は、一部の構成情報と変更された情報をイメージに保存することです。画像のスナップショットに相当します。

2. dockerfile を使用してイメージを構築します。

Dockerfile は、迅速に構築するために必要な (カスタム) イメージです。

Dockerfile 命令:

From: 基本イメージを指定します (from は必須の命令であり、最初の命令である必要があります)。

run: コマンドラインコマンドを実行するために使用されます。基本形式:

シェル形式: run bash 環境でコマンドを入力するだけです. dockerfile は 127 レイヤーまで run を使用できます. したがって、run Once を使用するには、 ' \' 新しい行を改行し、「&&」を使用して次のコマンドを実行します。この形式は一般的に使用されます;

exec 形式: run , このメソッドは関数呼び出しの形式に似ています;

copy: ファイルをコピーします。基本的な形式:

形式 1: copy ...

形式 2: copy ["",. .. ..""]

add: より高度なコピーファイル。コピーに基づいていくつかの機能を追加します。圧縮パッケージがコピーされた場合は、直接解凍され、いいえ解凍するには run を使用する必要があります;

cmd: コンテナー起動コマンド。基本形式:

シェル形式: cmd

実行形式: cmd ["実行可能ファイル", "パラメータ 1", "パラメータ 2"...]

パラメータ リストの形式: cmd ["パラメータ 1", "パラメータ 2"...]、エントリポイント コマンドを指定した後、cmd を使用して特定のパラメータを指定します。

エントリポイント: エントリ ポイント。基本的な形式はexecとshellに分かれます

エントリポイントの目的はcmdと同じで、コンテナの起動プログラムとパラメータを指定することです。 Entrypoint は運用中に置き換えることができますが、cmd よりも面倒で、docker run のパラメーター --entrypoint で指定する必要があります。エントリポイントを指定すると、cmd の意味が変わり、コマンドを直接実行する代わりに、cmd の内容がパラメータとしてエントリポイント コマンドに渡されます。実行すると、 ""

env: 環境変数を設定します。 (ここで使用した変数を使用できます) 基本形式:

形式 1: env

形式 2: env = =...

arg: ビルドパラメータ。ビルド パラメーターの効果は、環境変数を設定するという env の効果と同じですが、arg によって構築された環境変数は、将来コンテナーが実行されるときには存在しないという点が異なります。基本形式:

形式 1: arg [=]

形式 2: このデフォルト値は、ビルド コマンド docker build で使用できます - - build-arg = to override

volume: 匿名ボリュームを定義します。基本形式:

形式 1: ボリューム ["", ""...]

形式 2: ボリューム

公開: ポートを公開します。 Expose ディレクティブは、ランタイム コンテナーによって提供されるポートを宣言します。コンテナーの起動時には、この宣言によりポートは開かれません。基本形式:

形式 1: を公開 [...]

Workdir: 作業ディレクトリを指定します。基本形式:

形式 1: workdir

ユーザー: 現在のユーザーを指定します。 user は、指定したユーザーに切り替えるのに役立ちます。基本的な形式:

形式 1: user

healthcheck: コンテナの状態が正常かどうかを判断するヘルスチェック。基本的な形式:

形式 1: healthcheck [オプション] cmd : コンテナの健全性をチェックするコマンドを設定します

形式 2: healthcheck none: 基本イメージにヘルス チェック コマンド。ヘルス チェックの指示をブロックするには、この形式を使用します。

Build nginx image:

ディレクトリを作成し、そのディレクトリに dockerfile を書き込みます:

[root@docker ~]# mkdir mynginx
[root@docker ~]# cd mynginx/
[root@docker mynginx]# pwd
/root/mynginx
[root@docker mynginx]#

nginx ソース コード パッケージを作成したディレクトリ (mynginx ディレクトリ) にダウンロードします:

[root@docker ~]# wget -p /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz

dockerfile を書き込みます:

[root@docker mynginx]# vi dockerfile

内容は次のとおりです:

from centos
run ping -c 1 www.baidu.com
run yum -y install gcc make pcre-devel zlib-devel tar zlib
add nginx-1.15.2.tar.gz /usr/src/
run cd /usr/src/nginx-1.15.2 \
  && mkdir /usr/local/nginx \
  && ./configure --prefix=/usr/local/nginx && make && make install \
  && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
  && nginx
run rm -rf /usr/src/nginx-1.15.2
expose 80

実行イメージをビルドする docker コマンド:

[root@docker mynginx]# docker build -t nginx:v3 .
sending build context to docker daemon 1.029mb
step 1/7 : from centos
 ---> 5182e96772bf
step 2/7 : run ping -c 1 www.baidu.com
 ---> using cache
 ---> 2f70f8abaf2a
step 3/7 : run yum -y install gcc make pcre-devel zlib-devel tar zlib
 ---> using cache
 ---> dbdda4b7ae6f
step 4/7 : add nginx-1.15.2.tar.gz /usr/src/
 ---> using cache
 ---> 18ace6285668
step 5/7 : run cd /usr/src/nginx-1.15.2   && mkdir /usr/local/nginx   && ./configure --prefix=/usr/local/nginx && make && make install   && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   && nginx
 ---> using cache
 ---> 99629488ede9
step 6/7 : run rm -rf /usr/src/nginx-1.15.2
 ---> using cache
 ---> 869fbad71879
step 7/7 : expose 80
 ---> using cache
 ---> 384bed72ea6f
successfully built 384bed72ea6f
successfully tagged nginx:v3

2 つが正常に出力された場合は、ビルドが成功したことを意味します。

カスタム イメージを開始します:

Docker イメージを使用してビルドされたイメージを表示します:

dockerfileを使用してnginxイメージを構築する方法

カスタム イメージを開始します:

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
container id    image        command       created       status       ports        names
ecaafe119044    nginx:v3      "/bin/bash"     3 seconds ago    up 2 seconds    0.0.0.0:80->80/tcp  nginx

注: 現時点では、コンテナをどのように起動しても、コンテナは終了した状態のままです。

さまざまな解決策を試した結果、問題がどこにあるのかがようやくわかりました。コンテナが起動すると、スレッドに対応するバックグラウンドで起動されることが分かりました。起動時にはすでに起動されていますが、コマンドを実行すると終了してバックグラウンドで実行されていないため、-dit パラメータを使用しますバックグラウンドで実行するだけです。

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
container id    image        command       created       status       ports        names
ecaafe119044    nginx:v3      "/bin/bash"     3 seconds ago    up 2 seconds    0.0.0.0:80->80/tcp  nginx

しかし...

このとき、別の問題が発生し、起動しているにもかかわらず、nginx Web ページのインターフェイスにアクセスできず、接続が拒否されました。 ! ! !

[root@docker ~]# curl 192.168.100.22
curl: (7) failed connect to 192.168.100.22:80; 拒绝连接
[root@docker ~]# elinks --dump 192.168.100.22
elinks: 拒绝连接

その後、Baidu、fq、Google に問い合わせた結果、ようやく問題が見つかりました。 exec を使用してコンテナに入り、nginx を起動するだけでよいことがわかりました。

ああああああ

以上がdockerfileを使用してnginxイメージを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。