ホームページ > テクノロジー周辺機器 > IT業界 > Dockerfileで画像を作成する方法

Dockerfileで画像を作成する方法

Christopher Nolan
リリース: 2025-02-18 12:36:13
オリジナル
706 人が閲覧しました

How to Build an Image with the Dockerfile

アプリケーションの構築、依存関係とサービスのインストール、自動展開など、すべてがDockerFileから始まります。 Dockerfileの構文を、基本から複雑さまで、Docker画像を構築するときにいくつかのベストプラクティスを確認しましょう。

このガイドは、Dockerをガイドして、配信するアプリケーションの最小化Linux(ベースイメージ)を選択するDockerFileを書き込み、選択したツールセットと特定の構成が付属して独自のLinux Distributionを構築します。 アプリケーションの実行に適しています。

How to Build an Image with the Dockerfile

キーポイント

    Dockerは、必要なバイナリ、ランタイムライブラリ、バックエンドツール、オペレーティングシステムの微調整、サービスをすべて梱包することにより、「どこにいても、任意のアプリケーションを構築、配信、実行できますすぐに配信され、自動的に展開されます。
  • dockerfileは、Dockerに画像を構築するための手順を含むプレーンテキストファイルです。これは、アプリケーションの構築、依存関係とサービスのインストール、自動展開の出発点です。 DockerFileの構文は、Apache構成ファイルの構文と似ており、次々と処理されます。
  • DockerFileは、アプリケーションのベース画像(最小化されたLinux)を選択するように指示し、選択したツールと特定の構成を備え、アプリケーションの実行に適したカスタムLinux分布を作成します。
  • dockerfileを使用すると、特定のツールとライブラリを選択してインストールし、環境変数を設定し、ファイルとディレクトリを追加し、キャッシュの問題を処理して、コンテナに必要なものがすべて揃っていることを確認できます。
  • Docker Buildコマンドは、DockerFileの指示に基づいて画像を作成するために使用されますが、Docker Runコマンドは、作成された画像を使用してインタラクティブ端子を起動するために使用されます。
  • なぜdocker
を選ぶのか

How to Build an Image with the Dockerfile dockerを使用すると、「どこにいても、あらゆるアプリケーションを構築、配信、実行する」ことができます。つまり、アプリケーションを実行するために必要なすべてのバイナリおよびランタイムライブラリ、バックエンドツール、オペレーティングシステムのチューニング、さらには特定のサービスをパッケージ化し、自動的に配信および展開できるようにすることができます。

docker実装ソフトウェアコンテナテクノロジーがこれを可能にします。ここでは詳細については説明しませんが、Docker、ソフトウェアコンテナとは何か、Docker、コンテナ、より安全なソフトウェア配信の理解にどのように機能するかについて詳しく読むことができます。

dockerのインストール

開始する前に、ローカルマシンであろうとリモートサーバー上にあるかどうかにかかわらず、Dockerをインストールする必要があります。

幸いなことに、Dockerの最新バージョン(この執筆時点でのバージョン1.12)により、インストールプロセスが非常にスムーズになり、Windows、MacOS、Linux用のシンプルで理解しやすいガイドを入手できます。

dockerfile

dockerで画像を構築するには、最初にこのビルドの指令とコンテキストをDockerfileというプレーンテキストファイルに設定する必要があります(詳細については後で詳しく説明します)。このファイルには、Apache構成ファイルと同様の構文があります。1行あたりの1つの命令と対応するパラメーターには、すべての命令が順番に処理されます。コメントは#文字とスペースから始まります。最後に、DockerFileを手に入れると、コマンドDockerビルドが画像を構築します。これについては、後で詳しく説明します。

dockerfileの書き込みを開始する前に、ワークスペースをセットアップします。ホームディレクトリにmy_imageというディレクトリを作成し、ワーキングディレクトリとして使用し、Dockerfileをその中に配置します。

mkdir ~/my_build
cd ~/my_build
touch Dockerfile
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
今、画像の構築を開始する準備ができました。

基本的なミラーを選択

を選択します

画像を作成する場合、ほとんどの場合、1つの出発点(i.e)が使用されます。これは、公式のubuntu、mysql、wordpress、またはDocker Hubで利用可能なその他の画像である可能性があります。以前に作成した画像を使用することもできます。

