プログラム 技術

Docker上でPowerShellを実行する

PowerShellのモジュールを色々と入れていると競合したり、依存関係によって正常に動作しなかったりするのでDokcer上で実行する方法となります

名称バージョン
Docker Desktop4.39.0

PowerShell 7で実行する

まず初めにPowerShell 7で実行する方法となります。最初にDockerファイル全様です
今回はDockerファイルと実行するPowerShellは同じ階層に配置しています

# ベースイメージとしてPowerShellを使用
FROM mcr.microsoft.com/powershell:latest

# 必要なPowerShellモジュールをインストール
RUN pwsh -Command "Install-Module -Name Az -Force -AllowClobber"
# 複数のモジュールをインストールする場合
# RUN pwsh -Command "Install-Module -Name Az -Force -AllowClobber; Install-Module -Name Pester -Force -AllowClobber"

# ホストからコンテナにPowerShellスクリプトをコピー
COPY script.ps1 /scripts/script.ps1

# スクリプトを実行する
CMD ["pwsh", "/scripts/script.ps1"]

Dockerファイルの用意が完了したらそのファイルをビルドする

docker build -t powershell5-with-script .

ビルドしたイメージを使用してコンテナを実行する

docker run --rm powershell5-with-script

これでPowerShell 7でモジュールのインストールおよびスクリプトの実行されます

PowerShell 5で実行する

続いて、PowerShell 5(Windowsに標準搭載されているバージョン)で実行する方法となります
こちらもDockerファイルと実行するPowerShellは同じ階層に配置しています

コンテナモードをWindowsに変更する

先ほどのPowerShell 7はLinuxコンテナで実行しているため、コンテナモードをWindowsへ変更する必要があります

Dockerが起動している状態で右下のタスクトレイ上のアイコンを右クリックして、その中から「Switch to windows containers ...」をクリックしてwindowsコンテナに変更します。警告ウィンドウが出ますが、切り替えても問題ない場合は「Switch」をクリックして切り替えが完了します

Dockerファイルを実行する

これでWindowsコンテナが実行できるのでDockerファイル全様です
先ほどと同様にDockerファイルと実行するPowerShellは同じ階層に配置しています

# ベースイメージとしてPowerShellを使用
FROM mcr.microsoft.com/windows/servercore:ltsc2019

# 必要なPowerShellモジュールをインストール
SHELL ["powershell", "-Command"]
RUN Install-PackageProvider nuget -Force
RUN Install-Module -Name Az -Force -AllowClobber

# ワークディレクトリを作成
RUN mkdir C:\scripts

# ホストからコンテナにPowerShellスクリプトをコピー
COPY script.ps1 C:\\scripts\\script.ps1

# スクリプトを実行する
CMD ["powershell.exe", "-File", "C:\\scripts\\script.ps1"]

先ほどのPowerShell 7と違う点がいくつかあります

  • 『Install-PackageProvider nuget』コマンドでnugetパッケージを使用できるようにする
  • 『mkdir C:\scripts』で対象フォルダの作成
  • 『C:\\scripts\\script.ps1』のパス指定の際に【\\(バックスラッシュが2つ)】になっている

といった感じでいくつか変わっているので注意してください。特に、nugetをインストールしてからでないとモジュールの追加ができるエラーとなります

また、今回はWindows Server 2019のコンテナを使用していますが状況に応じてそれぞれ変えてください。各コンテナについては公式サイトで確認してください

MSサイト
Windows コンテナーの基本イメージ | Microsoft Learn
Windows コンテナーの基本イメージ | Microsoft Learn

Windows コンテナーの基本イメージの概要と、その使用するタイミングについて説明します。

対象サイトへ

ビルド及び実行する

これ以降は先ほどのPowerShell 7と同様で変わりはありません
Dockerファイルの用意が完了したらそのファイルをビルドする

docker build -t powershell5-with-script .

ビルドしたイメージを使用してコンテナを実行する

docker run --rm powershell5-with-script

これでPowerShell 5でモジュールのインストールおよびスクリプトの実行されます

最後に

同じ環境上でモジュールを色々と入れていると今回のようなことが発生するので状況に応じて使い分ける必要がありそうです

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社|ADS Co., Ltd.
アドバンスド・ソリューション株式会社|ADS Co., Ltd.

Microsoft 365/SharePoint/Power Platform/Azure による DX コンサル・シス ...

サイトへ移動

PR

-プログラム, 技術
-,