Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラメータスクリプト! ビルド手順:
# contes を例に挙げて、dockerhub で contes の dockerfile を表示します。 ゼロから centos-7-x86_64-docker.tar.xz を追加します / ラベル \ org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS ベースイメージ" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20200809" \ org.opencontainers.image.title="CentOS ベースイメージ" \ org.opencontainers.image.vendor="CentOS" \ org.opencontainers.image.licenses="GPL-2.0のみ" \ org.opencontainers.image.created="2020-08-09 00:00:00+01:00" コマンド ["/bin/bash"] DockerFile ビルドプロセス 基本:
Dockerfile は開発向けです。将来的にプロジェクトを公開したりイメージを作成したりしたい場合は、Dockerfile ファイルを作成する必要があります。このファイルは非常にシンプルです。 Docker イメージは徐々にエンタープライズ配信の標準になりつつあります。 DockerFile: イメージをビルドし、すべてのステップとソース コードを定義します。 DockerImages: DockerFile をビルドして生成されたイメージ。このイメージが、最終的にリリースして実行する製品です。 Docker コンテナ: コンテナはサービスを提供するために実行されるイメージです。 DockerFileの手順 FROM # ベースイメージ MAINTAINER # イメージを作成した人は誰ですか? 名前 + メールアドレス RUN # イメージをビルドするときに実行するコマンド ADD # 手順 例: tomcat image---》tomcat の圧縮パッケージを入れます。コンテンツを追加しますWORKDIR # イメージの作業ディレクトリVOLUME # マウントされたディレクトリの場所EXPOST # ポート設定を公開しますCMD # このコンテナの起動時に実行するコマンドを指定します。最後のコマンドのみが有効になり、置き換えることができますENTRYPOINT # このコンテナの起動時に実行するコマンドを指定します。コマンドを追加できますONBUILD # 継承された DockerFile をビルドするときに、ONBUILD 命令が実行され、命令がトリガーされますCOPY # ADD と同様に、ファイルをイメージにコピーしますENV # ビルド時に環境変数を設定します フィールドテスト Docker Hubのイメージの99%は、ゼロから構築されたベースイメージに基づいており、構築に必要なソフトウェアと構成で構成されています。 独自の Centos を作成する # 1. CentosからDockerFileファイルを書き込む # 著者情報 MAINTAINER yinxiaodong<[email protected]> # 環境変数 ENV MYPATH /user/local を設定します # イメージの作業ディレクトリを指定する WORKDIR $MYPATH yum install -y vimを実行します。 yum install -y net-toolsを実行します。 # ポート 80 を公開 EXPOSE 80 CMD エコー $MYPATH CMD エコー "---------終了---------" コマンド /bin/bash # 2. ファイルを使用してイメージをビルドする# コマンド docker build -f dockerfile ファイル パス -t イメージ名: バージョン番号。 [root@localhost dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 。 ビルドコンテキストを Docker デーモンに送信しています 2.048kB ステップ 1/9: Centos から ---> 0d120b6ccaa8 ステップ 2/9: MAINTAINER yinxiaodong<[email protected]> ---> f79b12ffb083 で実行中 中間コンテナ f79b12ffb083 を削除しています ---> 8ee53d3f7a65 ステップ 3/9: ENV MYPATH /user/local ---> 659a2c96d5f7 で実行中 中間コンテナ 659a2c96d5f7 を削除しています ---> 59ab131ef44c ステップ 4/9: WORKDIR $MYPATH ---> 0b4b8f9c65bb で実行中 中間コンテナ 0b4b8f9c65bb を削除しています ---> 408b06671488 ステップ5/9: yum install -y net-toolsを実行します ---> 151f81148a87 で実行中 CentOS-8 - AppStream 118 kB/s | 5.8 MB 00:50 CentOS-8 - ベース 218 kB/s | 2.2 MB 00:10 CentOS-8 - 追加 1.8 kB/s | 7.3 kB 00:04 依存関係が解決されました。 ================================================================================ パッケージ アーキテクチャ バージョン リポジトリ サイズ ================================================================================ インストール中: net-tools x86_64 2.0-0.51.20160912git.el8 ベースOS 323 k 取引概要 ================================================================================ 1 パッケージをインストール 合計ダウンロードサイズ: 323 k 設置サイズ: 1.0M パッケージのダウンロード: net-tools-2.0-0.51.20160912git.el8.x86_64.rpm 219 kB/秒 | 323 kB 00:01 -------------------------------------------------------------------------------- 合計 66 kB/s | 323 kB 00:04 警告: /var/cache/dnf/BaseOS-f6a80ba95cf937f2/packages/net-tools-2.0-0.51.20160912git.el8.x86_64.rpm: ヘッダー V3 RSA/SHA256 署名、キー ID 8483c65d: NOKEY CentOS-8 - ベース 162 kB/s | 1.6 kB 00:00 GPG キー 0x8483C65D をインポートしています: ユーザー ID: 「CentOS (CentOS 公式署名キー) <[email protected]>」 指紋: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D 出典: /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial キーが正常にインポートされました トランザクションチェックを実行中 トランザクションチェックが成功しました。 トランザクションテストの実行 トランザクションテストが成功しました。 トランザクションの実行 準備中: 1/1 インストール中: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 実行中のスクリプトレット: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 検証中: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 インストール済み: ネットツール2.0-0.51.20160912git.el8.x86_64 完了! 中間コンテナ 151f81148a87 を削除しています ---> c0a0546c9b2a ステップ 6/9: EXPOSE 80 ---> 42000936515d で実行中 中間コンテナ42000936515dの取り外し ---> fe68114ecf3f ステップ 7/9: CMD echo $MYPATH ---> c393fc53a354 で実行中 中間コンテナ c393fc53a354 を削除しています ---> a6924276bf90 ステップ 8/9: CMD echo "---------end--------" ---> 5994de56f0a1 で実行中 中間コンテナ 5994de56f0a1 を削除しています ---> a8ba0ebb3770 ステップ 9/9 : CMD /bin/bash ---> d1fa2d436363 で実行中 中間コンテナ d1fa2d436363 を削除しています ---> 41bb76be4884 41bb76be4884 の構築に成功しました mycentos のタグ付けに成功しました:0.1 [root@localhost dockerfile]# docker イメージ リポジトリ タグ イメージ ID 作成 サイズ mycentos 0.1 41bb76be4884 7秒前 246MB centos 1.0 d840628c30a9 6 時間前 215MB centos 最新 0d120b6ccaa8 2日前 215MB # mycentos を起動し、ifconfig コマンドを使用して IP 情報を表示します [root@localhost dockerfile]# docker run -it mycentos:0.1 [root@494c2bc72263 ローカル]# ifconfig eth0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500 inet 172.17.0.3 ネットマスク 255.255.0.0 ブロードキャスト 172.17.255.255 ether 02:42:ac:11:00:03 txqueuelen 0 (イーサネット) RXパケット 6バイト 516 (516.0 B) RXエラー 0 ドロップ 0 オーバーラン 0 フレーム 0 TXパケット 0 バイト 0 (0.0 B) TXエラー 0 ドロップ 0 オーバーラン 0 キャリア 0 衝突 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 ネットマスク 255.0.0.0 ループ txqueuelen 1000 (ローカル ループバック) RXパケット 0 バイト 0 (0.0 B) RXエラー 0 ドロップ 0 オーバーラン 0 フレーム 0 TXパケット 0 バイト 0 (0.0 B) TXエラー 0 ドロップ 0 オーバーラン 0 キャリア 0 衝突 0 # dockerfile で指定したディレクトリとまったく同じ /user/local ディレクトリを確認します [root@494c2bc72263 local]# pwd /ユーザー/ローカル イメージのビルド履歴を表示する # コマンド docker history イメージ ID [root@localhost ~]# docker 履歴 41bb76be4884 画像作成者 サイズ コメント 41bb76be4884 16 分前 /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B a8ba0ebb3770 16 分前 /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B a6924276bf90 16 分前 /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B fe68114ecf3f 16 分前 /bin/sh -c #(nop) EXPOSE 80 0B c0a0546c9b2a 16 分前 /bin/sh -c yum install -y net-tools 31.3MB 408b06671488 17 分前 /bin/sh -c #(nop) WORKDIR /user/local 0B 59ab131ef44c 17 分前 /bin/sh -c #(nop) ENV MYPATH=/user/local 0B 8ee53d3f7a65 17 分前 /bin/sh -c #(nop) MAINTAINER yinxiaodong<m1… 0B 0d120b6ccaa8 2日前 /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <不足> 2 日前 /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <不足> 2 日前 /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB イメージを取得すると、それがどのように作成されたかを調べることができます---->docker history image id CMDとENTRYPOINTの違い CMD #このコンテナの起動時に実行するコマンドを指定します。最後のコマンドのみが有効になり、置き換えることができます。ENTRYPOINT #このコンテナの起動時に実行するコマンドを指定します。コマンドを追加できます。#CMD をテスト # DockerFile ファイルを書き込む [root@localhost dockerfile]# cat dockerfile-cmd-test Centosより コマンド ["ls","-a"] # DockerFile [root@localhost dockerfile] に基づいてイメージをビルドします。# docker build -f dockerfile-cmd-test -t testcmd:0.1 。 ビルドコンテキストを Docker デーモンに送信 3.072kB ステップ 1/2: Centos から ---> 0d120b6ccaa8 ステップ 2/2 : CMD ["ls","-a"] ---> b3f8ba72222b で実行中 中間コンテナ b3f8ba72222b を削除しています ---> 561e47f88730 561e47f88730 の構築に成功しました testcmd:0.1 のタグ付けに成功しました # ビルドに成功しました# イメージを表示 [root@localhost dockerfile]# docker イメージ リポジトリ タグ イメージ ID 作成 サイズ testcmd 0.1 561e47f88730 6秒前 215MB centos 最新 0d120b6ccaa8 2日前 215MB # イメージを起動し、ls -a コマンドが有効であることを確認します [root@localhost dockerfile]# docker run -it testcmd:0.1 . .dockerenv dev home lib64 media opt root sbin sys usr .. bin etc lib lost+found mnt proc run srv tmp var # 起動コマンドに -l を追加します。ls -a -l を期待しますが、エラーが報告されます。ここでは、ls -a が -l に置き換えられています。最後のコマンドは -l なので、エラーが報告されます。 [root@localhost dockerfile]# docker run -it 561e47f88730 -l docker: デーモンからのエラー応答: OCI ランタイムの作成に失敗しました: container_linux.go:349: コンテナ プロセスの開始により "exec: \"-l\" が発生しました: $PATH に実行可能ファイルが見つかりません: 不明。 # 起動コマンドを docker run -it testcmd:0.1 ls -al に置き換え、詳細情報を正常に出力します。 [root@localhost dockerfile]# docker run -it testcmd:0.1 ls -al 合計 0 drwxr-xr-x. 1 ルート ルート 6 8月 13 08:20 . drwxr-xr-x. 1 ルート ルート 6 8月 13 08:20 .. -rwxr-xr-x. 1 ルート ルート 0 8月13日 08:20 .dockerenv lrwxrwxrwx. 1 ルート ルート 7 5月 11 2019 bin -> usr/bin drwxr-xr-x. 5 ルート ルート 360 8月13日 08:20 dev drwxr-xr-x. 1 ルート ルート 66 8月13日 08:20 など drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 ホーム lrwxrwxrwx. 1 ルート ルート 7 2019年5月11日 lib -> usr/lib lrwxrwxrwx. 1 ルート ルート 9 2019年5月11日 lib64 -> usr/lib64 drwx------. 2 ルート ルート 6 8月 9 21:40 lost+found drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 メディア drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 mnt drwxr-xr-x. 2 ルート ルート 6 2019年5月11日 opt dr-xr-xr-x. 123 ルート ルート 0 8月13日 08:20 proc dr-xr-x---. 2 ルート ルート 162 8月 9日 21:40 ルート drwxr-xr-x. 11 ルート ルート 163 8月9日 21:40 実行 lrwxrwxrwx. 1 ルート ルート 8 2019年5月11日 sbin -> usr/sbin drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 srv dr-xr-xr-x. 13 ルート ルート 0 8月11日 09:58 sys drwxrwxrwt. 7 ルート ルート 145 8月 9日 21:40 tmp drwxr-xr-x. 12 ルート ルート 144 8月 9日 21:40 usr drwxr-xr-x. 20 ルート ルート 262 8月 9日 21:40 var # テスト 2: DockerFile の CMD を ENTRYPOINT に置き換えて再構築し、実行して結果を確認します [root@localhost dockerfile]# cat dockerfile-cmd-test Centosより エントリポイント ["ls","-a"] # イメージを再構築します [root@localhost dockerfile]# docker build -f dockerfile-cmd-test -t testcmd:0.2 。 ビルドコンテキストを Docker デーモンに送信 3.072kB ステップ 1/2: Centos から ---> 0d120b6ccaa8 ステップ 2/2: ENTRYPOINT ["ls","-a"] ---> c634ca09fabe で実行中 中間コンテナの削除 c634ca09fabe ---> 52d295395f08 52d295395f08 の構築に成功しました testcmd:0.2 のタグ付けに成功しました # イメージを表示 [root@localhost dockerfile]# docker images リポジトリ タグ イメージ ID 作成 サイズ testcmd 0.2 52d295395f08 7秒前 215MB testcmd 0.1 561e47f88730 12分前 215MB centos 最新 0d120b6ccaa8 2日前 215MB # testcmd:0.2 image を実行し、-l を追加すると、詳細情報が印刷されます。 [root@localhost dockerfile]# docker run -it testcmd:0.2 -l 合計 0 drwxr-xr-x. 1 ルート ルート 6 8月 13 08:17 . drwxr-xr-x. 1 ルート ルート 6 8月 13 08:17 .. -rwxr-xr-x. 1 ルート ルート 0 8月13日 08:17 .dockerenv lrwxrwxrwx. 1 ルート ルート 7 5月 11 2019 bin -> usr/bin drwxr-xr-x. 5 ルート ルート 360 8月13日 08:17 dev drwxr-xr-x. 1 ルート ルート 66 8月 13 08:17 など drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 ホーム lrwxrwxrwx. 1 ルート ルート 7 2019年5月11日 lib -> usr/lib lrwxrwxrwx. 1 ルート ルート 9 2019年5月11日 lib64 -> usr/lib64 drwx------. 2 ルート ルート 6 8月 9 21:40 lost+found drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 メディア drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 mnt drwxr-xr-x. 2 ルート ルート 6 2019年5月11日 opt dr-xr-xr-x. 121 ルート ルート 0 8月13日 08:17 proc dr-xr-x---. 2 ルート ルート 162 8月 9日 21:40 ルート drwxr-xr-x. 11 ルート ルート 163 8月9日 21:40 実行 lrwxrwxrwx. 1 ルート ルート 8 2019年5月11日 sbin -> usr/sbin drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 srv dr-xr-xr-x. 13 ルート ルート 0 8月11日 09:58 sys drwxrwxrwt. 7 ルート ルート 145 8月 9日 21:40 tmp drwxr-xr-x. 12 ルート ルート 144 8月 9日 21:40 usr drwxr-xr-x. 20 ルート ルート 262 8月 9日 21:40 var DockerFile の多くのコマンドは非常に似ています。それらの違いを理解する必要があります。学習する最良の方法は、それらを比較してテストし、結果を確認することです。 実戦:トムキャットイメージ 1. イメージファイル tomcat 圧縮パッケージ jdk 圧縮パッケージを準備する
2. Dockerfile ファイル (正式名称は Dockerfile) を記述します。ビルド時にこのファイルが自動的に検出されるため、-f 指定は必要ありません。 # centosから基本をインポートする # 著者情報 MAINTAINER yinxiaodoong<[email protected]> # ファイル read.txt をコンテナの /usr/local/read.txt ディレクトリにコピーします。 COPY read.txt /usr/local/read.txt # jdk tomcat を追加 ---> 自動的に解凍 ADD jdk-8u211-linux-x64.tar.gz /usr/local/ apache-tomcat-8.5.43.tar.gz /usr/local/ を追加します。 # vimコマンドをインストールします RUN yum install -y vim #MYPATH を設定する ENV MYPATH /usr/local/ #コンテナに入るためのデフォルトパスを指定します /user/local/ ワークディレクトリ $MYPATH # jdk環境変数ENV JAVA_HOME /usr/local/jdk1.8.0_211を設定します ENV クラスパス $JAVA_HOME/lib/dt.jat:$JAVA_HOME/lib/tools.jar # tomcat環境変数ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.43を設定します 環境変数 CATALINA_BASH /usr/local/apache-tomcat-8.5.43 環境変数 PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin # ポート 8080 を公開 EXPOSE 8080 # /usr/local/tomcat/webapps# # コンテナを起動するときにTomcatを起動する コマンド /usr/local/apache-tomcat-8.5.43/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.43/logs/catalina.out # tomcatイメージをビルドする [root@localhost tomcat]# docker build -t mytomcat [root@localhost tomcat]# docker イメージ リポジトリ タグ イメージ ID 作成 サイズ mytomcat 最新 a9707559afa1 8秒前 693MB centos 最新 0d120b6ccaa8 4日前 215MB [root@localhost tomcat]# docker run -d -p 8081:8080 --name mytomcat--01 -v /home/yinxiaodong/build/tomcat/test:/usr/local/apache-tomcat-8.5.43/webapps/test -v /home/yinxiaodong/build/tomcat/logs:/usr/local/apache-tomcat-8.5.43/logs mytomcat 自分の画像を公開する DockerHubに公開 アドレス: https://hub.docker.com/ 自分のアカウントを登録する アカウントにログインできることを確認してください 弊社のサーバーに送信 [root@localhost ログ]# docker ログイン --help 使用方法: docker login [OPTIONS] [SERVER] Docker レジストリにログインします。 サーバーが指定されていない場合は、デフォルトはデーモンによって定義されます。 オプション: -p, --password 文字列 パスワード --password-stdin stdinからパスワードを取得します -u, --username 文字列 ユーザー名 [root@localhost ログ]# [root@localhost ログ]# docker ログイン -u xxx -p xxx 警告! CLI 経由で --password を使用することは安全ではありません。--password-stdin を使用してください。 警告! パスワードは暗号化されずに /root/.docker/config.json に保存されます。 この警告を削除するには、資格情報ヘルパーを構成します。 https://docs.docker.com/engine/reference/commandline/login/#credentials-store ログインに成功しました ログイン後、画像を送信できます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL の自動増分 ID (主キー) が不足した場合の解決策
>>: ネイティブjsはショッピングカートのロジックと機能を実装します
OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...
まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...
1. 問題MySQL の初期化時に発生する問題は、次のとおりです。 1. 「MSVCR120.dll...
デフォルトでは、MyISAM テーブルはディスク上に .frm (テーブル構造ファイル)、.MYD ...
コードをコピーコードは次のとおりです。 <form action="/hehe&qu...
1. 新しいユーザーを追加するローカルIPアクセスのみを許可する '123456' ...
この記事では、MySQL 5.7.18アーカイブ圧縮版をインストールする具体的な方法を参考までに紹介...
主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...
まず、ハードディスクデバイスにデータディスクがあるかどうかを確認します # まずfdisk -lを実...
この記事では、参考までに、加算計算機を実装するためのJavaScriptの具体的なコードを紹介します...
Web プロジェクトの開発プロセスでは、CSS ファイルや JS ファイルを参照することがよくあり...
ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...
1. 依存関係をダウンロードするnpm インストール @antv/データセットnpm インストール ...
目次1. プロジェクトの見通し2. 知識ポイントObject.assign() の使用法filter...
目次序文配列.isArrayコンストラクタインスタンスプロトタイプオブジェクト.プロトタイプ.toS...