Dockerfile を使用して Java ランタイム環境のミラーを作成する方法

Dockerfile を使用して Java ランタイム環境のミラーを作成する方法

現在の環境は次のとおりです。

  • セントロス7.5
  • docker-ce 18.06.1-ce

1. まずcentos7.5.1804の基本イメージを使用して、動作に必要な環境をインストールします。

/appディレクトリに対応するファイルディレクトリを作成します

[root@node2 /app/]# mkdir dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv
[root@node2 /app]# cd dockerfile/system/centos/
[root@node2 /app/dockerfile/system/centos]# mkdir centos-7.5-base
[root@node2 /app/dockerfile/system/centos]# cd centos-7.5-base

Dockerfileを作成する

[root@node2 /app/dockerfile/system/centos/centos-7.5-base]#vim Dockerファイル 
#Nginx ベースイメージ
Centos:7.5.1804 より

ラベルは「mr.luo <[email protected]>」です

実行 yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop

dockerビルドスクリプトを作成し、直接実行する

[root@node2 /app/dockerfile/system/centos/centos-7.5-base]#vim ビルドコマンド.sh 
#!/bin/bash
ビルド 172.20.7.50/baseimages/centos-base:7.5.1804 を実行します。

スクリプトを実行して新しいイメージを作成します

[root@node2 /app/dockerfile/system/centos/centos-7.5-base]#bash ビルドコマンド.sh 
ビルドコンテキストを Docker デーモンに送信 3.072kB
ステップ 1/3: Centos:7.5.1804 から
---> 76d6bc25b8a5
ステップ 2/3: ラベル maintaier '[email protected]'
---> キャッシュの使用
---> 05ccd970d71d
ステップ 3/3: yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop を実行します。
---> キャッシュの使用
---> 73d683a54877
73d683a54877 が正常に構築されました
172.20.7.50/baseimages/centos-base:7.5.1804 のタグ付けに成功しました

2. 準備した基本環境イメージを使用してjdkイメージを作成する

centos-7.5-base を終了し、現在のディレクトリに jdk1.8 ディレクトリを作成します。

[root@node2 /app/dockerfile/system/centos/centos-7.5-base]# cd ..
[root@node2 /app/dockerfile/system/centos]# mkdir jdk1.8
[root@node2 /app/dockerfile/system/centos]# cd jdk1.8/

Dockerfileを作成する

[root@node2 /app/dockerfile/system/centos/jdk1.8]#vim Dockerファイル 
172.20.7.50/baseimages/centos-base:7.5.1804 から
LABEL 管理者 "mr.luo <[email protected]>"

jdk-8u162-linux-x64.tar.gz /usr/local/src/ を追加します。
実行 ln -s /usr/local/src/jdk1.8.0_162/ /usr/local/jdk

プロファイル /etc/profile を追加する

環境変数 JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
環境変数クラスパス $JAVA_HOME/lib/:$JRE_HOME/lib/
環境変数 PATH $PATH:$JAVA_HOME/bin

実行 rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

jdk パッケージを現在のディレクトリにアップロードします。

/etc/profileファイルを現在のディレクトリにコピーします

[root@node2 /app/dockerfile/system/centos/jdk1.8]#cp プロファイル /etc/profile

プロファイルの最後にJDK環境変数を追加します

[root@node2 /app/dockerfile/system/centos/jdk1.8]#vim プロファイル 
JAVA_HOME=/usr/local/jdk をエクスポートします。
TOMCAT_HOME=/apps/tomcat をエクスポートします。
エクスポート PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
エクスポート CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

docker build用のシェルスクリプトを作成する

[root@node2 /app/dockerfile/system/centos/jdk1.8]#vim ビルドコマンド.sh 
#!/bin/bash
#
ビルド 172.20.7.50/baseimages/centos7.5-jdk:8.162 を実行します。

画像の作成を開始する

