前回:dockerのバインドマウント時のエラー - brand new note
udemyを見ながらものすごい時間をかけてwindowsのPCにdockerをインストールして基礎をやっていたんだけど、GUIがあるといまいちどれが大事なのかわからないとか、一回やっただけじゃ覚えてないよねとか、ubuntuのマシン上でも同じようにいじれたら楽しいよねとか、結果あんまり情報見なくてもコンテナ扱えるようになるんじゃないのとか、そういう動機でやった。相手は誰でも良かった。
Ubuntu 20.04へのDockerのインストールおよび使用方法 | DigitalOcean
これを見ながら同じことしているだけ。頭痛くしながら動画を見て学んだ後だと、このページが如何にきれいに内容を圧縮しているかがよくわかる。すばらしいまとめだとおもいます。たぶんここに書いてないことは一旦大事じゃないことだと思って気にしないで心を軽くしておいたほうがいいのかもしれない。本当は公式ドキュメントとかね、読めるといいんだけどね…5回目くらいで参照しようかな…
http://docs.docker.jp/index.html
こうなると多分あとは回数こなして覚えるのがよいので、最初から全部読むんじゃなくて、何をやってるかの流れを理解できるところだけ理解して、そこそこのところまでやって、壊して、2回目をやって、1回目でわからなかったところを補強して覚えてく、みたいな感じでやればいいのかもしれない。
というわけでメモは適当ですが、勘所をおさえるような書き方をしたつもり。
dockerインストール
下準備としてパッケージのリストを更新しておく(任意)
sudo apt update
apt install docker
で入ると思ったけどそんな安直じゃなかった。ちょっと準備がいる。
dockerはコンテナイメージのテンプレみたいなやつをネット上から落として自分の環境をローカルでカスタムして遊ぶ使い方がメインになっているので、aptがhttps経由で使えるようにしておかないと動作しない(と今は解釈している)。そういうパッケージを入れる。
sudo apt install apt-transport-https ca-certificates curl software-properties-common
公式dockerリポジトリ(aptしてソフトウェアをローカルに落としてくるための宛先)を登録するためにGPGキーをダウンロードしてローカルに登録する。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
GPGキーってなんだっていう話はここを見てください。
GPGについて学んだことを整理してみる - Qiita
今の所twitterの公式アカウントの認証マークみたいなものだと思っている。あると安心というか。仕組みはたぶん使ってれば覚えるのでまだ深堀りはしない。
sources.listにリポジトリのURLを追加する。別にファイルに手書きしなくてもコマンドから追加ができることをここで知る。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
再度パッケージリストを更新しておく。これはなんでかわかりますよね?
sudo apt update
ubuntuのデフォのリポジトリからじゃなくて本当にdockerのリポジトリからDLしてるんですか??という確認がしたければこれを打つ。
apt-cache policy docker-ce
あーそうなんだーと思えればそれでOK。
ここでdockerをインストール。
sudo apt install docker-ce
ceっていうのはコミュニティエディションのこと。エンタープライズエディションもある(ee)。一般市民はceでだいじょうぶ。
sudo systemctl status docker
起動していることを確認。
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-05-29 14:12:30 JST; 1h 1min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 10012 (dockerd)
Tasks: 14
Memory: 148.1M
CGroup: /system.slice/docker.service
└─10012 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
5月 29 14:12:29 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:12:29.521127697+09:00" level=info msg="Loading containers: start."
5月 29 14:12:29 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:12:29.887873134+09:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option>
5月 29 14:12:30 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:12:30.091194153+09:00" level=info msg="Loading containers: done."
5月 29 14:12:30 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:12:30.158930938+09:00" level=info msg="Docker daemon" commit=8728dd2 graphdriver(s)=overlay2 version=20.10.6
5月 29 14:12:30 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:12:30.159126637+09:00" level=info msg="Daemon has completed initialization"
5月 29 14:12:30 ekp-ThinkPad-X1-Carbon-3rd systemd[1]: Started Docker Application Container Engine.
5月 29 14:12:30 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:12:30.355188471+09:00" level=info msg="API listen on /run/docker.sock"
5月 29 14:17:36 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:17:36.173564183+09:00" level=info msg="ignoring event" container=ab2f5e6adf0e8c096a3767585e774482ab2c262318f445e347471f2f6d>
5月 29 14:21:00 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T14:21:00.229592870+09:00" level=info msg="ignoring event" container=937c1efdf209c7c764aaa09db01df5cd8511cbd5c8543cbe4551495602>
5月 29 15:13:41 ekp-ThinkPad-X1-Carbon-3rd dockerd[10012]: time="2021-05-29T15:13:41.321834203+09:00" level=info msg="ignoring event" container=63ab6e89549918b16f6c56be87bedb121d5e1394398718b85d9243d3f5>
dockerイメージインストール〜ログイン
ここまでやったら一連のdockerコマンドを使えるようになってる。何が使えるかはこれで確認。
docker
あとはなにができんのかなとか言いながら公式ドキュメント調べるとかすればいいとおもう。適宜。
dockerのシステム全体の情報はこれで確認。
docker info
ekp@ekp-ThinkPad-X1-Carbon-3rd ~> docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
scan: Docker Scan (Docker Inc., v0.7.0)
Server:
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 2
Server Version: 20.10.6
Storage Driver: overlay2
Backing Filesystem: extfs
…以下略
dockerコンテナは様々なdockerイメージを使用することができる。コンテナがモンスターボールだったらイメージはポケモンなんですよ。そうすっと僕なんかはずっと山行って虫取りしちゃうんです(養老孟司)
docker run hello-world
run
コマンドはイメージを新規作成および起動させるコマンドで、ローカルになければdockerhub(インターネット上)から取ってくる。hello-worldイメージは最初に動作確認するためには最適なイメージなのでだいたいこれ入れる。
docker search ubuntu
ubuntuのコンテナ使いたいんだけどなんかある?ってdockerhubに聞きに行ってみる。ubuntu上でubuntuのコンテナを動かす意味があるのか。
ekp@ekp-ThinkPad-X1-Carbon-3rd ~> docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 12302 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 535 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 273 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 251 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 240 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 110 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
open-liberty Open Liberty multi-architecture images based… 45 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 44 [OK]
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 25
1and1internet/ubuntu-16-apache-php-5.6 ubuntu-16-apache-php-5.6 14 [OK]
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 11 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 9 [OK]
1and1internet/ubuntu-16-nginx-php-5.6 ubuntu-16-nginx-php-5.6 8 [OK]
1and1internet/ubuntu-16-apache-php-7.1 ubuntu-16-apache-php-7.1 7 [OK]
1and1internet/ubuntu-16-nginx-php-7.0 ubuntu-16-nginx-php-7.0 4 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 4
1and1internet/ubuntu-16-nginx-php-7.1-wordpress-4 ubuntu-16-nginx-php-7.1-wordpress-4 3 [OK]
pivotaldata/ubuntu16.04-build Ubuntu 16.04 image for GPDB compilation 2
1and1internet/ubuntu-16-php-7.1 ubuntu-16-php-7.1 1 [OK]
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 1
smartentry/ubuntu ubuntu with smartentry 1 [OK]
pivotaldata/ubuntu16.04-test Ubuntu 16.04 image for GPDB testing 0
いっぱいある。好きなイメージをえらぶんじゃ
プレーンなやつにしよう。ダウンロードはpull
コマンド。
docker pull ubuntu
ここまでやるとふたつイメージがダウンロードできたことが確認できる。images
コマンド。
docker images
ekp@ekp-ThinkPad-X1-Carbon-3rd ~> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7e0aa2d69a15 5 weeks ago 72.7MB
hello-world latest d1165f221234 2 months ago 13.3kB
ubuntuに入ってみる。起動のrun
コマンドに-itオプションをつけると対話シェルを取ってこれるので、これをログイン操作としている。
docker run -it ubuntu
ekp@ekp-ThinkPad-X1-Carbon-3rd ~> docker run -it ubuntu
root@ca738446dafa:/#
※あとで気づきましたが毎回run
すると同じubuntu
イメージが毎回新規作成されます。idが違うのを見落としてました。run
ではなくexec
を使いましょう。
rootでログインされるのがデフォなのでユーザ作成からは各自好きなようにやってください。イメージはidで識別できるので最初のホスト名はidになってる。
以上
今回はここまで。リンク後半の内容は以下からどうぞ。
次回:ubuntuにdockerをインストール - 2 - brand new note