Linux系ディストリビューションを勉強したいなと思った時、手元にWindows端末しかない!という環境でも、気軽にLinux環境を構築できる便利なDockerを使ってみた。
最近ではWSL(Windows Subsystem for Linux )という機能がWindowsに最初から入っていることもあるが、今回は後々複数のLinuxOSやミドルウェア(MW)、その他OSとの疎通など、様々な環境をつなげて検証したいという目的を持ってDockerを使用する。
VMwareをインストールして仮想マシンを立ち上げるやり方もあるが、私の場合ローカルがものすごっく重くなるので、軽量なDockerが適していたので試したという経緯がある。
Dockerの公式imageには、Webサービスのためのhttpd,nginxや、DBのpostgres,mysqlといったMWについても公開され気軽に導入できるため、Linuxに留まらず様々な環境での学習にも有効だ。
Docker Desktop のインストール
Docker Desktopのインストール方法については、既に世の中にたくさんのサイトで紹介されているため、ここでの説明は割愛する。
分かりやすいサイトはこちら。
無事インストールが完了したら、PowerShellで以下のコマンドを実行し、インストールされたことを確認する。
> docker -v
Docker version 24.0.6, build ed223bc
コンテナを立ち上げる
Dockerにはさまざまな有名どころのOSやMWを即時立ち上げられるようなimageファイル(OSやソフトウェアをインストールするためのISOファイル的な感じ?)をたくさん公開してくれている。
Docker Hub Container Image Library
ここで触ってみたい製品を検索してみて、存在すればすぐ立ち上げ可能だ。
今回はLinux系の、Ubuntu、CentOS、RockyLinux辺りを触ってみたいと思う。
docker container run
まず以下のコマンドを端末のPowerShellで実行してみると、この実行結果を得られる。
実行結果から、DockerHubからimageのダウンロードと、コンテナの立ち上げを同時に行ってくれることが分かる。
imageのtag(バージョン)を指定していない場合は、latest(最新)のimageがデフォルトでダウンロードされる。
> docker container run -it --name my-ubuntu ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
9c704ecd0c69: Pull complete
Digest: sha256:2e863c44b718727c860746568e1d54afd13b2fa71b160f5cd9058fc436217b30
Status: Downloaded newer image for ubuntu:latest
0afba27e4d922bcd2c64dcf5ebad78e18a3113a526a8dd868a1dc5e5ce646cb4
コマンドの説明
docker container run -it –name {コンテナの名前} {image名:tag}
cntainer:コンテナ操作に関するサブコマンド
run:コンテナを作成し実行するサブコマンド
-it:コンテナへの接続、入力を受け付ける
–name:コンテナの名前を指定。省略すると、適当な名前が割り当てられる。
image名やどのようなtagが存在するかはDockerHub公式を確認してほしい。
中にはlatestが存在せず、必ずtagの指定が必要になるimageもあるので注意が必要だ。
docker image
docker container run コマンド実行時、ローカルにはコンテナを作成した時に使用されるimageファイルがダウンロードされている。
以下のコマンドで、ダウンロードされたimageの一覧を確認する。
※先に説明したdocker container run コマンド実行後のターミナルは、立ち上げたコンテナに接続された状態になっているので、確認したい場合は別のPowerShellウィンドウを開く必要あり。
> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 35a88802559d 3 weeks ago 78.1MB
先に、
docker image pull ubuntu
コマンドでimageをローカルにダウンロードしてからcontainer runでコンテナを作成してもよいが、公式のimageをそのまま使うのであれば問題無し。
コンテナの中を確認
> docker container run -it --name my-ubuntu ubuntu
このコマンドを実行した直後、起動したコンテナのOSにアクセスしている状態になっている。
OSのコマンドを普通に使えるので、作成されたOS情報を確認してみよう。
# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
CentOS
CentOSの最新であったCentOS Linux 7も2024年6月30日にサポートが終了するため使う人は少ないと思うが、内輪だけで使っているようなシステムではOSアップデートせず使い続けるケースも(残念ながら)ありうるため、コマンドの確認程度には使えそう。
※CentOS6.台はimageが存在するものの、コンテナの立ち上げには一癖あるため、今回紹介しているコマンドでは実行不可となる。
> docker container run -it --name my-centos7 centos:centos7
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
[root@03635a2ad065 /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
RockyLinux
CentOS8の後継となるOS。
> docker container run -it --name my-rockylinux9 rockylinux:9.3
Unable to find image 'rockylinux:9.3' locally
9.3: Pulling from library/rockylinux
446f83f14b23: Pull complete
Digest: sha256:d7be1c094cc5845ee815d4632fe377514ee6ebcf8efaed6892889657e5ddaaa6
Status: Downloaded newer image for rockylinux:9.3
[root@282d0f3d60a0 /]# cat /etc/redhat-release
Rocky Linux release 9.3 (Blue Onyx)
コマンドの確認や学習について
この環境で基本的なコマンドの実行確認や学習が可能となる。
ただし、最低限のコマンドしかインストールされていないため、実行できないコマンドについては個別に適宜インストールしてやる必要がある。
例えばubuntuではcurlやvimが、RockyLinuxではwhichが入っていなかったりする。(ほんの一例)
ubuntuであれば apt update 、RockyLinuxであれば yum update を実行してから、欲しいコマンドをインストールする。
とはいえ初学者の学習には十分の環境といえるだろう。
LPIC1レベルのところでいうと、
Q:「DATE=`date`」というコマンドを実行した。
$ echo \(←バックスラッシュ)”$DATE\(←バックスラッシュ)”
の実行結果として得られる出力は何か?
答えは是非この環境で実行して試してほしい。
コンテナの一覧と再接続
作成したコンテナの一覧を確認するコマンドはこちら。
> docker container ls -a
-a オプションをつければ、停止したコンテナを含む全てのコンテナを一覧で表示する。
つけなければ起動中のコンテナだけ表示される。
先ほどまで作成・接続したコンテナから exit コマンドでbashを終了すると、コンテナは停止状態に推移する。これは、コンテナが実行するよう指定したコマンドが終了すると、コンテナ自体も停止する仕様になっているためだ。
> docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6725ffd157b3 rockylinux:9.3 "/bin/bash" 21 minutes ago Exited (0) 26 seconds ago my-rockylinux9
このコンテナに再度接続したい場合は、再起動して再接続してやればいい。
↓こんな感じ
> docker container restart my-rockylinux9
my-rockylinux9
> docker container exec -it my-rockylinux9 bash
[root@6725ffd157b3 /]#
コンテナの停止と削除
不要になったコンテナを削除する場合、もしコンテナが起動しているのであれば停止させる必要がある。
↓こんな感じ
> docker container stop my-rockylinux9
my-rockylinux9
> docker container rm my-rockylinux9
my-rockylinux9
ただ、いちいち停止させるのが面倒であれば、-f オプションで強制的に削除も可能。
> docker container rm -f my-ubuntu
my-ubuntu
おわり
複数コンテナを立ち上げれば、疑似サーバとして接続・動作の確認も可能となる。
外部ディスク的な扱いのVolume作成や、ネットワークを分けてみたり、DBコンテナを立ち上げて接続することも可能。
また試したら別記事で備忘を残す予定。