[root@node2 /app/dockerfile/system/centos/jdk1.8]#bash ビルドコマンド.sh 
  ビルド コンテキストを Docker デーモンに送信 189.8 MB
  ステップ 1/10: 172.20.7.50/baseimages/centos-base:7.5.1804 から
   ---> 73d683a54877
  ステップ 2/10: LABEL メンテナー "mr.luo <[email protected]>"
   ---> 65604dd1f392 で実行中
  中間コンテナ 65604dd1f392 を削除しています
   ---> c4720603ce38
  ステップ 3/10: jdk-8u162-linux-x64.tar.gz /usr/local/src/ を追加します。
   ---> bc98adffe1b4
  ステップ 4/10: RUN ln -s /usr/local/src/jdk1.8.0_162/ /usr/local/jdk
   ---> df5a6f67f9fd で実行中
  中間コンテナ df5a6f67f9fd を削除しています
   ---> 0ae1af0416c6
  ステップ 5/10: プロファイル /etc/profile を追加する
   ---> eee23a69c0c8
  ステップ 6/10: ENV JAVA_HOME /usr/local/jdk
   ---> edbef8563e83 で実行中
  中間コンテナ edbef8563e83 を削除しています
   ---> 5f783f642054
  ステップ 7/10: ENV JRE_HOME $JAVA_HOME/jre
   ---> fa0e5f08e732 で実行中
  中間コンテナ fa0e5f08e732 を削除しています
   ---> 28a4d31463d4
  ステップ 8/10: ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
   ---> 3c4ebb04ac62 で実行中
  中間コンテナ 3c4ebb04ac62 を削除しています
   ---> 245f2dd82d52
  ステップ 9/10: ENV PATH $PATH:$JAVA_HOME/bin
   ---> 4f5e6093f0a9 で実行中
  中間コンテナ 4f5e6093f0a9 を削除しています
   ---> 5be0e6261eea
  ステップ 10/10: rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone を実行します。
   ---> 52d8cb8463a8 で実行中
  中間コンテナ 52d8cb8463a8 を削除しています
   ---> 9fb867ae8c39
  9fb867ae8c39 の構築に成功しました
  172.20.7.50/baseimages/centos7.5-jdk:8.162 のタグ付けに成功しました

現在のディレクトリ内のファイルを表示する

[root@node2 /app/dockerfile/system/centos/jdk1.8]#ls
build-command.sh Dockerfile jdk-8u162-linux-x64.tar.gz プロファイル

用意した画像が正常に使用できるか確認する

[root@node2 /app/dockerfile/system/centos/jdk1.8]#docker run -it --rm 172.20.7.50/baseimages/centos7.5-jdk:8.162 bash
[root@919844b164dc /]# java -バージョン 
Javaバージョン「1.8.0_162」
Java(TM) SE ランタイム環境 (ビルド 1.8.0_162-b12)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 25.162-b12、混合モード)
[root@919844b164dc /]# 日付
2018年11月22日木曜日 21:17:49 CST
[root@919844b164dc /]# 終了
出口

3. Tomcatイメージを作成する

以前に構築した/app/dockerfile/web/tomcatを入力し、tomcat-baseディレクトリを作成します。

[root@node2 ~]# cd /app/dockerfile/web/tomcat 
[root@node2 /app/dockerfile/web/tomcat]#mkdir tomcat-base

Dockerfileを作成する

[root@node2 /app/dockerfile/web/tomcat/tomcat-base]#vim Dockerfile 
172.20.7.50/baseimages/centos7.5-jdk:8.162 から

LABEL 管理者 "mr.luo <[email protected]>"

mkdir /appsを実行します
apache-tomcat-8.5.33.tar.gz /appsを追加します
実行 ln -s /apps/apache-tomcat-8.5.33 /apps/tomcat

Dockerビルドスクリプトを作成する

[root@node2 /app/dockerfile/web/tomcat/tomcat-base]#vim build-command.sh 
#!/bin/bash

ビルド 172.20.7.50/baseimages/centos-tomcat:8.5.33 を実行します。

実行してイメージファイルを作成します:

[root@node2 /app/dockerfile/web/tomcat/tomcat-base]#bash build-command.sh 
  ビルド コンテキストを Docker デーモンに送信 9.625MB
  ステップ 1/5: 172.20.7.50/baseimages/centos7.5-jdk:8.162 から
   ---> 9fb867ae8c39
  ステップ 2/5: LABEL メンテナー「mr.luo <[email protected]>」
   ---> 9ce6fc4d2850 で実行中
  中間コンテナ 9ce6fc4d2850 を削除しています
   ---> b68755061b28
  ステップ3/5: mkdir /appsを実行する
   ---> b483c6b127f2 で実行中
  中間コンテナ b483c6b127f2 を削除しています
   ---> 605c1a048a5f
  ステップ4/5: apache-tomcat-8.5.33.tar.gz /appsを追加します
   ---> 3c44f96ed41c
  ステップ 5/5: RUN ln -s /apps/apache-tomcat-8.5.33 /apps/tomcat
   ---> 4c1aa39a6c92 で実行中
  中間コンテナ 4c1aa39a6c92 を削除
   ---> 9b3bc4f58cc9
  9b3bc4f58cc9 を正常に構築しました
  172.20.7.50/baseimages/centos-tomcat:8.5.33 のタグ付けに成功しました

