Docker Windowsイメージを初めて使用しますか?現在Windowsショップで働いていて、コンテナーイメージのDockerビルドについて知りたいですか?あなたは正しい場所に来ました。新しいことを学ぶ最良の方法は、docker build
を使用することです。 およびdocker build "tag"
コマンド!
この記事では、docker build
を使用してDockerfileから最初のWindowsDockerイメージを作成する方法を学習します。 コマンド。
始めましょう!
Dockerコンテナイメージについて
何年もの間、複数のオペレーティングシステム(OS)で開発をテストまたは実行する唯一の方法は、選択したOSバージョンで複数の専用の物理マシンまたは仮想マシンをイメージ化することでした。この方法では、ソフトウェアとOSの仕様ごとに新しいマシンをプロビジョニングするために、より多くのハードウェアとオーバーヘッドが必要でした。
ただし、最近では、マイクロサービスアーキテクチャの人気もあって、Dockerコンテナイメージの使用が増えています。 Dockerの人気の高まりに応えて、MicrosoftはDockerHubページでいくつかの主力製品のDockerイメージを公にサポートし始めました。また、Windows10およびWindowsServer 2016の製品機能として、Windowsのイメージのネイティブサポートも追加されています。
Dockerイメージは、Dockerエンジンを使用してコンテナー上で実行されます。 Dockerイメージには、移植性(複数の環境やプラットフォームに適用可能)、カスタマイズ可能、高度なスケーラブルなど、多くの利点があります。以下に示すように、従来の仮想マシンとは異なり、Dockerエンジンは、ホストOSカーネルとコンテナ化されている分離されたアプリケーションサービスの間のレイヤーで実行されます。
Dockerビルドとイメージについて
docker build
このコマンドを利用して、コンテナーイメージの作成を自動化し、Container-as-Code DevOpsプラクティスを採用し、コンテナー化をプロジェクトの開発サイクルに統合できます。 Dockerfileは、既存のイメージに基づく新しいコンテナーイメージを作成するためにDockerが使用するビルド命令を含む単なるテキストファイルです。
ユーザーは、コンテナーイメージがデプロイされたとき、または初めて起動したときに実行されるベースイメージとコマンドのリストを指定できます。この記事では、Windowsコンテナを使用してDockerfileからWindowsベースのDockerイメージを作成する方法を学習します。
このプロセスには、事前に作成されたコンテナイメージを使用するよりもいくつかの利点があります。
- Windowsのいくつかのバージョンのコンテナイメージを再構築できます。これは、いくつかのプラットフォームでコードの変更をテストするのに最適です。
- コンテナに何をインストールするかをより細かく制御できます。これにより、コンテナのサイズを最小限に抑えることができます。
- セキュリティ上の理由から、コンテナに脆弱性がないかどうかを確認し、ベースイメージにセキュリティ強化を適用することをお勧めします
この記事は、Dockerfileを使用してDockerイメージを構築する方法を学ぶためのウォークスルーです。フォローする場合は、次の前提条件が整っていることを確認してください。
- DockerforWindowsがインストールされています。私の環境ではDockerCommunityEdition(CE)バージョン2.1.0.4を使用します。
- Dockerイメージをダウンロードするにはインターネットアクセスが必要です
- Windows 10以降のオペレーティングシステム(このチュートリアルではバージョン1709が使用されています)
- ネストされた仮想化が有効
- ローカルマシンに5GBの空きディスク容量
- PowerShell 5.0+
- このチュートリアルでは、Visual StudioCodeIDEを使用します。ただし、好きなIDEを自由に使用してください。
注:Dockerをインストールするときは、必ずWindowsコンテナー構成を有効にしてください。
最初に、すべてのDockerイメージとそれらのイメージから構築するコンテナーを格納するためのフォルダーが必要になります。これを行うには、Powershellまたはcmdターミナルを開き(この記事全体でPowerShellを使用します)、 C:\Containers。という名前の新しいディレクトリを作成します。
フォルダが作成されたら、そのディレクトリに移動します。これにより、コンソールの現在の作業ディレクトリが C:\ Containersに配置されます。 このディレクトリへのすべてのダウンロードをデフォルトにします。
PS51> mkdir C:\Containers
PS51> cd C:\Containers
この記事では、有利なスタートを切ることができます。このプロジェクトで機能するファイルのほとんどは、すでに利用可能です。フォルダが作成されたら、Gitプルを実行して、この記事に必要なファイルをTechSnipsGithubリポジトリからC:\ Containersにコピーします。 フォルダ。完了したら、 C:\ Containers フォルダは次のようになります。
IISWindowsDockerイメージのダウンロード
実行する最初のタスクは、「テンプレート」またはベースイメージをダウンロードすることです。後で独自のDockerイメージを作成しますが、最初に、開始するためのイメージが必要です。このチュートリアルに必要な最新のIISおよびWindowsServerコアイメージをダウンロードします。更新されたイメージのリストは、MicrosoftDockerハブの公式イメージページにあります。
イメージリポジトリからイメージをダウンロードする前に、まずローカルシステムに現在あるDockerベースイメージを確認しましょう。これを行うには、管理者としてPowerShellコンソールを実行し、docker images
と入力します。 。このコマンドは、ローカルシステム上のすべての画像を返します。
以下に示すように、利用可能な画像は最初は空です。
PS51> docker images
次に、DockerHubからベースIISイメージをダウンロードします。これを行うには、docker pull
を実行します 以下に示すように。インターネットの速度によっては、このプロセスが完了するまでに時間がかかる場合があります。
PS51> docker pull mcr.microsoft.com/windows/servercore/iis
次に、docker images
を実行します このチュートリアルでは、最新のMicrosoft WindowsCoreIISイメージを利用できるはずです。
PS51> docker images
Dockerfileの検査
前のステップで、このチュートリアル用に既存のDockerfileをダウンロードしました。それが何を伴うのかを正確に見てみましょう。
C:\ Containers \ Container1 \ Dockerfileを開きます お気に入りのエディタでファイルします。このDockerfileの内容は、ビルド時にコンテナイメージを構成する方法を定義するために使用されます。
このファイルの各部分の機能の説明は、インラインコメントで確認できます。
# Specifies that the latest microsoft/iis image will be used as the base image
# Used to specify which base container image will be used by the build process.
# Notice that the naming convention is "**owner/application name : tag name**"
# (shown as microsoft/iis:latest); so in our case the owner of the image is
# Microsoft and the application is IIS with the "latest" tag name being used
# to specify that you will pull the most recent image version available.
FROM microsoft/iis:latest
# Copies contents of the wwwroot folder to the inetpub/wwwroot folder in the new container image
# Used to specify that you want to copy the WWWroot folder to the IIS inetpub WWWroot
# folder in the container. You don't have to specify the full path to your local
# files because docker already has the logic built-in to reference files and folders
# relative to the docker file location on your system. Also, make note that that
# docker will only recognize forward slashes for file paths - since this is a
# Windows based container instead of Linux.
COPY wwwroot c:/inetpub/wwwroot
# Run some PowerShell commands within the new container to set up the image
# Run the PowerShell commands to remove the default IIS files and create a new
# application pool called TestPool
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.htm -force
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.png -force
RUN powershell Import-Module WebAdministration
RUN powershell New-WebAppPool -Name 'TestPool'
# Exposes port 80 on the new container image
# Used to open TCP port 80 for allowing an http connection to the website.
# However, this line is commented out, because the IIS container has this port
# already open by default.
#EXPOSE 80
# Sets the main command of the container image
# This tells the image to run a service monitor for the w3svc service.
# When this is specified the container will automatically stop running
# if the w3svc service stopped. This line is commented out because of the
# IIS container already has this entrypoint in place by default.
#ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]
Dockerfileの準備が整い、ベースIISイメージがダウンロードされました。次に、Dockerfileを使用して新しいDockerイメージをビルドします。
新しいイメージを作成するには、docker build "tag"
を使用します 指図。このコマンドはイメージを作成します。この記事では、以下で-t **
も使用していることがわかります。 「タグ」部分を置き換えるオプション。このオプションを使用すると、新しいイメージにわかりやすいタグ名を付けたり、イメージが存在するフォルダーパスを指定してDockerfileを参照したりできます。
以下に、コンソールがC:\ Containersディレクトリにあることを確認してから、 C:\ Containers \ Container1のDockerfileから新しいイメージを構築する例を示します。 ディレクトリ。
PS51> cd C:\Containers
PS51> docker build -t container1 .\Container1
開始すると、dockerファイル内の各命令を1行ずつ移動するときに、コマンドの進行状況を確認できます。
完了すると、新しいDockerイメージが作成されます!
次に、docker images
を実行します 使用可能な画像を表示するコマンド。 container1の例を以下に示します。 画像が作成されました。
注:
docker build —help
commandは、実行中のdockerコマンドに関する詳細情報を表示するための便利なパラメーターです。
Dockerコンテナの実行
この時点で、新しいイメージが作成されているはずです。その画像を使用してコンテナをスピンアップする時が来ました。新しいコンテナを起動するには、docker run
を使用します コマンド。
docker run
コマンドは、 container1に基づいて新しいDockerコンテナーを起動します 以前に作成した画像。この例を以下に示します。
-d
に注意してください パラメータが使用されます。これは、Dockerランタイムに、イメージをデタッチモードで開始し、コンテナーの実行に使用されたルートプロセスが終了したときに終了するように指示します。
docker run
の場合 完了すると、作成されたコンテナのIDが返されます。以下の例は、このIDを$containerID
にキャプチャしています。 後で簡単に参照できるように変数。
PS51> $containerID = docker run -d container1
PS51> $containerID
コンテナが起動したら、docker ps
を実行します。 指図。このコマンドを使用すると、各イメージを使用して現在実行されているコンテナーを確認できます。以下では、実行中のイメージにニックネーム( busy_habit )が自動的に生成されることに注意してください。 この場合)。このニックネームは、コンテナを管理するためにコンテナIDの代わりに使用されることがあります。
Dockerコンテナ内でコードを実行する
新しいコンテナは、作成したばかりの新しいイメージから構築されます。それでは、実際にそのコンテナを使用してコードを実行してみましょう。 Dockerコンテナー内でのコードの実行は、docker exec
を使用して行われます。 コマンド。
この例では、docker exec
を実行します Get-ChildItem
のPowerShell出力を表示するには 以下のコマンド構文を使用して、コンテナ内のコマンド。これにより、デフォルトのIISファイルを削除するDockerfileの指示が成功します。
PS51> docker exec $containerID powershell Get-ChildItem c:\inetpub\wwwroot
以下に、存在するファイルは index.htmlのみであることがわかります。 これは、デフォルトのファイルが削除されたことを意味します。
次に、ipconfig
を実行します コンテナ内のコマンドを使用してコンテナイメージのローカルIPアドレスを取得し、IISWebサイトへの接続を試行できるようにします。
PS51> docker exec $containerID ipconfig
そのipconfig
を以下に示します。 ローカルコンピュータで実行されているかのようにコンテナで実行され、すべてのIP情報を返しました。
IISWebサイトの検査
今度はあなたの労働の成果を明らかにする時です! Dockerコンテナで実行されているIISサーバーがindex.htmlページを適切に提供しているかどうかを確認するときが来ました。
ブラウザを開き、ipconfig
で見つかったIP4アドレスを貼り付けます アドレスバーに。すべてが順調であれば、 Hello World !!が表示されます。 以下のようなメッセージ。
Docker履歴の確認
docker history
でDockerコンテナを操作するときに使用する便利なコマンドの1つ 指図。必ずしもイメージまたはコンテナ自体の作成に関連しているわけではありませんが、docker history
コマンドは、コンテナイメージに加えられた変更を確認できる便利なコマンドです。
PS51> docker history container1
以下に、そのdocker history
を示します。 container1で実行されたすべてのDockerfileおよびPowerShellアクティビティを返します 使用しているコンテナ。
以下の手順は、マシン上で実行されているすべての停止したコンテナーをクリーンアップするために使用されます。これにより、ディスクスペースとシステムリソースが解放されます。
docker ps
を実行します システムで実行されているコンテナのリストを表示するコマンド:
PS51> docker ps
次に、docker stop
を使用して実行中のコンテナを停止します コマンド:
PS51> docker stop <image nick name: busy_haibt in my case>
PS51> docker stop <image nick name: unruffled_driscoll in my case>
最後に、docker system prune
を使用して、停止したコンテナを完全に削除できます。 コマンド。
PS51> docker system prune
- 最初のDockerWindowsServerコンテナの作成
- WindowsでDockerボリュームを管理する方法