Note :独自のコアツールとディレクトリ構造を含むDockerの最小画像(Scratchと呼ばれる)を使用して、独自の基本画像を作成できます。ここではこのプロセスについては説明しませんが、Docker Webサイトで基本的な画像の作成に関するガイドを参照できます。 たとえば、

最小化されたDebian分布から始めたい場合は、DockerFileに次のことを追加します。

from dockerfileを書くときに使用する最初の命令でなければなりません。画像名の最後にappending:およびversion_nameを使用して、ベース画像の特定のバージョンを使用することもできます。たとえば、
# 设置基础镜像
FROM debian
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードでは、「sid」debian(不安定な分布)を使用しています。これは、RubyまたはPythonインタープリター、MySQLバージョンなどの特定のバージョンが必要な場合にも重要です。これらのツールの公式基本画像を使用する場合には重要です。現在、このガイドでは、デフォルトの(安定した)Debian画像に固執します。

# 设置基础镜像
FROM debian:sid
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
メンテナーを指定し、メタデータを追加します

メンテナーが誰であるかを指定することを選択できます。ルセロデルアルバを、あなたの名前、または建設の責任者またはチームに置き換えます:

これは必須ではありませんが、ラベルディレクティブを使用してメタデータを追加することもできます。これは、Docker Inspectコマンドを使用して画像をチェックするときに後で使用できます。

この機能の詳細については、Dockerオブジェクトタグを参照してください。
# 作者
MAINTAINER Lucero del Alba
ログイン後にコピー
ログイン後にコピー

独自の分布を作成します

# 额外的元数据
LABEL version="1.0"
LABEL description="First image with Dockerfile."
ログイン後にコピー
ログイン後にコピー

この時点で、鏡に含めるツールとライブラリを選択して、コンテナに期待されるアクションを実行するために必要なものがすべて揃っています。このチュートリアルの最後に、実際にLinuxディストリビューションの構築に非常に近いジョブを行います。

いくつかのコンテナ(postgreSQLデータベースを実行しているコンテナなど)は、バックグラウンドで実行するように設計されています。ただし、コンテナで特定の操作を実行するコンソールが必要な場合が多いため、基礎となる画像には最小GNUツールのみがバンドルするため、いくつかの追加のツールが必要になる場合があります。

トラブルシューティングキャッシュの問題

画像に追加のパッケージをインストールしようとすると、ほぼ確実にキャッシュの問題が発生します。これは、基礎となる画像がメタデータをキャッシュし、データを抽出するリアルタイムリポジトリが頻繁に変更されているためです。

Debianベースの配布では、これを処理する新しいパッケージをインストールする前に、次のコマンドを追加できます。

mkdir ~/my_build
cd ~/my_build
touch Dockerfile
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
基本的なツールのインストール

コードエディター、ロケール、GIT、TMUXなどのツール - 今こそ、必要なものをすべてインストールして、画像にバンドルされる時です。

1行ごとに1つをインストールします:

このすべてを1行にインストールできますが、後でパッケージを追加または削除する場合は、プロセス全体を再実行する必要があります。したがって、ここでのベストプラクティスは、Dockerのキャッシュの恩恵を受けることができるように、1行ごとに1つのパッケージをインストールすることです。
# 设置基础镜像
FROM debian
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
さらに、シンプルにしてください。ビルド時間と画像サイズが増加する可能性があるため、ツールを「ケースに備えて」インストールしたくありません。

アプリケーションのランタイムライブラリをインストールします

また、この画像にアプリケーションを配信します。特定のバージョンのPHP、Ruby、またはPython、およびいくつかのモジュールが必要ですか?今こそ、アプリケーションを配信するために必要なすべてのプログラムとランタイムを提供する時です。

このコンテナはアプリケーションのみを実行するように設計されているため、好きなように指定できます。

この例では、Python 3と一緒にPython 3(PostgreSQLデータベースに接続するため)、Python Moustache Module、およびYamlモジュールとともにインストールします。 (独自のdockerfileを作成すると、必要な特定の依存関係を自然にインストールします。)

コンパイルアンドダウンロードパッケージ