作成したイメージを使用してコンテナを起動し、正常に作成されたかどうかを確認します。起動時にポートを公開するために-pを追加し、物理マシンでテストします。

[root@node2 /app/dockerfile/web/tomcat/tomcat-base]#docker run -it -p 8802:8080 172.20.7.50/baseimages/centos-tomcat:8.5.33 bash  
[root@917b2c2262a3 /]# cd /apps/
[root@917b2c2262a3 アプリ]# ll
合計 0
drwxr-xr-x 9 ルート ルート 220 11月 22 22:08 apache-tomcat-8.5.33
lrwxrwxrwx 1 root root 26 Nov 22 22:08 tomcat -> /apps/apache-tomcat-8.5.33
[root@917b2c2262a3 アプリ]# ./tomcat/bin/catalina.sh 開始
CATALINA_BASE の使用: /apps/tomcat
CATALINA_HOME の使用: /apps/tomcat
CATALINA_TMPDIR の使用: /apps/tomcat/temp
JRE_HOME の使用: /usr/local/jdk/jre
CLASSPATH の使用: /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcatが起動しました。

クライアント側のブラウザでテストする

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerfile の CMD および ENTRYPOINT コマンドの詳細な説明
  • 最高のDockerfileを書く方法
  • Dockerfile の COPY コマンドと ADD コマンドの詳細な説明
  • Dockerfileイメージ構築ファイルとDockerの関連コマンドの詳細な紹介
  • Dockerfile を使用して MySQL イメージを構築し、データの初期化と権限設定を実装する詳細な説明
  • Dockerfile における ENV 命令の具体的な使用法の詳細な説明
  • Dockerfileの使用例
  • 公式 Tomcat イメージを作成するための Dockerfile とイメージの使用方法の詳細な説明
  • Dockerfile の一般的なコマンドの概要
  • Dockerfile を使用して SpringBoot プロジェクトをデプロイする方法
  • Dockerfileを使用して独自のイメージを作成する方法
  • Dockerfile 命令 ADD と COPY の紹介
  • Dockerfileにおけるマルチステージ(マルチステージビルド)の詳しい説明
  • Docker の基礎: Dockerfile コマンドの詳細な説明
  • Dockerfile を使用して Node.js サービスをデプロイする方法
  • Dockerfile の手順の説明
  • Dockerfile命令VOLUMEの簡単な紹介
  • Dockerfileの簡単な紹介

<<:  JavaScript 配列を走査する 5 つの方法

>>:  MySQLのexecute、executeUpdate、executeQueryの違い

推薦する

EF (Entity Framework) の挿入または更新データ エラーの解決方法

エラー メッセージ:ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

vue3 学習ノートにおける axios の使用の変更の概要

目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

Vueコンポーネント通信方法事例まとめ

目次1. 親コンポーネントが子コンポーネントに値を渡す(props) 2. サブコンポーネントは親コ...

MySQLインストーラがコミュニティモードで実行されている場合の解決策

今日、リモートデスクトップを実行してログインしているときにこのプロンプトを見つけました「MySQL ...

MySQLのデフォルトのソートルールに基づく落とし穴

MySQL のデフォルトの varchar 型は大文字と小文字を区別しません (insensitiv...

VMware で Centos7 ブリッジ ネットワークを構成する手順の詳細な説明

VMware仮想マシンでのCentos7ブリッジネットワーク構成の完全な手順は参考用です。具体的な内...

Vue+elementを使用してページ上部のタグを実装する方法の詳細な説明

目次1. ページレンダリング2. タグを切り替える3. タグを削除するこのようなタグはどのように記述...

レスポンシブWebデザイン学習(2) — 動画をレスポンシブにすることはできるのか?

前回のエピソードレビュー:昨日は、ページがさまざまなデバイス サイズにどのように対応するかについて説...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...

優れた Web UI ライブラリ/フレームワーク 10 選

1. ITミルツールキットIT Mill Toolkit は、リッチ Web アプリケーション用のウ...

mysql mycat ミドルウェアのインストールと使用

1. mycatとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベ...

MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

React-vscode で jsx 構文を使用する際の問題と解決策

問題の説明プラグインをインストールした後、ES7 React/Redux/GraphQL/React...