Docker ToolboxをMSYS2で動かす手順についてです!
セットアップから、docker-machineとdocker-composeの動作確認まで行います!
- Docker Toolboxインストール
- MSYS2でDockerするために
- 必要ファイル/フォルダの設定
- 設定用shellを作成
- docker-machineの動作テスト
- docker-composeの動作テスト
- 参考
- あとがき
Docker Toolboxインストール
ここに沿って実施。
インストーラは、このページから最新版をゲットしましょう。
インストール手順は、公式のこのページにも書かれています。
手順の概要は
- インストーラを取得してくる
- インストールする(次へ次へ進めてけばOK)
- Kitematicのショートカットが作られるので実行
- VMの作成完了を待つ
- Doeck Hubのログインは「SKIP FOR NOW」
MSYS2でDockerするために
色々見たり試したりしたが、最終的にここのお陰で解決した。
ただ英語のページなので、手順を書いていきます。
必要ファイル/フォルダの設定
まずはWindows側で操作していきます。
とはいえMSYS2上でもWindowsフォルダは操作できるので、そちらに読み替えて操作しても問題ないと思います。
Dockerのexeをコピー
まずは「C:\msys64\usr\local\bin」を作成と、下記3ファイルをこのフォルダにコピーします。
- docker-machine.exe
- docker.exe
- docker-compose.exe
mkdir C:\msys64\usr\local\bin cd "c:\Program Files\Docker Toolbox" copy docker-machine.exe C:\msys64\usr\local\bin copy docker.exe C:\msys64\usr\local\bin copy docker-compose.exe C:\msys64\usr\local\bin
コピーができちゃえば、Docker Toolbox自体はお役御免なので、アンインストールしちゃってもOKです。
「アンインストールする」って手順上書いてあったんですが、更新とか考えたらそのままでもいいんじゃね?とも半分思ってます。
ディレクトリハードリンクを作成
後々使用するProgram Filesのリンクを作成しておきます。
x64とx86のProgram Fileを「Program_Files~」として扱えるようにします。
mklink /j C:\Program_Files "C:\Program Files" mklink /j "C:\Program_Files_x86" "C:\Program Files (x86)"
C:\Program_Files <<===>> C:\Program Files のジャンクションが作成されました
のような結果が出力されていれば成功です。
コレ作っておけばWindowsのコンソール操作もわざわざ「"C:\Program Files\~"」と、ダブルクォーテーションで囲わなくて便利なんじゃね?と思ったり。
設定用shellを作成
MSYS2で操作します。
/etc/profile.d/の下に「portabledevops.sh」を作成する。
portabledevops.shの元々のバージョンはここから取得できます。
ここから参考ページが提示しているように編集していきます。
詳細な変更が書かれているというより、その箇所を適宜変更のような書き方がされています。
それに合わせて修正することで、一応動作確認まではできています。
自分で修正が面倒……という方は、コチラにぼくが修正した版を置いておきました。
HOMEの設定
このブロックを
if [ $PORTSYS = 'MSYS' ] || [ $PORTSYS = 'MINGW32' ] || [ $PORTSYS = 'MINGW64' ]; then if [ ! -d /home/$USERNAME ]; then mkdir -p /home/$USERNAME fi HOME=/home/$USERNAME USERPROFILE=$HOME HOMEPATH=$HOME elif [ $PORTSYS = 'Linux' ] && [ `uname -a|awk '{print $4}'|cut -d'-' -f2` = Microsoft ];then (略)
このように変更しました。
if [ $PORTSYS = 'MSYS' ] || [ $PORTSYS = 'MINGW32' ] || [ $PORTSYS = 'MINGW64' ]; then if [ ! -d /home/$USERNAME ]; then echo "First time to run bash, create home folder: /home/$USERNAME" mkdir -p /home/$USERNAME fi export HOME=/home/$USERNAME export USERPROFILE=$HOME export HOMEPATH=$HOME elif [ $PORTSYS = 'Linux' ] && [ `uname -a|awk '{print $4}'|cut -d'-' -f2` = Microsoft ];then (略)
HOME, USERPROFILE, HOMEPATHをexportするように変更しました。
HOMEDRIVEの設定
このブロックを
if [ $PORTABLEBASH = NO ] || ([ $PORTSYS = 'Linux' ] && [ `uname -a|awk '{print $4}'|cut -d'-' -f2` = Microsoft ]);then (略) else # portable msys2/cygwin/mobaxterm if [ "`env|grep MOBANOACL`" ]; then (略) fi fi
このように変更しました。
if [ $PORTABLEBASH = NO ] || ([ $PORTSYS = 'Linux' ] && [ `uname -a|awk '{print $4}'|cut -d'-' -f2` = Microsoft ]);then (略) else # portable msys2/cygwin/mobaxterm export HOMEDRIVEL=`cygpath -m \`pwd\` |cut -d: -f1` export HOMEDRIVE=$HOMEDRIVEL: if [ "`env|grep MOBANOACL`" ]; then (略) fi fi
else側にHOMEDRIVEL, HOMEDRIVEのexportを追加しました。
外側のifブロックは実行環境をチェックしているようです。
MSYS2はこれに当てはまらないので、else側に処理を入れました。
Docker Toolbox関連
このブロックを
# portable docker toolbox if [ -d $PORTABLEPATH/dockertoolbox ]; then (略) fi
このように変更しました。
if [ -d $PORTABLEPATH/dockertoolbox ]; then (略) else alias dm=/usr/local/bin/docker-machine.exe alias dc=/usr/local/bin/docker-compose.exe denv(){ eval $(docker-machine env "$@") } export -f denv fi
elseブロックを追加しました。
ここにaliasやexportを追加しています。
ここを通れば、docker-machine, docker-composeを、dm, dcで使うことができるようになります。
参考ページの実行テストに使われている「dm」なんかはココで設定したdocker-machineを使っています。
MSYS2を再起動する
MSYS2起動時にportabledevops.shが自動で読み込まれます。
こんな感じの表示が出たらOKです。
check sshd status starting sshd sshd: no hostkeys available -- exiting. sshd failed sshd is listening at 22 Agent pid 2414 ssh key not exist: /home/lis/.ssh/id_rsa please generate it using ssh-keygen Welcome to portabledevops Platform: MINGW64 Home: /home/lis Portable path: Driver: C Shortcut: alias|grep
docker-machineの動作テスト
参考ページで実施されている通り、docker-machineでVMを作って起動したりするテストをします。
作成と起動
msysdemoという名称のVMを、createで作成してstartで実行しています。
$ dm create --driver virtualbox --virtualbox-hostonly-cidr "10.0.10.1/24" msysdemo $ dm start msysdemo
実行するとVirtual Boxマネージャーからも、msysdemoが作られ、起動していることが確認できます。
環境変数の設定
Dockerの環境変数(なのかな?)に設定をします。
コレをしないとうまく動きませんでした。
$ denv msysdemo
VM一覧表示
起動まで行ってるのでやる必要も無いですが、msysdemoが作成されていることが確認できます。
$ dm ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS msysdemo * virtualbox Running tcp://10.0.10.100:2376 v19.03.5
SSH接続
SSHで作ったdockerのVMに接続します。
$ dm ssh msysdemo
実行するとこんな感じで表示されました。
$ dm ssh msysdemo ( '>') /) TC (\ Core is distributed with ABSOLUTELY NO WARRANTY. (/-_--_-\) www.tinycorelinux.net docker@msysdemo:~$ exit logout
SSH経由でコマンド実行
SSH経由でコマンドを実行した結果を取得したり
$ dm ssh msysdemo "hostname && uname -a" msysdemo Linux msysdemo 4.14.154-boot2docker #1 SMP Thu Nov 14 19:19:08 UTC 2019 x86_64 GNU/Linux
docker-composeの動作テスト
ココを元に、docker-composeでHello Worldします。
そもそもdocker-compose動くか確認
動作確認ということで、バージョン表示を行います。
$ dc --version docker-compose version 1.24.1, build 4667896b
動いてますね。
docker-compose.ymlの作成
適当な作業ディレクトリを作り、Hello world用のdocker-compose.ymlを作ります。
ファイル名は「docker-compose.yml」固定。
version: "3" services: hello: image: hello-world:latest
docker-compose実行
ということでコレを実行。
$ dc up Creating network "hello-world_default" with the default driver Pulling hello (hello-world:latest)... latest: Pulling from library/hello-world Digest: sha256:4fe721ccc2e8dc7362278a29dc660d833570ec2682f4e4194f4ee23e415e1064 Status: Downloaded newer image for hello-world:latest Creating hello-world_hello_1 ... done Attaching to hello-world_hello_1 hello_1 | hello_1 | Hello from Docker! hello_1 | This message shows that your installation appears to be working correctly. hello_1 | hello_1 | To generate this message, Docker took the following steps: hello_1 | 1. The Docker client contacted the Docker daemon. hello_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. hello_1 | (amd64) hello_1 | 3. The Docker daemon created a new container from that image which runs the hello_1 | executable that produces the output you are currently reading. hello_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it hello_1 | to your terminal. hello_1 | hello_1 | To try something more ambitious, you can run an Ubuntu container with: hello_1 | $ docker run -it ubuntu bash hello_1 | hello_1 | Share images, automate workflows, and more with a free Docker ID: hello_1 | https://hub.docker.com/ hello_1 | hello_1 | For more examples and ideas, visit: hello_1 | https://docs.docker.com/get-started/ hello_1 | hello-world_hello_1 exited with code 0
やった動いたぁぁぁぁぁぁ!!!
docker-composeができちゃえば色々かつる(イメージ)なので、勝利宣言状態です。
参考
コチラを参考にしました。ありがとうございました!
qiita.com dreamcloud.artark.ca qiita.com
あとがき
Docker ToolboxをMSYS2で動かす手順についてでした!
わからずググったり、躓きながら進めて、やっと成功したので結構喜んでます……
MSYS2を強化していけば、MSYS2×Docker環境でいろんなことできちゃうんじゃね!?という妄想を膨らましております。