分布は、必要な特定のモジュールまたはプログラムのパッケージがない場合があります。ただし、実行中のコンテナに手動でインストールする必要はありません!代わりに、Runディレクティブ(1行ごと)を使用して、アプリケーションに必要なライブラリをダウンロード、コンパイル、セットアップすることができます。 このファイルを別のファイルにスクリプト化し、このファイルをビルドに追加して実行することもできます。

# 设置基础镜像
FROM debian:sid
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
クリーニング

鏡をきれいにし、できるだけ小さくするには、インストールシーケンスの最後にクリーンアップするのが最善です

また、Debianを選択したためApt-Getを使用していることに注意してください。ただし、ベース画像の配布には対応するコマンドを使用してください。

独自のアプリケーションを配信してください

この環境を構築する目的全体は、アプリケーションをスムーズに配信し、実行する準備をすることを可能にすることです。ファイル、ディレクトリ、さらにはリモートURLの内容を画像に追加するために、Addディレクティブを使用します。

ただし、ファイルを追加する前に、適切なコンテキストに配置する必要があります。操作を簡素化するために、DockerFile自体とともに、前述のmy_buildディレクトリにすべてを配置します。

アプリと画像に入れたいものすべてを使用していると仮定すると、〜/my_build(app.pyとlib.pyがサブディレクトリアプリ/)に次のファイルがあります:

mkdir ~/my_build
cd ~/my_build
touch Dockerfile
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

コンテナ内の / rootディレクトリに.bashrcおよび.profileスクリプトを追加して、コンテナのシェルを起動し、コンテナ内の / app / directoryのコンテンツをコピーします。

次のコマンドを追加します:

# 设置基础镜像
FROM debian
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

環境を設定します

最後に、システムレベルとアプリケーションレベルの両方で必要な環境変数を設定します。

多くの人はデフォルトのDebian文字セットを使用してそれを行うために使用しますが、国際的な視聴者をターゲットにしているので、UTF-8端末を持っている方法を見てみましょう。以前にロケールパッケージをインストールしたため、キャラクターセットを生成して適切なLinux環境をセットアップするだけです。

# 设置基础镜像
FROM debian:sid
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
アプリケーションがパスワードとパスを交換するために、いくつかの環境変数を設定する必要がある場合があります。 dockerfileは、これを正確に行うためのenvの指示を提供します:

# 作者
MAINTAINER Lucero del Alba
ログイン後にコピー
ログイン後にコピー
コンテナを起動するときにコマンドラインから環境変数を渡すこともできることに注意してください。これは、いくつかの機密情報(パスワードなど)を共有するのに便利な場合があります。

フルdockerfile

もちろん、DockerFileを必要に応じて調整する必要がありますが、うまくいけばその可能性を理解することを願っています。

これは完全なファイルです:

# 额外的元数据
LABEL version="1.0"
LABEL description="First image with Dockerfile."
ログイン後にコピー
ログイン後にコピー
ミラーを構築します

my_buildディレクトリ内から、Dockerビルドコマンドを使用して、-tフラグを渡して、この場合はmy_imageで新しい画像を「タグ」します。 。

これにより、各「ステップ」がdockerfileの指令である長い出力が生成されます。ここに切り捨てられた出力があります:
# 更新源列表
RUN apt-get clean
RUN apt-get update
ログイン後にコピー

ミラーをリスト
# 每行安装一个基本应用程序,以获得更好的缓存
RUN apt-get install -qy git
RUN apt-get install -qy locales
RUN apt-get install -qy nano
RUN apt-get install -qy tmux
RUN apt-get install -qy wget
ログイン後にコピー

Docker Imagesコマンドを使用して画像をリストできます。

これにより、新しく作成されたmy_imageやダウンロードしたその他の基本画像が出力されます。

# 安装应用程序运行时和模块
RUN apt-get install -qy python3
RUN apt-get install -qy python3-psycopg2
RUN apt-get install -qy python3-pystache
RUN apt-get install -qy python3-yaml
ログイン後にコピー
…それだけです、私たちの鏡は配達されて走る準備ができています!

コンテナを起動します
# 清理
RUN apt-get -qy autoremove
ログイン後にコピー

最後に、新しく作成されたインタラクティブ端末を開始するために、Docker Runコマンドを使用します。

次のステップ

dockerfileのすべての可能性を紹介しませんでした。特に、ポートを実行する方法を確認し、ホストからデータを保存して回復するためのボリュームを指定する方法を確認するために、コンテナ間のコンテナをリンクすることもできませんでした。その他の便利な機能。

