Dockerfile から Docker インスタンスを実行する
さまざまな環境でのソフトウェアと依存関係の管理に関しては、Docker コンテナーが間違いなく標準ユニットになっています。実際のアプリケーションで作業する場合は、アプリケーションのコンテナイメージをビルドする前に Docker ファイルを作成する必要があります。
Dockerfile は、Docker イメージをアセンブルするときに指示が設定された読み取り専用のテキストドキュメントです。一方、Docker イメージは、Docker コンテナーの構築に使用される一連の命令、アプリケーションコード、依存関係、ツール、およびライブラリです。
したがって、コンテナーは、Dockerfile からアセンブルされた Docker イメージの実行可能なインスタンスです。
この記事では、Dockerfile を作成し、このファイルから docker インスタンスを実行する手順について説明します。
Dockerfile から Docker インスタンスを実行する手順
Dockerfile から Docker インスタンスを実行するには、以下の手順に従う必要があります。
Dockerfile を作成する
Dockerfile を作成するには、そのコンポーネントを理解する必要があります。最も一般的なコマンドには、次のものがあります。
FROM
:使用される親/ベースイメージのレイヤーを作成します。WORKDIR
:作業ディレクトリを設定できます。COPY
:現在のディレクトリの内容をコンテナ内のディレクトリにコピーできます。PULL
:Docker リポジトリからファイルを追加します。RUN
:イメージをビルドするときに実行されます。CMD
:コンテナの起動時に実行するコマンドを指定します。ENV
:ビルド中に使用される環境変数を定義します。ENTRYPOINT
:コンテナの起動時に実行するコマンドを決定します。MAINTAINER
:イメージの作成者を指定します。
Dockerfile を作成するには、まず、Dockerfile をホストするメインディレクトリを作成します。コンソールにメッセージを出力する簡単な Flask アプリケーションを作成します。
mkdir my-app
次に、このディレクトリに移動して、アプリケーションのメインファイルを app.py
として作成します。このファイルには、プログラムのアプリケーションコードが含まれています。
from flask import Flask
app = Flask(__name__)
def hello():
print("Hello, this is a simple Flask application")
hello()
これで、Dockerfile の作成に進み、Docker イメージを作成するために必要なコマンドを入力できます。
touch Dockerfile
また、このアプリケーションを実行するためにインストールするために必要なファイルを含む requirements.txt
ファイルを作成しました。要件を以下に示します。
click==8.0.4
Flask==2.0.3
gunicorn==20.1.0
itsdangerous==2.1.0
Jinja2==3.0.3
MarkupSafe==2.1.0
Werkzeug==2.0.3
Dockerfile を編集し、次のコマンドを追加して、docker build
コマンドを使用して Docker イメージを作成します。この場合、Python がベースイメージです。
また、作業ディレクトリを設定し、必要なファイルを現在のディレクトリから Docker コンテナのディレクトリにコピーしました。
# base image
FROM python
# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
COPY ./requirements.txt /var/www/requirements.txt
# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
# Run the app
CMD ["echo", "Hello, Developer"]
Docker イメージを作成する
docker build
コマンドを使用して Docker イメージを作成します。ただし、このコマンドは同じディレクトリで実行する必要があります。
構文:
$ docker build [OPTIONS] PATH | URL | -
my-app
ディレクトリ内で、以下のコマンドを実行します。 -t
フラグを使用すると、イメージの名前にタグを付けて、Dockerfile がこのコマンドを実行しているのと同じディレクトリにあることを示すことができます。
~/my-app$ docker build -t new_image .
出力:
[+] Building 184.4s (10/10) FINISHED
=> [internal] load build definition from Dockerfile 1.5s
=> => transferring dockerfile: 38B 0.0s
=> [internal] load .dockerignore 1.9s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:latest 50.8s
=> [1/5] FROM docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 30.4s
=> => resolve docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 0.4s
=> => sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 2.14kB / 2.14kB 0.0s
=> => sha256:17e2d81e5757980ee40742d77dd5d3e1a69ad0d6dacb13064e1b018a6664ec72 2.22kB / 2.22kB 0.0s
=> => sha256:178dcaa62b393b539abc8b866c39be81e8ade01786880dc5d17ce3fe02426dbb 8.55kB / 8.55kB 0.0s
=> => sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 2.34MB / 2.34MB 10.4s
=> => extracting sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 14.6s
=> [internal] load build context 1.1s
=> => transferring context: 195B 0.0s
=> [2/5] WORKDIR /var/www/ 3.2s
=> [3/5] COPY ./app.py /var/www/app.py 1.9s
=> [4/5] COPY ./requirements.txt /var/www/requirements.txt 2.6s
=> [5/5] RUN pip install -r /var/www/requirements.txt 82.3s
=> exporting to image 8.1s
=> => exporting layers 6.0s
=> => writing image sha256:5811f24b498ae784af32935318a5fddba536e2be27233b19bf08cad81438d114 0.2s
=> => naming to docker.io/library/new_image
以下の docker images
コマンドを使用して、docker イメージを一覧表示できるようになりました。
~/my-app$ docker images
出力:
REPOSITORY TAG IMAGE ID CREATED SIZE
new_image latest 5811f24b498a 2 minutes ago 929MB
Dockerfile からインスタンスを実行する
この Docker イメージから実行可能なインスタンスを作成するには、docker run
コマンドを使用して、前に作成したイメージ上に書き込み可能なレイヤーを作成します。
構文:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
最後に、上記のコマンドを使用して実行可能なインスタンスを作成できます。
~/my-app$ docker run -it new_image
Hello, Developer
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn