DockerFileを使用して独自のDockerイメージを構築するDockerFileの紹介と使用

Dockerfileの使用

Dockerfileの概要

Dockerfileは、命令(Instruction)を含むテキストファイルであり、各命令はレイヤーを構築するため、各命令の内容は、レイヤーの構築方法を説明します。

基本知識

  • 各コマンドは大文字の予約済みキーワードです
  • 実行シーケンスは上から下に実行されます。各コマンドはレイヤーです。
  • #コメントを示します

Dockerfileの一般的な手順を使用する

コマンド 効果
から 基本的な鏡は、鏡の母親が誰であるかを示します Ubuntuから
メンテナー ミラーの名前とメールアドレスを書いたのは誰ですか
実行 鏡に何をしてもらいたいですか
コピー ファイルをコンテナにコピーします
追加 ソースパスがhttpパスの場合、ADDコマンドを実行できます自動ダウンロード 次に、コピーしたファイルがtar.gzの場合、指定したパスにコピーします。自動減圧 そして、圧縮されたパッケージを削除します
WORKDIR コンテナの作業ディレクトリはcdです。
ボリューム データを保存する場所
EXPOSE ミラーリングされたポートを公開します
CMD コンテナの起動時に指定されたコマンドは、最後にのみ有効になり、置き換えられます
エントリーポイント コンテナの起動時に指定したコマンドを追加することができ、追加されます
オンビルド ただし、継承されたDockerfileをビルドします
ENV イメージを構築するときに環境変数を設定する
コマンド 効果
FROM imageName に基づいてカスタマイズされたDockerfileを開始する必要があるイメージ FROMtomcatまたはFROMtomcat:8.5.32
WORKDIR切り替えるディレクトリ ワークスペースを切り替えると、cdコマンドを置き換えることができます WORKDIR / usr / local / tomcatは、現在のディレクトリを指定されたディレクトリに切り替えることができます
RUNbashコマンド bashコマンドを実行します echo "Hello World"> / usr / local / 1.txtなどを実行します。
コンテキストパスのCOPYファイル/コンテナパス ファイルをコンテナにコピーします index.js / usr / local / docker / testをコピーします
コンテキストパスのファイルを追加します。コンテナパス ファイルをコンテナにコピーします ソースパスがhttpパスの場合、ADDコマンドをダウンロードして、指定したパスにコピーできます。コピーしたファイルがtar.gzの場合、ADDは自動的に解凍して削除します。
CMDコマンド ミラーでプログラムを開始します CMD ["nginx"、 "-g"、 "daemon off;"]
EXPOSEポート[ポート2、ポート3、...] Dockerコンテナにミラーリングされたポートを公開します EXPOSE [80,8080]またはEXPOSE80
などなど

イメージを構築する

docker build -f dockerfile名称 -t 镜像名称 .  
# -f 指定dockerfile文件名
# -t 构建的镜像名称
# . 上下文路径

予防

CMDとENTRYPOINTの違い


RUNコマンドは複数のコマンドを実行します

#正确用法
RUN buildDeps='gcc libc6-dev make' \
    && apt-get update \
    && apt-get install -y $buildDeps \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
    && mkdir -p /usr/src/redis \
    && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
    && make -C /usr/src/redis \
    && make -C /usr/src/redis install \
    && rm -rf /var/lib/apt/lists/* 

#错误用法
FROM debian:jessie
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install

Dockerfileの各命令はレイヤーを表し、同じことがRUNにも当てはまり、上記の書き込み方法で7レイヤーのイメージが作成されます。これは完全に無意味です。ビルド時間が長くなるだけでなく、エラーが発生する可能性も高くなります。

注: Union FSには最大数のレイヤーがあります。たとえば、AUFSには最大42レイヤーがありましたが、現在は127レイヤーを超えることはできません。

正しい記述方法は、Dockerfile命令を\記号で連結して、&&をラップして使用することです。これにより、前の7つのレイヤーが1つのレイヤーに変換されます。


添付、Dockerカスタムイメージのコンテキスト説明

注意を払うとdocker build、最後のコマンドaが表示され.ます。.これは現在のディレクトリを表しますが、現在のディレクトリでDockerfileは、これがパスで指定されDockerfileたパスであると多くの初心者が考えているため、理解は実際には不正確です。上記の形式に対応するコマンドの場合、これが指定されたコンテキストパスにあることがわかりますでは、コンテキストとは何ですか?

  • このコマンドのように
docker build -t imageName .

Dockerfileをビルドするとき、ユーザーはイメージコンテキストをビルドするためのパスを指定します。docker build - t name .コマンドがこのパスを認識した後、ユーザーが指定したパスの下にあるすべてのコンテンツがパッケージ化され、Dockerエンジンにアップロードされます。このように、Dockerエンジンはこのコンテキストパッケージを受信すると、イメージのビルドに必要なすべてのファイルを取得するために展開されます。
もしDockerfileそうなら、書き込みます:

COPY ./package.json /app/

これは、実行コピーすることではありませんdocker buildDockerfileコマンドのディレクトリをpackage.json、またそれはコピーすることですDockerfile下のディレクトリをpackage.json、しかし、複製コンテキスト(文脈)ディレクトリの下にpackage.json

独自のミラーを公開する

DockerHubに公開する

アカウント登録

# 先登录自己的账户
docker login -u yufire
# 输入密码
Password: 
# 提示你没有把将未加密地存储在/root/.docker/config.json中。
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
# 登陆成功
Login Succeeded

docker push 镜像名:版本号

Alibaba Cloud ImageServiceに公開する

  1. AlibabaCloudにログインします
  2. コンテナイメージサービスを探す
  3. 競合を防ぐために名前空間を作成します 作成できるアカウントは3つだけです
  4. 倉庫を作成する

作成したミラーのバージョン番号を持参してください

docker login -u username

dockerlogout

花を広げるのをやめる

作者:yufire © [email protected]

おすすめ

転載: blog.csdn.net/weixin_43420255/article/details/106495127