Docker.io 関連のメモ
-
RESTful APIを通してメッセージを送ることでコンテナーを操作する.
- 付属の標準コマンドは
docker
- RESTful API で送受信できるアプリならどれでも使えるけど,まぁ,端末から操作する場合には特に他のアプリを用意する必要もないので(もちろんWeb上にコンテナーを操作できる Web UI を構築してクラウドサービスを開業したいとかだと話は別).
- 付属の標準コマンドは
- コンテナーイメージは
docker image pull
でダウンロードしてくる(今は作らなくてもたいてい必要なものが存在している).
インストール・設定
図1 Docker container runtime by Canonical |
$ sudo apt install -y docker.io
参考
ubuntuでは以前「docker」という
MacのDock(Windowsでいう何でしたっけ?スタートボタンとかが配置されてるバーみたいなヤツ)のような機能を提供するソフトが存在していて「docker」という名前をとってしまっていました.そのため,いわゆるDockerは「docker.io」という名前になっています.
実は今は(少なくとも 24.04 LTS時点では) ubuntu のリリース元 Canonical 社製の「Docker container runtime」(図1)という Docker 関連のソフトウェアが「docker」という名前をとっていて,けっこう人気もあるし,一般ユーザーも使えたり操作が簡単だったり,なかなかイケてるコンセプトで作られている・そして人気もあるみたいなのですが,とりあえず本物の Docker ではないので今のところ本家 docker.io を使っておくのがよいと思われます.
インストールが完了すると自動で dockerd
が起動しているはず.
初期状態では dockerd が待ち受けているソケットが root ユーザーか docker グループに入っているユーザーのみしか書き込みできないようになっているので 毎回 sudo docker とするか(rootユーザーとして使うか),自分を docker グループに入れておくかする.
$ ls -l /var/run/docker.sock srw-rw---- 1 root docker 0 Nov 23 16:42 /var/run/docker.sock
毎回 sudo するのも面倒なので自分を docker グループにいれて newgrp で所属グループを変更してから使うのが便利.
$ sudo gpasswd -a hatai docker Adding user hatai to group docker $ newgrp - docker $ docker version Client: Version: 24.0.7 API version: 1.43 Go version: go1.22.2 Git commit: 24.0.7-0ubuntu4.1 Built: Fri Aug 9 02:33:20 2024 OS/Arch: linux/amd64 Context: default Server: Engine: Version: 24.0.7 API version: 1.43 (minimum version 1.12) ...
参考
実は一般ユーザーでも docker version コマンドは実行できてクライアント(つまりdockerコマンド自身)のバージョン番号などは上記と同様に表示されるのですけど,サーバー部分ではソケットのアクセス権がないため「permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock」のようなエラーがでてしまいます.
実行
え? いきなり実行?…と思うかもですが,大丈夫です. もう今(2024年時点)はコンテナー作るとかそんなややこしい話はいっさいないんスよ.ほしいものは既に何でもそろってますから. みなさんだって今どき *.deb とか *.rpm とか自分で作らないでしょ? もうどこかの誰かが作ってくれてるんです(ありがとうございます!)
から好きなものを探して(検索して)ダウンロードして実行してください.…といいつつ,探し方とダウンロード方法の説明に続きます.
Docker イメージの取得
とりあえず初期状態では下記のようにローカルにはコンテナーイメージがない状態になっています(当然).
$ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE
「ダウンロード」といっても通常のアプリのようにDocker HubのWebページにいって「ダウンロード」ボタンを押したら *.zip ファイルが落ちてきて…とかではありません. 下記のように docker image pull コマンドを使ってダウンロードします(ゆえに「ダウンロード」ではなく「イメージをプルする」とか言ってる人が多いように思います).
$ docker image pull ubuntu:24.10 24.10: Pulling from library/ubuntu 372111cb3b6e: Pull complete Digest: sha256:eea047b4b181f2d3aeafbc0ce5294a2bbb3b98153a68b9ed4bc573d871ca9450 Status: Downloaded newer image for ubuntu:24.10 docker.io/library/ubuntu:24.10
ここでちょいマッテとなるのが,上のコマンドの「ubuntu:24.10」の部分.字面から ubuntu 24.10 をダウロードする意味なのは想像できるとしても,自分がほしいコンテナーイメージの正確な名称・文字列はどうやってわかるんや?ってなりますよね.
そこでDocker Hubの登場です. Docker Hub でほしいソフトウェアを検索して詳細ページに行くと下記のような「タグ」(tags)というのがわかります. このイメージ名とタグを「:」でつないで指定すればOKです.(タグはない場合もあって,その場合はイメージ名だけでOK.下記のように複数ある場合はわかりやすいように別名をつけているだけなのでどれを指定してもOKです.)
ダウンロードが終わったら docker image list でダウンロード済みのコンテナーイメージが表示されるようになります.
$ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 24.10 bf21d82156ce 6 weeks ago 80.1MB
コンテナーの起動
コンテナーの起動は docker container run
です.そのまんまですね…といいつつ,コンテナーの「起動(run)」というのは正確には「イメージから新しいコンテナーを作成して起動する」という意味というのは知っておく必要があります.
run とはちがう start(stop しておいたコンテナーを再開する)というのもあるので….
それはさておき,今回はOSそのものまるごとのコンテナーイメージ(ubuntu:24.10)を落としてきたので,代表的なコマンドとして
bash を起動する例を示します.
-t
はターミナルを起動する,-i
は対話的に使用する(interactive)の意味です.
$ docker container run -t -i ubuntu:24.10 /bin/bash root@cd0909a8004a:/#
これで普通にコマンドラインの ubuntu 24.10 が使えるようになったと思います.ただ,コンテナー内でファイルを作ったりしてもコンテナーを削除すると消えてしまうことに注意しておいてください(まぁ当然なんですけど). なので,コンテナー内で作成したデータを永続化したい場合は,外部のDBやファイルサーバーに記録するとか,ホストOS側から共有フォルダーをだしてもらってそこを読み書きするなどの工夫が必要です.
ホストOS側から docker container ls すると実行状態が見れます(container run したターミナルはコンテナー自体の bash との対話に占領されていると思うので別のターミナルを起動して実行してください…以下同様).
$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd0909a8004a ubuntu:24.10 "/bin/bash" 13 minutes ago Up 13 minutes jolly_greider
ここで大事なのが CONTAINER ID で,コンテナーの実行を止めたり(stop)・再開(start)したりする場合に指定します.
$ docker container stop cd0909a8004a cd0909a8004a $ docker container ls ※停止(stop)しているコンテナーは表示されません. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $ docker container ls -a ※停止しているコンテナーも表示対象になります. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd0909a8004a ubuntu:24.10 "/bin/bash" 29 minutes ago Exited (137) 27 seconds ago jolly_greider $ docker container start cd0909a8004a ※あ,startしたけど対話モード(-i)指定忘れてたのでコマンド打てないわ (^_^;) cd0909a8004a $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd0909a8004a ubuntu:24.10 "/bin/bash" 30 minutes ago Up 6 seconds jolly_greider $ docker container stop cd0909a8004a ※なのでいったん再度stop. cd0909a8004a $ docker container start -i cd0909a8004a ※今度は -i つけて start root@cd0909a8004a:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
以下,再度コンテナーを停止(stop)して削除(rm)しておきます(ここで rm するのは あくまで「コンテナー」であって「コンテナーイメージ」ではないことに注意).
$ docker container stop cd0909a8004a cd0909a8004a $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd0909a8004a ubuntu:24.10 "/bin/bash" 42 minutes ago Exited (137) 10 seconds ago jolly_greider $ docker container rm cd0909a8004 cd0909a8004
独自コンテナーイメージの作成
また今度ね.