ウェブサイト検索

Dockerfile を使用してカスタム Docker イメージを自動的に構築および構成する方法 - パート 3


このチュートリアルでは、Apache サービスがインストールされたUbuntuに基づいてカスタム Docker イメージを構築する方法に焦点を当てます。プロセス全体はDockerfileを使用して自動化されます。

Docker イメージは、Dockerfiles という名前のテキスト ファイルから自動的に構築できます。 Docker ファイルには、Docker イメージの作成と構成に使用される段階的な手順またはコマンドが含まれています。

要件

  • Docker をインストールし、Docker コンテナーの操作を学ぶ – パート 1
  • Docker コンテナでのアプリケーションのデプロイと実行 - パート 2

基本的に、Docker ファイルには、要件に基づいて特定のコンテナーを構築および構成するためのさまざまな命令が含まれています。次の手順は最もよく使用され、そのうちのいくつかは必須です。

  1. FROM=Docker ファイルの最初の命令として必須。新しいイメージの構築元となるベース イメージをプルするように Docker に指示します。タグを使用して、構築元の正確なイメージを指定します。
Ex: FROM ubuntu:20.04
  1. MAINTAINER=ビルド イメージの作成者
  2. RUN=この命令は複数行で使用でき、Docker イメージの作成後に任意のコマンドを実行します。
  3. CMD=Docker イメージの起動時に任意のコマンドを実行します。 Dockerfile では CMD 命令を 1 つだけ使用します。
  4. ENTRYPOINT=CMD と同じですが、イメージのメイン コマンドとして使用されます。
  5. EXPOSE=コンテナの実行時にネットワーク ポートをリッスンするように指示します。デフォルトでは、コンテナーのポートはホストからアクセスできません。
  6. ENV=コンテナ環境変数を設定します。
  7. ADD=リソース (ファイル、ディレクトリ、または URL からのファイル) をコピーします。

ステップ 1: Dockerfile リポジトリの作成または書き込み

1. まず、将来他のイメージを作成するためにファイルを再利用できるように、ある種の Dockerfile リポジトリを作成しましょう。 /var パーティションのどこかに空のディレクトリを作成し、そこに、新しい Docker イメージを構築するために使用される手順を含むファイルを作成します。

mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile

2. 次に、次の手順に従ってファイルの編集を開始します。

vi /var/docker/ubuntu/apache/Dockerfile

Dokerfile の抜粋:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

それでは、ファイルの説明を見てみましょう。

最初の行はUbuntu イメージから構築していることを示しています。タグが送信されていない場合 (たとえば、14:10)、Docker Hub の最新のイメージが使用されます。

2 行目に、画像作成者の名前メールアドレスを追加しました。次の 2 つの RUN 行は、イメージの構築時にコンテナ内で実行され、Apache デーモンをインストールし、デフォルトの Apache Web ページにテキストをエコーします。 。

EXPOSE 行は、Docker コンテナがポート 80 でリッスンするように指示しますが、このポートは外部からは利用できません。最後の行は、コンテナーの起動後に Apache サービスをフォアグラウンドで実行するようにコンテナーに指示します。

3. 最後に行う必要があるのは、以下のコマンドを発行してイメージの作成を開始することです。これにより、ubuntu-apache という名前の新しい Docker イメージがローカルに作成されます。この例に示すように、以前に作成した Dockerfile :

docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Docker によってイメージが作成されたら、次のコマンドを実行して、使用可能なすべてのイメージを一覧表示し、イメージを識別できます。

docker images

ステップ 2: コンテナを実行し、LAN から Apache にアクセスする

5. コンテナを継続的に (バックグラウンドで) 実行し、LAN 内のホストまたは他のリモート マシンからコンテナの公開サービス (ポート) にアクセスするには、ホストの端末プロンプトで次のコマンドを実行します。 :

docker run -d -p 81:80 ubuntu-apache

ここで、-d オプションは ubuntu-apache コンテナをバックグラウンドで (デーモンとして) 実行し、-p オプションはコンテナのポート 80 をローカルホストのポート 81 に接続します。 Apache サービスへの外部 LAN アクセスは、ポート 81 経由でのみ到達できます。

Netstat コマンドを使用すると、ホストがどのポートをリッスンしているかがわかります。

コンテナーが起動した後、docker ps コマンドを実行して、実行中のコンテナーのステータスを表示することもできます。

6. マシンの IP アドレス、ローカルホスト、またはポート 81 の docker net インターフェイスに対して curl ユーティリティを使用して、コマンド ラインから Web ページをホストに表示できます。 IP コマンドを使用します。ネットワーク インターフェイスの IP アドレスを表示する行。

ip addr               [List nework interfaces]
curl ip-address:81    [System Docker IP Address]
curl localhost:81     [Localhost]

7. ネットワークからコンテナ Web ページにアクセスするには、リモートの場所でブラウザを開き、HTTP プロトコル、コンテナが実行されているマシンの IP アドレス、その後にポート 81 を使用します (図を参照)。下の画像。

http://ip-address:81

8. コンテナ内で実行されているプロセスの内部を取得するには、次のコマンドを発行します。

docker ps
docker top <name or ID of the container>

9. コンテナを停止するには、docker stop コマンドの後にコンテナ ID または名前を発行します。

docker stop <name or ID of the container>
docker ps

10. コンテナにわかりやすい名前を割り当てたい場合は、以下の例に示すように --name オプションを使用します。

docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps

これで、割り当てられた名前を使用するだけで、操作 (開始、停止、トップ、統計など) のためにコンテナーを参照できるようになります。

docker stats my-www

ステップ 3: Docker コンテナ用のシステム全体の構成ファイルを作成する

11. CentOS/RHEL では、他のローカル サービスの場合と同様に、systemd 構成ファイルを作成し、コンテナを管理できます。

たとえば、次のコマンドを使用して、apache-docker.service という名前の新しい systemd ファイルを作成します。

vi /etc/systemd/system/apache-docker.service

apache-docker.service ファイルの抜粋:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. ファイルの編集が終了したら、ファイルを閉じ、systemd デーモンをリロードして変更を反映し、次のコマンドを発行してコンテナを起動します。

systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service

これは単純なDockerfile で何ができるかの単純な例にすぎませんが、最小限のリソースと労力でほんの数秒で起動できる、非常に洗練されたアプリケーションを事前に構築することができます。

さらに読む: