Windows、MacOS、Linuxなど、いろいろなOSがありますが、MacとLinuxはBashが使えるのに、Windowsは使えなくて不便な思いをしたことはありませんか?
Windowsにもコマンドインタフェースはありますが、DOSプロンプトは非力すぎるし、PowerShellはコマンドが独特過ぎてシェルに慣れた人だと苦痛しかありません。
たまにログファイルを整形したり、目的のログを抽出したい時に、grep、sedなどが使えればいいなとよく思いました。
今までHyper-VでLinuxの仮想マシンを立ち上げてきたりもしましたが、仮想マシンの立ち上げってリソース確保して、数ギガのISOイメージダウンロードしてインストールする、、と言った感じで、結構労力かかるんですよね。
そんな大げさなことせずに、今すぐにちょっと使いたいんじゃ!! という人向けの記事です。
今回は、お手軽にWindowsパソコンでLinux(例えばUbuntuやCentOS)を使う2つの方法を紹介したいと思います。
WindowsパソコンですぐにLinuxを使う方法
2種類あります。Windows Subsystem for Linux 2(WSL 2)を使う方法と、Docker for Windowsを使う方法です。
どちらも公式サイトをみるといろいろ難しいことが書いてありますが、誤解を恐れずにざっくりと説明するとこんな感じです。
- Windows Subsystem for Linux 2(WSL 2)
- WSL 2をインストールするだけ
- お試ししたい人向け
- ホストPCとの境界がないのでBash側の操作がWindows10パソコンに影響する場合あり
- Docker for Windows
- Docker本体をインストール後にLinuxのイメージをダウンロードする
- Linuxだけではなく、その他いろいろなツール類を動かせる
- ホストPCから独立して動くのでBash側の操作によるWindows10パソコンに影響は無い
WSL2がかなり本格化していますのでオススメです。Windows環境とは分離したLinux環境が必要な場合は、Dockerをオススメします。
Windows Subsystem for Linux 2(WSL 2)を使う
Microsoftの公式サイトでインストール手順の説明があります。
ちょっとあまり時間無かったので、ななめ読みしてこれをインストールしたらとりあえずBashは使えるようになりました。
bashが使えるようになります。
起動するとこのような感じです。Linuxコマンドが使えます。Windowsパソコンのハードディスクは/mnt/hostにマウントされて直接アクセス可能です。
Windowsの重要のフォルダは読み取り専用になっていましたが、パーミッション変更すればいじれてしまうのはちょっと怖いです。
そんなわけで、やはり私的にはDockerをオススメします。
Docker for Windowsを使う
Docker本体をインストール
まずは、Dockerイメージを動かすためのDocker本体のインストールをします。インストール方法はこちらの参照してください。そもそもDockerって何?という方も簡単に説明していますのでご覧ください。
UbuntuのOSイメージを取得
LinuxのOSイメージを取得します。今回はUbuntuで試します。
次のコマンドで入手できます。
> docker run ubuntu bash
このような感じでUbuntuのコンテナイメージをダウンロードします。一度ダウンロードすると次回以降はキャッシュされたイメージを使いますのでネット接続は不要ですし、高速で起動できます。
こんな感じで表示されます。
> docker run ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
5d3b2c2d21bb: Pull complete
3fc2062ea667: Pull complete
75adf526d75b: Pull complete
Digest: sha256:b4f9e18267eb98998f6130342baacaeb9553f136142d40959a1b46d6401f0f2b
Status: Downloaded newer image for ubuntu:latest
Ubuntuが起動する最低限の構成のイメージですので、ファイルサイズは100MB未満の軽量コンテナです。
Ubuntuイメージを使ってUbuntuコンテナを起動
コンテナイメージを取得したら、次はコンテナを起動します。–name でコンテナに名前を付けます。名前を付けないと、コンテナIDという長い文字列で操作することになってしまうので面倒です。
(1) ubuntuコンテナを起動し、名前を ubu01 にする
> docker run -itd --name ubu01 ubuntu bash
841429accf56305c44e6ea5ecc97644b4ac5ce63990a59cd8a93c25032b6df60
(2) コンテナが起動したか確認
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
841429accf56 ubuntu "bash" 5 seconds ago Up 3 seconds ubu01
起動中のUbuntuコンテナに接続
コンテナが起動していれば、名前を指定してコンテナに接続できます。
プロンプトが # になってしますので、コンテナ内のLinuxに接続完了です。
> docker exec -it ubu01 bash
root@841429accf56:/#
作業が終わってコンテナから出るには、exit で抜けます。
はい、これでWindowsパソコン上でUbuntuが起動しました!
これだけだと寂しいので、一応お片付けの方法も書いておきます。
お片付け
使い終わったら、コンテナを停止、破棄、イメージ削除します。
Ubuntuコンテナの停止
Ubuntuコンテナは起動しているので、使い終わった後のコンテナはまだ残っています。また同じコンテナを使う場合は停止し、また使う時に起動します。
(1) コンテナ停止
> docker stop ubu01
(2) コンテナ起動
> docker start ubu01
コンテナの破棄
もうコンテナを使わない場合はコンテナ自体を破棄します。破棄するとコンテナ内に追加でインストールしたソフトや作成したファイル類も破棄されてしまう点に注意してください。
コンテナ破棄
> docker rm ubu01
コンテナ強制破棄
> docker rm -f ubu01
イメージの破棄
もうUbuntu自体使わないという場合は、イメージ自体を削除します。再度使う場合は、またイメージ本体のダウンロードからになります。
> docker image rm ubutu
知っておくと便利なこと
コンテナの状態を確認
コンテナがどんな状態なのかは、docker ps -a で確認できます。
STATUS が UPは起動中、Exited は終了しています。括弧内の数値は終了コードです。ほとんどの場合、0が正常終了でそれ以外は異常終了です。
C:\tmp>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16276dd58da1 ubuntu "bash" 11 seconds ago Exited (0) 2 seconds ago ubu04
f5b6412b19ea ubuntu "bash" 14 seconds ago Exited (0) 4 seconds ago ubu03
604d84194314 ubuntu "bash" About a minute ago Exited (0) 39 seconds ago ubu02
841429accf56 ubuntu "bash" 47 minutes ago Up 47 minutes ubu01
コンテナ内とのファイルやりとり方法① docker cp編
Windows10のパソコン(ホストPC)から見てコンテナ内は完全に隔離された世界です。それがコンテナ化する目的の1つですが、やりとりできないのは不便です。
コンテナとの境界を飛び越えてファイルのやりとりをする場合は、docker cpコマンドを使います。
docker cp コンテナ名:フルパスで指定できます。
(1) Windows10(ホストPC)でファイル作成
> echo "Windows10!" > abc.txt
(2) Windows10(ホストPC)からUbuntuコンテナ内(ubu01)へコピー
> docker cp abc.txt ubu01:/tmp
(3) コンテナの中に入って確認
> docker exec -it ubu01 bash
root@5cb319bf2f5c:/# ls -l /tmp
total 4
-rwxr-xr-x 1 root root 12 Mar 13 03:57 abc.txt
root@5cb319bf2f5c:/# cat /tmp/abc.txt
Windows10!
root@5cb319bf2f5c:/#
コンテナ内とのファイルやりとり方法② マウント編
いちいちファイルのコピーが面倒な場合は、ホスト側のフォルダをDockerボリューム機能でマウントすることで、どちら側からも同時にアクセスできるようにすることもできます。
次のコマンドは、コンテナを起動する際に、Windows10のマイドキュメントフォルダに作った shareフォルダとUbuntuコンテナ内の/tmpをくっつけてます。
どちら側かも編集可能なフォルダができあがりますので、便利です。Windows側はドライブレターの書き方やパスの区切り文字が違いますので注意してください。
> docker run -itd --name ubu01 -v "/c/Users/battan/Documents/share":/tmp ubuntu bash
Windows10側で見た場合
コンテナのUbuntu側から見た場合
まとめ
これでWindowsでも簡単にBashが使えるようになりましたね。シェルを使い慣れている方はこれでWindowsパソコンでも同様にシェルが使えますので、いろいろと作業が捗ると思います。
- WSLかDockerを使う
- Dockerの場合は本体を入れてからLinuxのDockerイメージをダウンロード
- Dockerイメージからコンテナを立ち上げて完成
- ホスト側とコンテナ内でファイルのやりとりはできる
- 用事が済んだらコンテナを捨てれば綺麗サッパリ
Dockerの場合は、Dockerイメージをダウンロードすることでいろいろなツールが使えたり、専用の環境が構築できますので、是非試してみてください。当ブログでもいくつか紹介していますので、よかったら是非ご覧ください。
コメント