尝试阅读Dockerfile(elasticsearch-docker版本)

docker是什么

    • コンテナという仮想的な空間を提供して、その中でアプリケーションを実行できる

 

    docker公式

Dockerfile是什么?

    • Dockerコンテナーの構成内容を書くみたい

 

    Makefileみたいなイメージ

你为什么读了它?

目标

    • elastic公式の、Elasticsearchコンテナ

 

    • ちょっと使うことがあったので

 

    elastic/elasticsearch-docker

草草地看一下

FROM docker.elastic.co/elasticsearch/elasticsearch-alpine-base:latest

FROMは元となるDockerイメージを指定する命令文

elasticsearch-alpine-baseはAlpin LinuxをベースとしたElasticSearch
Alpin Linuxは軽量でセキュアなLinuxイメージ(Alpine Linux)
Alpin Linuxを使うとDockerイメージのサイズを減らせるらしい。(参考: Alpine Linux で Docker イメージを劇的に小さくする)
つまり、イメージのサイズを小さくするためのベースを使っているよ、と

MAINTAINER Elastic Docker Team <docker@elastic.co>

MAINTAINERは生成するイメージの Author (作者)フィールドを指定します。(公式より)
カスタムするときは自分のアカウントとかに書き換えるかな

ARG ELASTIC_VERSION
ARG ES_DOWNLOAD_URL
ARG ES_JAVA_OPTS

ARGは実行時に受け取る引数
Makefileから実行するときにそれぞれ引数で指定している

ELASTIC_VERSION :バージョン

ES_DOWNLOAD_URL :Elasticsearchのダウンロード先

ES_JAVA_OPTS :検証環境用のパラメータっぽいけど、Makefileからの指定なし。(よくわからん)

ENV PATH /usr/share/elasticsearch/bin:$PATH
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
    • 環境変数の設定

PATHはElasticsearchのPATHを追加している

JAVA_HOMEはそのままjava homeの指定をする

WORKDIR /usr/share/elasticsearch

WORKDIRは命令実行時の作業ディレクトリの指定

# Download/extract defined ES version. busybox tar can't strip leading dir.
RUN wget ${ES_DOWNLOAD_URL}/elasticsearch-${ELASTIC_VERSION}.tar.gz && \
    EXPECTED_SHA=$(wget -O - ${ES_DOWNLOAD_URL}/elasticsearch-${ELASTIC_VERSION}.tar.gz.sha1) && \
    test $EXPECTED_SHA == $(sha1sum elasticsearch-${ELASTIC_VERSION}.tar.gz | awk '{print $1}') && \
    tar zxf elasticsearch-${ELASTIC_VERSION}.tar.gz && \
    chown -R elasticsearch:elasticsearch elasticsearch-${ELASTIC_VERSION} && \
    mv elasticsearch-${ELASTIC_VERSION}/* . && \
    rmdir elasticsearch-${ELASTIC_VERSION} && \
    rm elasticsearch-${ELASTIC_VERSION}.tar.gz

真让人扔掉。。。
逐句来看

运行 wget ${ES_DOWNLOAD_URL}/elasticsearch-${ELASTIC_VERSION}.tar.gz
* 使用RUN命令执行该命令并提交结果
* 从指定的URL获取Elasticsearch的tar.gz文件。

EXPECTED_SHA=$(wget -O – ${ES_DOWNLOAD_URL}/elasticsearch-${ELASTIC_VERSION}.tar.gz.sha1)

预计的SHA值存储在EXPECTED_SHA变量中,并从${ES_DOWNLOAD_URL}/elasticsearch-${ELASTIC_VERSION}.tar.gz.sha1获取。

对比 $EXPECTED_SHA 和 $(sha1sum elasticsearch-${ELASTIC_VERSION}.tar.gz | awk ‘{print $1}’) 的值是否相等

只需一种做法:

解压tar.gz文件:tar zxf elasticsearch-${ELASTIC_VERSION}.tar.gz

将elasticsearch-${ELASTIC_VERSION}的所有者和组设置为elasticsearch:elasticsearch。

* 将解压缩的文件移动到当前位置中。

删除解压缩的文件夹 elasticsearch-${ELASTIC_VERSION}

删除elasticsearch-${ELASTIC_VERSION}.tar.gz文件
* 删除tar.gz文件

怎么回事…只是下载和安排而已吗

RUN set -ex && for esdirs in config data logs; do \
        mkdir -p "$esdirs"; \
        chown -R elasticsearch:elasticsearch "$esdirs"; \
    done

set -e で、0以外のステータスで終了した時に即終了する

set -x で、コマンドの変数などを展開した状態でコンソールに表示する

config, data, logs のディレクトリを作成して権限を変更する

USER elasticsearch

USERは命令実行時のユーザを指定する
elasticsearchユーザを指定する

# Install xpack
RUN eval ${ES_JAVA_OPTS:-} elasticsearch-plugin install --batch x-pack
    Elasticsearchのプラグイン(x-pack)をインストールする
COPY elasticsearch.yml config/
COPY log4j2.properties config/
COPY bin/es-docker bin/es-docker

COPYはそのままコピー
各ファイルをコピーする

USER root
    rootユーザを指定する
RUN chown elasticsearch:elasticsearch config/elasticsearch.yml config/log4j2.properties bin/es-docker && \
    chmod 0750 bin/es-docker
    先程コピーしたファイルの権限を変更する
USER elasticsearch
    elasticsearchユーザを指定する
CMD ["/bin/bash", "bin/es-docker"]

CMDはコンテナ実行時の処理をどの形式で行うか指定する

EXPOSE 9200 9300

EXPOSEはListenするポートを指定する

总结

    • Alpin Linuxを使って軽量なイメージを作っている

 

    • 通常のインストールコマンドとかもそのまま使えそう

 

    • 他にやってることとしては、Elastic公式からtar.gzをダウンロードしてきて配置しているだけだった

 

    • 1行ずつちゃんと読めば、むずかいしいことはしていない

 

    カスタマイズも結構楽にできそう

如果您想添加插件或其他内容的话

    以下のように追加する
RUN elasticsearch-plugin install [プラグイン名]

请提供以下内容的中文翻译:

Reference

    Dockerfile リファレンス
广告
将在 10 秒后关闭
bannerAds