Dockerfile の紹介 Docker は、Dockerfile の内容を読み取ってイメージを自動的にビルドできます。Dockerfile は、ビルド プロセス中に実行する必要があるすべてのコマンドを含むテキスト ファイルです。 Dockerfile は Docker プログラムによって解釈されるスクリプトであり、1 つ 1 つの命令から構成されているとも言えます。各命令は Linux システムのコマンドに対応しています。Docker プログラムはこれらの Dockerfile 命令を実際の Linux コマンドに変換します。 Dockerfile には独自の記述形式とサポートされているコマンドがあります。Docker プログラムは Makefile と同様に、これらのコマンド間の依存関係を解決します。 Docker プログラムは Dockerfile を読み取り、指示に従ってカスタマイズされたイメージを生成します。イメージのようなブラックボックスと比較すると、Dockerfile のようなわかりやすいスクリプトは、イメージがどのように生成されるかを明確に示しているため、ユーザーに受け入れられやすくなります。 Dockerfile を使用すると、独自の追加要件をカスタマイズする必要がある場合、Dockerfile に指示を追加または変更してイメージを再生成するだけで済み、コマンドを入力する手間が省けます。 Docker イメージの構築方法: commit、dockerfile 1. commit を使用してイメージをビルドします。 コミットは、元のイメージに基づいて構築されたイメージです。この方法を使用してイメージを構築する目的は、イメージ内にいくつかの構成情報と変更された情報を保存することです。これはミラーのスナップショットに相当します。 2. dockerfile を使用してイメージをビルドします。 Dockerfile は、必要な (カスタム) イメージをすばやく構築するために使用されます。 Dockerfile の説明: FROM: ベース イメージを指定します (FROM は必須の命令であり、最初の命令である必要があります)。 RUN: コマンドラインコマンドを実行するために使用されます。基本的な形式: シェルの形式は、RUN <コマンド> です。bash 環境でコマンドを入力するだけです。Dockerfile では、最大 127 レイヤーまで RUN を使用できます。したがって、RUN を 1 回使用し、'\' を使用して行を折り返し、'&&' を使用して次のコマンドを実行します。一般的にはこの形式が使用されます。 exec 形式: RUN <"実行ファイル", "パラメータ 1", "パラメータ 2">、このメソッドは関数呼び出しの形式に似ています。 コピー: ファイルをコピーします。 基本的な形式: 形式 1: COPY <ソース パス>...<宛先パス> 形式 2: COPY [“<ソース パス 1>”,….”<宛先パス>”] ADD: より高度なファイルコピー機能。COPY をベースにいくつかの機能を追加します。コピーされたファイルが圧縮ファイルの場合、RUN を使用して解凍せずに直接解凍されます。 CMD: コンテナの起動コマンド。基本的な形式: シェル形式: CMD <コマンド> exec 形式: CMD ["実行可能ファイル", "パラメータ 1", "パラメータ 2"...] パラメータリストの形式は、CMD ["パラメータ1", "パラメータ2"...] です。ENTRYPOINT命令を指定した後、CMDを使用して特定のパラメータを指定します。 ENTRYPOINT: エントリポイント。基本的な形式は exec と shell に分かれています。 ENTRYPOINT の目的は CMD と同じで、コンテナの起動プログラムとパラメータを指定することです。 ENTRYPOINT は動作中に置き換えることができますが、CMD よりも面倒で、docker run の --entrypoint パラメータで指定する必要があります。 ENTRYPOINT が指定されると、CMD の意味が変わります。コマンドを直接実行するのではなく、CMD の内容が ENTRYPOINT 命令にパラメータとして渡されます。実行すると、次のようになります: <ENTRYPOINT> "<CMD>" ENV: 環境変数を設定します。 (ここで使用されている変数を使用できます) 基本的な形式は次のとおりです。 フォーマット 1: ENV <キー> <値> 形式 2: ENV <key1>=<value1> <key2>=<value>... ARG: ビルドパラメータ。ビルドパラメータの効果は ENV と同じで、どちらも環境変数を設定します。違いは、ARG によってビルドされた環境変数は、コンテナが将来実行されるときには存在しないことです。基本的な形式: 形式 1: ARG <パラメータ名> [=<デフォルト値>] 形式 2: このデフォルト値は、ビルド コマンド docker build で --build-arg <パラメータ名>=<値> を使用して上書きできます。 VOLUME: 匿名ボリュームを定義します。 基本的な形式: 形式 1: VOLUME ["<path1>", "<path2>"...] 形式 2: VOLUME <パス> EXPOSE: ポートを公開します。 EXPOSE 命令は、ランタイム コンテナによって提供されるポートを宣言します。コンテナの起動時に、この宣言によりポートは開かれません。 基本的な形式: 形式 1: EXPOSE <port1> [<port2>...] WORKDIR: 作業ディレクトリを指定します。基本的な形式: 形式 1: WORKDIR <作業ディレクトリのパス> USER: 現在のユーザーを指定します。 USER は、指定されたユーザーに切り替えるのに役立ちます。 基本的な形式: 形式 1: USER <ユーザー名> HEALTCHECK: コンテナの状態が正常かどうかを判断するためのヘルスチェック。 基本的な形式: フォーマット1: HEALTCHECK [オプション] CMD <コマンド> : コンテナの健全性をチェックするコマンドを設定します 形式 2: HEALTCHECK NONE: ベース イメージにヘルス チェックの指示がある場合は、この形式を使用してヘルス チェックの指示をブロックします。 nginx イメージをビルドします。 ディレクトリを作成し、その中に Dockerfile を書き込みます。 [root@docker ~]# mkdir mynginx [root@docker ~]# cd mynginx/ [root@docker mynginx]# pwd /root/mynginx [ルート@docker mynginx]# 作成したディレクトリ (mynginx ディレクトリ) に nginx ソース パッケージをダウンロードします。 [root@docker ~]# wget -P /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz Dockerfile を記述します。 [root@docker mynginx]# vi Dockerfile その内容は次のとおりです。 Centosより ping -c 1 www.baidu.com を実行します。 実行 yum -y install gcc make pcre-devel zlib-devel tar zlib nginx-1.15.2.tar.gz /usr/src/ を追加します。 実行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 rm -rf /usr/src/nginx-1.15.2 を実行します。 エクスポーズ80 docker コマンドを実行してイメージをビルドします。 [root@docker mynginx]# docker build -t nginx:v3 . ビルド コンテキストを Docker デーモンに送信 1.029MB ステップ 1/7: Centos から ---> 5182e96772bf ステップ 2/7: ping -c 1 www.baidu.com を実行します。 ---> キャッシュの使用 ---> 2f70f8abaf2a ステップ 3/7: yum -y install gcc make pcre-devel zlib-devel tar zlib を実行します。 ---> キャッシュの使用 ---> dbdda4b7ae6f ステップ 4/7: nginx-1.15.2.tar.gz /usr/src/ を追加します。 ---> キャッシュの使用 ---> 18ace6285668 ステップ 5/7: 実行 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 ---> キャッシュの使用 ---> 99629488ede9 ステップ 6/7: rm -rf /usr/src/nginx-1.15.2 を実行します。 ---> キャッシュの使用 ---> 869fbad71879 ステップ 7/7: EXPOSE 80 ---> キャッシュの使用 ---> 384ベッド72ea6f 384bed72ea6f の構築に成功しました nginx:v3 のタグ付けに成功しました 「Successfully」が 2 つ出力された場合、ビルドは成功です。 カスタムイメージを起動します。 ビルドされたイメージを表示するには、docker イメージを使用します。 カスタムイメージを起動します。 [root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3 ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858 [root@docker ~]# docker ps -a コンテナID イメージ コマンド 作成ステータス ポート名 ecaafe119044 nginx:v3 "/bin/bash" 3 秒前 2 秒前にアップ 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 コンテナID イメージ コマンド 作成ステータス ポート名 ecaafe119044 nginx:v3 "/bin/bash" 3 秒前 2 秒前にアップ 0.0.0.0:80->80/tcp nginx しかし....... このとき、別の問題が発生しました。立ち上がっているのに、nginx の Web ページ インターフェースにアクセスできず、接続が拒否されたと表示されました。 ! ! ! [root@docker ~]# カール 192.168.100.22 curl: (7) 192.168.100.22:80 への接続に失敗しました。接続が拒否されました [root@docker ~]# elinks --dump 192.168.100.22 ELinks: 接続が拒否されました その後、Baiduに問い合わせ、FQで検索し、Googleで調べた結果、ようやく問題が見つかりました。コンテナに入り、nginx を起動するには、exec を使用するだけでよいことがわかりました。 [root@docker ~]# docker exec -it nginx bash [root@ecaafe119044 /]# nginx [root@ecaafe119044 /]# 終了 出口 [root@docker ~]# カール 192.168.100.22 <!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> それで! nginx イメージの購入に成功しました! ! ! ! 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 要素 el-table テーブルの二次カプセル化 (テーブルの高さの調整付き)
>>: MySQL 5.7.13 ソースコードのコンパイル、インストール、および構成方法のグラフィックチュートリアル
目次アポロ コンフィギュレーション センターとは何ですか?アポロの特徴クライアントアーキテクチャアー...
目次概要Big O 表記法とは何ですか?オー(1)の上) (n^2) O(logn) ですの上!)結...
1. nginxシェルスクリプトを保存するフォルダを作成する /usr/local/タスク/ngin...
luaをインストールする http://luajit.org/download/LuaJIT-2.0...
エンジン導入InnodbエンジンInnodb エンジンは、データベース ACID トランザクションを...
目次序文SSHとは何かssh は何に使用されますか? sshの使い方ssh 再修正要約する序文ssh...
問題の説明Ele.me UI のフレームワークでは、入力データは el-form であり、出力データ...
目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...
目次1. はじめに2. インターフェース3. 簡単な例4. 結論1. はじめにMDN の公式 Web...
MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...
今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...
Webページを作るときに、区切り線hrを使うことがありますが、IE6やIE7で表示するのは非常に苦痛...
目次序文変換関係具体的な実装file2DataUrl(ファイル、コールバック) file2Image...
障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...
前回の記事では、docker サービスをインストールしました。引き続き、Web プロジェクトのデプロ...