web-dev-qa-db-ja.com

Windows:docker VM att system bootを起動する方法

私はWindowsベースのビルドサーバーでdockerを実行する必要がある状況にあり(私は通常Arch/Debian Linuxで作業しています)、docker VMを使用する方法が見つかりませんシステムの起動時に自動的に起動します。 Linuxではサービスになりますが、Windowsではそうではないようです。

https://docs.docker.com/engine/installation/windows/ の指示に従い、Dockerを起動するとすべてが実行されますVMを$ docker-machine createで作成しましたが、これをWindowsサービスまたは同様のサービスとして設定する方法

目標は、ビルドDockerイメージを使用して、コンテナーとして開始し、それらに対してe2eテストを実行できるようにすることです。 TeamCityを使用してこれを解決するためのアイデアを構築するためにTeamCityを使用しているので、私もうまくいくと思います。

6
tirithen

私は少し前にunixシステムでのみ利用できるシステム依存性を持つ小さなwebappを書いたので、dockerが自然な選択でした(私はvagrantでかなり成功しましたが..)

開発にはWindowsを使用しており、このwebappをdockerコンテナーで実行しています。

それで私は同じ問題に遭遇しました、「システム起動時にこれを開始する方法」?

自動起動ディレクトリに次のような行を含む小さなバッチファイルができました。

docker-machine start default
docker run -d -p 8080:8080 -v //c/Users/%USERNAME%/somepath:/c/Users/%USERNAME%/somepath my/image --some.webapp.param=some-webapp-param-value

最初の呼び出しで「デフォルト」の仮想マシンが起動しますが、そこで別のVMを指定できるはずです。 2番目の呼び出しは「my/image」Dockerコンテナーを実行し、ポート8080をホストシステムに公開し、ユーザーのホームディレクトリから「somepath」をマウントします。 「バックグラウンドで」コンテナーを実行するため、必ず「-d」パラメーターを指定してください(「docker run --help」を確認してください)

その後、「デフォルトVM」のIPアドレス(私の場合は192.168.99.100でしたが、これはシステムによって異なる場合があります。最初にこの「ドッカークイックスタートターミナル」を起動したときに出力を確認できます。 IPアドレスはコンソールに記録されます。)

これで、いつものようにブラウザーを使用できるようになり、「 http://192.168.99.100:808 」をポイントして、私のWebアプリケーションで作業できます。

それが役立つことを願っています=)


edit

このバッチファイルが手元にあると、3つのオプションがあります。

  • バッチファイルを自動起動ディレクトリに配置します(インタラクティブユーザーセッションが必要なため、サーバーインスタンスには適さない可能性があります。)

  • windowsのタスクスケジューラを介してバッチファイルの実行をスケジュールします。そこで、タスクのトリガーとして「コンピューターの起動時に実行」を設定できます。タスクは、対話型セッション(ログインユーザー..)が利用可能かどうかに関係なく実行されます。

  • [〜#〜] nssm [〜#〜] のようなサービスラッパーを使用して、バッチファイルをWindowsサービスとしてインストールします。

7
charlie carver

ほんの小さなアドオン:Dockerイメージを起動して、Dockerの起動時に起動させたい場合(この場合は、Dockerを実行している仮想マシン)、docker runコマンドで--restart alwaysオプションを使用できます。その後、バッチファイルからdocker runコマンドを削除できます。コンテナーは、VMの起動後に自動的に起動するはずです。

5
PWFraley

Charlie Carver の答えを拡張しました。

次のスクリプトを使用すると、起動するboot2dockerマシンを指定できます。 Docker Toolboxフォルダーがパスに含まれておらず、適切な環境変数がすべて設定されていない可能性があるため、いくつかの初期化手順を記述しました。

このスクリプトをbatファイルに入れ、チャーリーが引用したオプションの1つを使用して、起動時にスクリプトを実行します。

@echo off

REM Set the name of the VM configuration where dockerd will be hosted
set BOOT2DOCKER_VM=default

set PATH=%PATH%;"C:\Program Files\Docker Toolbox\"

REM Start the default machine (or any other machine)
docker-machine start %BOOT2DOCKER_VM%

REM Set the environment variables to use docker-machine and docker commands
@FOR /f "tokens=*" %i IN ('docker-machine env --Shell cmd %BOOT2DOCKER_VM%') DO @%i

REM Start the image detached
docker run --detach --publish 5000:5000 foo-service

致命的なエラーinsideコンテナの場合に気になる場合は、docker runコマンドで--restartオプションを使用してください。

3
Ameba Spugnosa

NSSM(非吸引サービスマネージャー)を使用することもできます

コマンドプロンプトまたはPowershellウィンドウからインストールパラメータ(nssm.exe install)を使用してNSSMを起動します。

これによりGUIが起動し、次の詳細がわかります。

  • パス:[Docker Install DIR]\Docker\resources\bin\docker-compose.exe
  • スタートアップディレクトリ:[Dockerコンテナーへのパス]
  • 引数:Dockerコンテナーに必要な引数(つまりアップ)

最後に、GUIの下部にあるボックスにサービス名を入力すると、追加のタブにある他のオプションで自由にテストできます。

1
David Brook