オリジナル住所:http://blog.jboost.cn/2019/07/17/docerk-5.html
公式ドッカーハブとして、1が倉庫から入手ミラーリングされたミラーを取得するには、2つの方法は、第二は、カスタムで、あります。すでにミラーリングされたストレージからミラーを取得する方法について説明しますと、Springbootは、基本的な流れのカスタムミラーを導入するプロジェクトに基づいています。
1.カスタムミラー自然
私たちは、ミラーがストレージを階層化していることを知って、建物のミラーリングは、層ごとに行われ、完成した建物の層が、それは読み取り専用になり、その後、次の層をその上に構築します。したがって、カスタマイズされたイメージは、実際に、そのようなように、環境変数を設定露出ポートを宣言するためのコマンドを実行するように、物事を乾燥させるために、各層の定義です。そして、最終的にこれらの層を備えたミラーを形成し、層のビルドによって定義層、層によって、構築するとき。
2. Dockerfileファイル
ドッカー定義された層は、命令のセクション、一つの画像に対応する各命令を含むテキストファイルがあるDockerfileと呼ばれるファイルを、やってみたかった、この層の上に、命令の内容がどのように構造を説明しています。非常に単純なDockerfileの例で、
nginxのFROM RUN エコー ' <H1>こんにちはjboost!</ H1> ' > /usr/share/nginx/html/index.html
私たちは、画像をカスタマイズし、彼らは一例として、必要のある層に基づいて構築され、特定の画像に基づいていなければならない、我々はnginxのベースのミラーリングされ、その後、第2層に、当社独自のコンテンツをカスタマイズする-インデックスを変更します。 HTMLコンテンツがある<h1>Hello jboost!</h1>
ので、あなたは、ページのコンテンツnginxのホームを開いたとき、デフォルトのコンテナを実行すると、表示されません。
2つの命令の上記の例を接触Dockerfile
- FROM:命令から基本画像を指定し、各ミラーはカスタムベースイメージを持っている必要があり、それは命令から持っている必要がありますし、最初の命令はDockerfileです
- RUN:RUNコマンドを実行するコマンドを指定し、コマンドに続いて、同じ実行可能なシェルスクリプトのようなものです
Dockerfileは、他の命令の数を提供し、我々はフォローアップ報告書に焦点を当てます、我々は命令だけの簡単な説明は、と接触ありません。
3.ミラーをカスタマイズします
プロジェクトベースSpringbootへのこの部分は、関連するカスタムイメージの基本的な側面を紹介しています。プロジェクト住所:https://github.com/ronwxy/swagger-register 、プロジェクトが闊歩のAPIドキュメント登録サービスで、他の項目は、サービス、統一されたビューおよび管理に闊歩API情報を登録することができます。
3.1定義Dockerfileファイル
まず、読み込みプロジェクトのルートディレクトリに(ファイル名がDockerfile呼ばれる)Dockerfileファイルを作成します。
OpenJDKのFROM:8 -jdk- 高山 ENVのPROFILE = のdevの RUNのMKDIR /アプリ/ ログ COPY。/ターゲット/威張っ-レジスタ- 1.0。0 -SNAPSHOT.jar /アプリ/ app.jar WORKDIR / アプリ VOLUME /レジスタ- データは、 EXPOSE 11090 CMD [ " ジャワ"、" -Dspring.profiles.active = $ {PROFILE} "、" -jar "、" app.jarを" ]
上から下に、以下に説明されています
- 最初の行:FORMのOpenJDKの:8-jdk-高山、 で表され
openjdk:8-jdk-alpine
、これは我々がイメージをカスタマイズしたときにSpringbootプロジェクトは、サポートJDKを持っている必要がありますので、あなたは基本イメージとして最も適した画像を見つけることができる、基本イメージとして、このイメージ。 - 2行目:ENVのPROFILE = DEVは、変数の環境を定義して、環境変数は、後で参照することができます
- 第三行:RUNます。mkdir /アプリ/ログには、ファイルを保存し、瓶のログを実行するには、mkdirコマンドを使用して2つのディレクトリを作成します
- 4行目:/ appディレクトリにパッケージディレクトリの下にCOPY ./target/swagger-register-1.0.0-SNAPSHOT.jar /app/app.jarコピー先ジャー、名前を変更し、
- 5行目:WORKDIR /アプリ、作業ディレクトリを指定するには/アプリで、現在のディレクトリの背後にある層は、指定された作業ディレクトリであります
- 6行目:私はあなたが実行したときに、これはコンテナによって定義することができ-vを容器に直接書いていないが、代わりにマウントされたボリュームのカタログデータを書き込むために前に言ったようにVOLUME /登録データは、匿名のデータ量を定義しますカバーします。
- 7行目:、11090を露出させた容器を実行している間、ポートが提供するサービスを宣言し、それだけで、単にポートをマッピングするために使用される人々に伝えるだけの文で、ポートは-pでマッピングすることができます。
- 8行目:CMD [ "ジャワ"、 "-Dspring.profiles.active = $ {} PROFILE"、 "-jar"、 "app.jar"]、それはSpringbootプロジェクトですので、コンテナを起動するコマンドを指定し、そのので、コマンドの実行ます。java -jarここSpringbootサービスを実行するコマンドの実行が二行目は、環境変数のプロファイルを定義する引用されたときに、容器がスタートします
3.2 Mavenプラグインの設定
良いDockerfileの定義の後、便宜構築ミラーのために、我々はMavenのdockerfileプラグを使用することができるdockerfile-maven-plugin
、のpom.xmlのビルドの下に配置された部分を添加しました
<ビルド> <プラグイン> <プラグイン> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>春・ブートのmaven-pluginの</たartifactId> </プラグイン> < -ドッカーのMavenプラグイン- !> <プラグイン> <groupIdを> com.spotify </ groupIdを> <たartifactId> dockerfile-のmaven-pluginの</たartifactId> <バージョン> 1.4。10 </バージョン> <構成> <リポジトリ> $ {docker.image.prefix} / $ {project.artifactId} </リポジトリ> <BUILDARGS> </プラグイン> <! -ドッカーのMavenプラグイン- > </プラグイン> </構築>
リポジトリは、ミラーの名前を指定し、docker.image.prefix
プロパティセクションを定義する必要がある、私はここにいますspringboot
。
鏡の3.3建設
ダウンロード出典:https://github.com/ronwxy/swagger-register.git 、その後、プロジェクトのルートディレクトリで次のコマンド(MavenとJDKでローカルにインストールされていることを提供ドッカ)を実行
MVNきれいなパッケージ-Dmaven.test.skip = 真 dockerfile:構築
このコマンドは、最初に実行されmvn clean package -Dmaven.test.skip=true
、図3に示すように、現在のディレクトリに./target/swagger-register-1.0.0-SNAPSHOT.jarファイルを生成し、パッケージ化項目を、次いでDockerfileファイル上に構築されました。
図から分かるように、8つの段階(8行Dockerfile命令に対応する)で構築ミラーは、各画像層を生成するステップは、それぞれの層は、固有のIDを有しています。また、図からわかるように、このようなコピーとしてコマンドに加えて、それぞれの層は、実際に容器ベース層を開始するために構築し、次いで層によって規定される動作を行い、達成することが、コンテナを削除されます第8のステップとして、
Step 8/8 : CMD ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "app.jar"] [INFO] [INFO] ---> Running in f4acd0b53bca [INFO] Removing intermediate container f4acd0b53bca [INFO] ---> a9ee579f2d62
先启动一个ID为f4acd0b53bca的容器,在其中执行CMD所定义的命令,然后再移除容器f4acd0b53bca,最后生成ID为a9ee579f2d62的镜像。
构建完后,我们就可以在本地镜像中通过docker iamges
看到我们定制的镜像了,如图
图中springboot/swagger-register镜像即为我们刚刚构建好的定制镜像。
3.4 启动容器
我们可以通过以下命令来启动一个刚才定制镜像的容器
docker run -d --name swagger-register -p 11090:11090 -v /home/jenkins/swagger-register/register-data:/register-data -v /home/jenkins/swagger-register/logs:/logs --restart=always springboot/swagger-register:latest
其中:
- -d 表示以后台进程方式运行
- –name 指定容器名称
- -p 指定端口映射,左边为宿主机端口,右边为容器服务端口
- -v 指定数据卷挂载,左边为宿主机目录,右边为容器目录
- –restart=always 表示在docker启动时自动启动该容器
关于容器相关的内容后面详细介绍,这里不展开说明了。启动容器后, 我们就可以浏览器打开地址 http://宿主机ip:11090/doc.html 来访问服务了(打开页面后内容是空的,因为没有任何服务注册Swagger API, 相关内容可参考 swagger api文档集中化注册管理)
4. 总结
この記事では、ドッカーイメージのカスタマイズについて説明し、プロジェクトベースSpringbootを使用し、右、およびDockerfile基本命令とコンテナ構築プロセスがミラーリング実行の基本的な紹介をしました。その他の命令はDockerfileに従いますとベストプラクティスをより詳しく、歓迎の注意もDockerfile。
私の個人的なブログのアドレス:http://blog.jboost.cn
私のマイクロチャネル公共数:jboost-ksxy(公共のドライ数字だけでなく歓迎注目されている技術、最新情報へのタイムリーなアクセス)
-------- ---------------------------------------------