おおくまねこ

職業プログラマーです。興味のある話題を書いています。

Windows でも docker-compose が使いたい

 最初に

背景

docker-compose は便利なツールだとおもっています。

開発環境・動作環境でdocker を使うときに「DBと一緒に使いたい」とか、

「複数のアプリケーション起動させて接続確認したい」とかの場合に、

それぞれのコンテナを一緒に管理できるので大変重宝していました。

 

以前まで Centos (7)上の CLI で使っていたので「コマンド操作の延長」のような感覚でつかっていたので

違和感も自分の中ではちいなかったなという感想です。

最近、趣味の都合で OS は Windows を最近使っているのですが、

Windowsでも動作確認でdocker-compose を使おうとしたときにセッティングしたので

やった内容をここに残しておきたいと思ったので記述しています。

環境

使ってるPCの情報です

OS、CPUが仮想化環境に対応している必要があります。

(たしか)OSは Windows Pro でないと仮想化環境を有効にできなかったはずです。

CPUも仮想化に対応している必要がありますが、20年近く前のCPUとかでなければ対応しているはずです。

作業内容

仮想環境の有効化

仮想環境(Hyper-V)を有効化します

コントロールパネル => プログラム => Windows の機能の有効化または無効化を選択

Windowsの機能」の中から「Hyper-V」を有効化(チェックボックスにチェックいれる)をします。

Docker for Windows のインストール

WindowsでDockerを動作・制御するツールである「Docker for Windows」をインストールします。

以下から exe ファイルをダウンロードして実行、インストールします

https://docs.docker.com/docker-for-windows/install/

 

PowerShell (管理者権限)から docker-compose をインストール

PowerShell を使ってコマンドラインから docker-compose をダウンロード・インストールを行います。

インストールを伴うので、管理者権限から実行します。

 

Windowsの検索ボックスに「Windows PowerShell」と入力。

出てきた「Windows PowerShell」アプリを右クリックし、「管理者として実行」を選択。すると管理者権限のPowerShellが起動します。

 

起動したPowerShellから以下のコマンドを実行して、docker-composeコマンドを Program フォルダーにインストールします。

Invoke-WebRequest "https:// github.com/docker/compose/releases/download/1.27.4/docker-compose-Windows-x86_64.exe"
-UseBasicParsing
-OutFile $Env:ProgramFiles\docker\docker-compose.exe

 

バージョンは以下を参照

Releases · docker/compose · GitHub 

(2020/12/16 当時)で最新安定板の 1.27.4 を使用しました。

 ※https://github.com/docker/compose/releases/download/ の直後の数字列がバージョン

 

インストールできたかを確認する場合、PowerShell で以下のコマンドを実行して、表示確認をします。

> docker-compose --version
docker-compose version 1.27.4, build 40524192

 

docker-compose.yml 作成(docker-compose の設定ファイル準備)

docker-compose.yaml を作成します。

docker-compose を起動させるための設定ファイルです。

フォルダーの構成はなんでもいいんですが、今回使ったのは以下の構成です。

> tree C:\Users\<User Name>\work\docker /F
C:\USERS\<User Name>\WORK\DOCKER
└─sample1
docker-compose.yml

※ 作業フォルダを C:\Users\<User Name>\work\docker としたとしてます。

 

docker-compose.yml の中身はこんな感じです。

Centos 7 のイメージを起動させてるだけです。

version: '3'

services:
postgres10:
image: postgres:10.5
#build: .
container_name: postgres_container
ports:
- "5432:5432"
volumes:
- ./postgres/init:/docker-entrypoint-initdb.d
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
hostname: postgres
restart: always
user: root
stdin_open: true

 

docker-compose 起動

docker-compose.yml から docker-compose を起動させてみます。

> cd C:\Users\Ore\work\docker\sample1
> docker-compose up -d

※ docker-compose.yml ファイルのあるフォルダーで実行したかったので、以上のコマンドを実行しています。

 

起動の確認を行いたい場合は以下のコマンドを実行

> docker-compose ps -a

 

正常に立ち上がってるときは以下のような表示になります。

> docker-compose ps -a
Name Command State Ports
----------------------------------------------------------
docker_centos7 /bin/bash Up 0.0.0.0:48080->80/tcp

「State」が 「Up」になっていることが確認できれば、正常に起動しています。

 

正常に起動できていない場合、以下のような出力がされています。

> docker-compose ps
Name Command State Ports
---------------------------------------------
docker_centos7 /bin/bash Exit 128

「State」が「Up」以外の場合、今回だと「Exit 128」になっています。

この場合は何か問題があって起動できていないので、

起動時にターミナルに出力されるログや、「docker-compose logs <service 名>」でログの確認をし、

問題点を解消してから起動する必要があります。

Service 名は docker-compose.yml で記載した service の値です。

 

起動ができたら、解放ポートからアクセスしてもよし、

コマンドラインからログインして作業してもよくなりました。

> docker-compose exec centos7_test /bin/bash
[root@d88a0415d67b /]#

 

Docker for Windows で操作する

前述の導入・起動が完了していれば、Docker for Windows で操作できるようになります。

GUIから、

  • コンテナの起動・再起動・停止・削除
  • コンテナにログインしてCLI操作(ターミナルを開く)
  • ログやリソースの確認

などの色々操作でき、

なおかつ、それらを直感的に扱えるので便利かなという印象です。

 

docker の管理に入っていれば、Docker for WindowsGUIから操作できるようになっています。

(docker-compose で起動させたタイミングで登録されている?)

 

Visual Code Studio が入っていれば、docker-compose.yml を開いて改修、

その後にGUIから再起動などのアクションもできるようになります。

 

最後に

WindowsでもDocker、docker-compose を扱えるようになりました。

これで docker での動作確認、開発がすすめられそうです。

よい開発ライフをおくれるようになりました。

 

追記

docker コマンドのサブコマンドに compose が追加されました。

compose サブコマンド使ったほうがいいかも?みたいな話について記載

keyno63.hatenablog.com