ドッカーノート(E):全体独自の画像

オリジナル住所: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.00 -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.410 </バージョン> 
            <構成> 
                <リポジトリ> $ {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(公共のドライ数字だけでなく歓迎注目されている技術、最新情報へのタイムリーなアクセス)
-------- ---------------------------------------------
マイクロチャンネル公衆数

おすすめ

転載: www.cnblogs.com/spec-dog/p/11204914.html