6. DockerFile 分析とマイクロサービス

2. DockerFileの分析

2.1 それは何ですか?
DockerFile は、Docker をビルドするために使用されるテキスト ファイルです。イメージをビルドするために必要な命令とパラメーターで構成されるスクリプトです。公式 Web サイト :
https://docs.docker.com/engine/reference/builder/
ビルドまでの 3 つのステップ
1. Dockerfile ファイルを書き込みます
2. Docker bulid コマンドによりイメージが構築されます
3. Docker run によりイメージに従ってコンテナー インスタンスが実行されます

2.2 DockerFlie 構築プロセスの分析
2.2.1 Dockerfile コンテンツの基礎知識
1. 各予約語命令は大文字で、その後に少なくとも 1 つのパラメータが続く必要があります。

2. 命令は上から下の順に実行されます。

3. # はコメントを意味します

4. 各命令により、新しい画像レイヤーが作成され、画像が送信されます。

2.2.2 Docker が DockerFile を実行する一般的なプロセス
1. Docker は基本イメージからコンテナを実行します

2. 命令を実行し、コンテナに変更を加えます。

3. docker commit と同様の操作を実行して、新しいイメージ レイヤーを送信します。

4. Docker は、送信されたイメージに基づいて新しいコンテナを実行します。

5. すべての命令が実行されるまで、dockerfile 内の次の命令を実行します。

2.2.3 まとめ
アプリケーション ソフトウェアの観点から見ると、Dockerfile、Docker イメージ、Docker コンテナはそれぞれソフトウェアの 3 つの異なる段階を表します。

  • Dockerfileはソフトウェアの原材料です

  • Docker イメージはソフトウェア成果物です

  • Docker コンテナは、ソフトウェア イメージの実行状態、つまりイメージに従って実行されるコンテナ インスタンスと考えることができます。

開発を中心とした Dockerfile、配信標準となる Docker イメージ、デプロイと運用保守を担う Docker コンテナは、これら 3 つが不可欠であり、合わせて Docker システムの要となります。

1. Dockerfile、Dockerfile を定義する必要があります。Dockerfile はプロセスに必要なものすべてを定義します。Dockerfile に関係するコンテンツには、実行コードまたはファイル、環境変数、依存パッケージ、ランタイム環境、ダイナミック リンク ライブラリ、オペレーティング システムの配布、サービス プロセスおよびカーネル プロセスが含まれます (アプリケーション プロセスがシステム サービスおよびカーネル プロセスを処理する必要がある場合、このプロセスは名前空間のアクセス許可制御を設計する方法を検討する必要がある)など。

2. Docker イメージ: Dockerfile でファイルを定義した後、Docker ビルド中に Docker イメージが生成され、Docker イメージが実行されると、実際にサービスの提供が開始されます。

3. Docker コンテナ。コンテナはサービスを直接提供します。

2.3 DockerFlie で一般的に使用される予約語命令
FROM: ベースイメージ、現在のイメージが基づいているイメージ、既存のイメージをテンプレートとして指定、最初のイメージは FROM である必要があります

MAINTAINER: イメージ管理者の名前と電子メール アドレス

RUN: コンテナのビルド時に実行する必要があるコマンド。シェル形式と実行形式の 2 つの形式があります。RUN は docker ビルド時に実行されます。
EXPOSE: 現在のコンテナによって外部に公開されるポート

WORKDIR: 開始点となるコンテナの作成後にデフォルトのログインを中断するための受信作業ディレクトリを指定します。

USER: イメージを実行するユーザーを指定します。指定しない場合、デフォルトは root です。

ENV: イメージ構築プロセス中に環境変数を構成するために使用されます。

VOLUME: データコンテナのボリューム。データの保存と永続化作業に使用されます。

追加: ホスト ディレクトリ内のファイルをイメージにコピーし、URL を自動的に処理して tar パッケージを解凍します。

COPY: ADD と同様に、ファイルとディレクトリをイメージにコピーします。ファイル/ディレクトリをビルド コンテキスト ディレクトリの <ソース パス> からイメージの新しいレイヤー内の <ターゲット パス> の場所にコピーします。

