brand new note

ジャズ屋が技術の話をするところ

ubuntuにdockerをインストール

前回: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

 529 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."
 529 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