このチュートリアルでは、 Ubuntuに基づいてカスタムDockerイメージを構築する方法に焦点を当てます。 Apacheを使用 サービスがインストールされています。プロセス全体は、 Dockerfileを使用して自動化されます 。
Dockerイメージは、 Dockerfilesという名前のテキストファイルから自動的に作成できます。 。 Dockerファイルには、Dockerイメージの作成と構成に使用される段階的な手順またはコマンドが含まれています。
要件
- DockerをインストールしてDockerコンテナの操作を学ぶ–パート1
- Dockerコンテナでのアプリケーションのデプロイと実行–パート2
基本的に、Dockerファイルには、要件に基づいて特定のコンテナーを構築および構成するためのさまざまな命令が含まれています。次の手順が最もよく使用され、一部は必須です。
-
FROM
=Dockerファイルの最初の命令として必須。新しいイメージを構築しているベースイメージをプルするようにDockerに指示します。タグを使用して、作成元の正確な画像を指定します。
Ex: FROM ubuntu:20.04
-
MAINTAINER
=ビルドイメージの作成者 -
RUN
=この命令は複数行で使用でき、Dockerイメージが作成された後に任意のコマンドを実行します。 -
CMD
=Dockerイメージの起動時に任意のコマンドを実行します。 Dockerfileで使用するCMD命令は1つだけです。 -
ENTRYPOINT
=CMDと同じですが、画像のメインコマンドとして使用されます。 -
EXPOSE
=実行時にネットワークポートでリッスンするようにコンテナに指示します。デフォルトでは、ホストからコンテナポートにアクセスすることはできません。 -
ENV
=コンテナ環境変数を設定します。 追加コード> =リソース(ファイル、ディレクトリ、または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 protected]> 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つの実行 イメージをビルドするときにコンテナ内で行が実行され、 Apacheがインストールされます デーモンとエコー デフォルトのApacheWebページにテキストを入力します。
公開 行は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。 curl を使用して、コマンドラインからホストにWebページを表示できます。 ポート81のマシンIPアドレス、ローカルホスト、またはDockerネットインターフェイスに対するユーティリティ。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。 コンテナの問題を停止するにはdockerstop
コマンドの後にコンテナ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でできることの単純な例にすぎません。 ただし、最小限のリソースと労力でほんの数秒で起動できる非常に洗練されたアプリケーションを事前に構築できます。
参考資料:
パート4 :LinuxでDockerコンテナを監視する方法