CMD: コンテナーの起動後に行うことを指定します。
注: Dockerfile には複数の CMD 命令を含めることができますが、有効になるのは最後の命令だけです。CMD は、docker の実行後にパラメーターに置き換えられます。

CMD と RUN の違い: CMD は docker run 時に実行され、RUN は docker build 時に実行されます。

ENTRYPOINT: コンテナーの起動時に実行するコマンドを指定するためにも使用されます。

ENTRYPOINT は CMD と併用できます。通常、CMD はパラメータを変更するために使用されます。ここでの CMD は ENTRYPOINT にパラメータを渡すことと同じです。

ENTRYPOINT を指定すると、CMD の意味が変わります。コマンドを直接実行するのではなく、CMD の内容がパラメータとして ENTRYPOINT 命令に渡されます。この 2 つの組み合わせは "" になります。 2.4 Case 2.4.1 以降

定義image mycentosjava8
1. 要件: Centos には vim+ifconfig+jdk8 が必要です。

JDKダウンロード用のミラーアドレス

2. 書く

Dockerfile (大文字の D) を作成する準備をします。

FROM centos
#FROM centos:centos7
#实际操作时,centos最新版有问题,这里改成centos7就可以执行成功了
MAINTAINER xie<xie@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

3. 構築する

docker build -t 新しいイメージ名: TAG。

2.4.2 仮想吊り下げミラー
1. それは何ですか?

倉庫名とラベルはすべてイメージであり、一般にぶら下がりイメージと呼ばれます

[root@centos100 test]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE

2. ケースを書く

2.1、vim Dockerfile

from ubuntu
CMD echo 'action is success

2.2、ドッカービルド。

3. 吊り下げ画像をすべて表示

docker イメージ ls -f dangling=true

4. 削除

ドッカーイメージのプルーン

2.4.3 カスタム イメージ myUbuntu
1. 要件: Ubuntu+vim+ifconfig+jdk8

2. Dockerfile を作成する

from ubuntu
maintainer xie<xie@163.com>
env MYPATH /usr/local
workdir $MYPATH

run apt-get update
run apt-get install -y vim
run apt-get install -y net-tools
run mkdir /usr/local/java
add jdk-8u171-linux-x64.tar.gz /usr/local/java

env JAVA_HOME /usr/local/java/jdk1.8.0_171
env JRE_HOME $JAVA_HOME/jre
env CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
env PATH $JAVA_HOME/bin:$PATH

expose 80
cmd echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

3. 構築する

docker build -t myubuntu:1.8 。

3. Docker マイクロサービスの実践
3.1 IDEA による通常のマイクロサービス モジュールの作成

yml設定

server:
port: 6001

単純なコントローラーを作成する

@RestController
public class OrderController {
    
    
 @Value("${server.port}")
 private String port;
 Random random = new Random();

 @RequestMapping("/order/docker")
 public String helloDocker() {
    
    
     return "hello docker " + "\t" + port + random.nextInt(1000000);
 }

 @RequestMapping(value = "/order/index", method = RequestMethod.GET)
 public String index() {
    
    
     return "端口号:" + port + "\t" + random.nextInt(1000000);
 }
}

残りは springboot によって自動生成されるコードです

次に、Maven を介してパッケージ化し、centos にアップロードします。

3.2 マイクロサービスを公開し、Dockerfile を介して Docker にデプロイする
1. Dockerfile ファイルを作成します。

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER xigua
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为xigua_docker.jar
# test-0.0.1-SNAPSHOT.jar为打包好的jar文件
ADD test-0.0.1-SNAPSHOT.jar xie_docker.jar
# 运行jar包
RUN bash -c 'touch /xigua_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

2. イメージを構築する

docker build -t xigua_docker:1.8 。

3. コンテナを実行する

docker run -d -p 6001:6001 xigua_docker:1.8

4. アクセステスト

接続をテストするには、curl 127.0.0.1:6001/order/index を使用します。

ブラウザを使用して直接アクセスすることもできます

おすすめ

転載: blog.csdn.net/weixin_45817985/article/details/133384393