<code>.bashrc
.profile
app/app.py
app/lib.py
Dockerfile</code>
ログイン後にコピー
将来の記事でこれらを紹介します。現在、次のリソースをチェックアウトすることができます。

DockerのWebサイトから:

dockerfileリファレンス

DockerFileを作成するためのベストプラクティス

SitePointから:
    から
    • Docker、コンテナ、およびより安全なソフトウェア配信の理解
    • dockerサブチャネル
    • すべてのDocker関連の記事
    DockerFileを使用して画像を構築する方法の

    dockerfileを使用してDocker画像を構築することの重要性は何ですか?

    dockerfileは、ユーザーがコマンドラインで呼び出して画像を組み立てることができるすべてのコマンドを含むテキストドキュメントです。 DockerFileを使用すると、Dockerに画像を構築するプロセスが簡素化されます。これにより、プロセスを自動化することができ、より効率的でエラーの傾向が少なくなります。 DockerFileは、画像を作成する方法に関する明確なバージョン化ドキュメントも提供しているため、他の開発者が作業を理解し、使用または変更することが容易になります。

    dockerfileを使用してビルドプロセスを最適化する方法は?

    dockerfileは、ビルドプロセスを最適化するさまざまな方法を提供します。最も効果的な方法の1つは、マルチステージビルドを使用することです。これにより、dockerfileのステートメントの複数を使用できます。それぞれが指導から異なる基盤を使用することができ、各命令は建設の新しい段階を開始します。オプションでアーティファクトをあるステージから別の段階にコピーして、最終画像に表示したくないすべてを残すことができます。

    dockerfilesを書くためのベストプラクティスは何ですか?

    dockerfilesを書くためのいくつかのベストプラクティスがあります。まず、ミラーサイズを小さく保つために、不要なパッケージを取り付けないようにしないでください。次に、マルチステージビルドを使用して、ビルドプロセスを最適化します。第三に、各dockerfileは単一のアプリケーションを表す必要があります。複数のアプリケーションがある場合は、複数のDockerFilesを使用する必要があります。最後に、.dockerignoreファイルを使用して、画像に含めるべきではないファイルとディレクトリを除外する必要があります。

    dockerfileをデバッグする方法は?

    dockerfileは、画像を構築し、シェルコマンドで実行することでデバッグできます。ビルドが失敗した場合、Dockerは問題を特定するのに役立つエラーメッセージを返します。 runコマンドを使用して、Dockerfileをデバッグするのに役立つコマンドを実行することもできます。

    dockerfileで環境変数を使用できますか?

    はい、dockerfileで環境変数を使用できます。 ENV指令は、環境変数をこの値に設定します。この値は、ビルドフェーズのすべての後続の指示の環境にあり、多くの指示でインラインで置き換えることもできます。

    ホストからDocker画像にファイルをコピーする方法は?

    コピー指令を使用して、ホストからDocker画像に新しいファイルをコピーできます。ホストのソースからDocker画像の宛先にファイルをコピーします。

    ドッカー画像にポートを公開する方法は?

    Exposeディレクティブを使用して、Dockerコンテナに通知して、実行時に指定されたネットワークポートをリッスンできます。ただし、これは実際にポートを公開していません。ポートを公開するには、Docker Runコマンドで-Pフラグを使用する必要があります。

    Docker画像で作業ディレクトリを設定する方法は?

    WorkDirディレクティブを使用して、後続の実行、CMD、EntryPoint、コピー、およびDockerFileのディレクティブの追加の作業ディレクトリを設定できます。

    docker画像でコマンドを実行する方法は?

    実行指令を使用して、Docker画像でコマンドを実行できます。これにより、現在の画像の上の新しいレイヤー上の任意のコマンドが実行され、結果が送信されます。

    Docker画像のデフォルトコマンドを指定する方法は?

    CMDディレクティブを使用して、実行するコンテナにデフォルト値を提供できます。これらには、実行可能ファイルまたは実行可能ファイルを省略できます。その場合、エントリポイントディレクティブを指定する必要があります。

    この改訂された出力は、元の画像のフォーマットを維持し、記事の意味の大幅な変更を回避しながら、独創性を忘れないでください

以上がDockerfileで画像を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート