brand new note

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

ubuntuにdockerをインストール - 2

前回:ubuntuにdockerをインストール - brand new note

先日半分までやってみて後半をやっていなかったのでやりながらメモ。

Ubuntu 20.04へのDockerのインストールおよび使用方法 | DigitalOcean

参考はこれ。まず前回作ったubuntuのコンテナイメージにログイン。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker run -it ubuntu
root@b2421f52ba91:/# 

アプリケーションのインストール

ここでは例としてnodejsをインストールしてる。
何に使うんですかと言われると困る。

root@b2421f52ba91:/# apt install nodejs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package nodejs
root@b2421f52ba91:/# sudo apt update
bash: sudo: command not found
root@b2421f52ba91:/# 

あれ?コンテナはsudoないんだね。いらないねよく考えたら

root@b2421f52ba91:/# apt update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:3 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [297 kB]
root@b2421f52ba91:/# apt install nodejs

これで入った。途中でタイムゾーンを聞かれたのでtokyoとした。
バージョンを確認する。

root@b2421f52ba91:/# node -v           
v10.19.0

コンテナの管理

ログアウト。docker psで実行中のコンテナイメージが確認できる。

root@b2421f52ba91:/# exit
exit
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

普通にexitするとコンテナはシャットダウンするようになってるのでここではなにも出力されてない。-aを追加すると未実行のコンテナイメージも含めてイメージの状態を確認できる。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
83ef15493b01   ubuntu        "/bin/bash"   10 seconds ago   Exited (0) 4 seconds ago              exciting_einstein
b2421f52ba91   ubuntu        "/bin/bash"   22 minutes ago   Exited (0) 8 minutes ago              nifty_wright
e09ccc2414db   ubuntu        "/bin/bash"   29 minutes ago   Exited (0) 29 minutes ago             admiring_sanderson
6d9d8508a9ca   ubuntu        "/bin/bash"   30 minutes ago   Exited (0) 30 minutes ago             charming_swartz
5f9574e596e0   ubuntu        "/bin/bash"   30 minutes ago   Exited (0) 30 minutes ago             admiring_chaplygin
ca738446dafa   ubuntu        "/bin/bash"   6 days ago       Exited (127) 6 days ago               epic_feynman
63ab6e895499   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 recursing_ramanujan
937c1efdf209   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 confident_wu
ab2f5e6adf0e   hello-world   "/hello"      6 days ago       Exited (0) 6 days ago                 flamboyant_mclaren

今気がついたんだけどrunはイメージを新規作成するコマンドなのでubuntuが大量生成されていた。同じものを指定して再利用するには二回目以降で別のコマンドを使わなきゃいけない。凡ミス。

さっきnodejsを入れたコンテナイメージを指定して立ち上げる。docker start。確認するとログインはできていないが立ち上がりはしている。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker start b2421f52ba91
b2421f52ba91
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b2421f52ba91   ubuntu    "/bin/bash"   27 minutes ago   Up 28 seconds             nifty_wright

ログインにはdocker execを使うようだ。さっきnodejsを入れたイメージを指定して本当に当該イメージに入れているか確認する。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker exec -it b2421f52ba91 /bin/bash
root@b2421f52ba91:/# node -v           
v10.19.0

よさそうなので今度は立ち上がっているイメージを落とすdocker stopを試す。のだが、このままexitするとそのタイミングで落ちてしまうのでデタッチをする。

Dockerのコンテナにログインする際は例えば以下のように実行します。 このあと、 ctrl + d で抜けるとコンテナは終了してしまいます。 コンテナを終了せずにログアウト(デタッチ)するには ctrl + p + ctrl + q を実行します。

root@b2421f52ba91:/# read escape sequence
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ [1]> 

これでいいはず。落ちていないことを確認。

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b2421f52ba91   ubuntu    "/bin/bash"   41 minutes ago   Up 14 minutes             nifty_wright

ここからdocker stop

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker stop b2421f52ba91
b2421f52ba91
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

大丈夫そうだね。

作ったイメージを削除するにはdocker rm

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker rm b2421f52ba91
b2421f52ba91
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
83ef15493b01   ubuntu        "/bin/bash"   21 minutes ago   Exited (0) 21 minutes ago             exciting_einstein
e09ccc2414db   ubuntu        "/bin/bash"   51 minutes ago   Exited (0) 51 minutes ago             admiring_sanderson
6d9d8508a9ca   ubuntu        "/bin/bash"   51 minutes ago   Exited (0) 51 minutes ago             charming_swartz
5f9574e596e0   ubuntu        "/bin/bash"   51 minutes ago   Exited (0) 51 minutes ago             admiring_chaplygin
ca738446dafa   ubuntu        "/bin/bash"   6 days ago       Exited (127) 6 days ago               epic_feynman
63ab6e895499   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 recursing_ramanujan
937c1efdf209   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 confident_wu
ab2f5e6adf0e   hello-world   "/hello"      6 days ago       Exited (0) 6 days ago                 flamboyant_mclaren

これでnodejsを入れたb2421f52ba91が削除された。

コンテナ内の変更をセーブして新しいイメージを作る

前回いろんなイメージの中から選択して好きなイメージをダウンロードしたけど、逆も可能で、自分が変更を加えたイメージを新たなイメージとして新規生成してdockerhubにアップロードすることもできる。まずdocker commitコマンドを使う。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker commit -m "ekp commit" -a "ekp" 83ef15493b01 spsyk103/new_ubuntu
sha256:1551dcbc8d23045ea00b00d33c5e109ea85f538f5691fbaaaaccbe9950a4560b

-mはメッセージで-aはauthor、作者。ここは任意だと思う。イメージのidと新しい名前を書いて、docker imagesで新しいイメージが手元に作成できたか確認する。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
spsyk103/new_ubuntu   latest    1551dcbc8d23   2 minutes ago   72.7MB
ubuntu                latest    7e0aa2d69a15   5 weeks ago     72.7MB
hello-world           latest    d1165f221234   3 months ago    13.3kB

dockerhubに作ったイメージをアップロード

これをアップロードしてみる。dockerhubはgithubみたいなもので、個人アカウントを作って自分で作ったイメージをインターネット上に保存して管理できる。ログインをした後docker pushを使う。その後、少し待つ。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker login -u spsyk103
Password: 
WARNING! Your password will be stored unencrypted in /home/ekp/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker push spsyk103/new_ubuntu
Using default tag: latest
The push refers to repository [docker.io/spsyk103/new_ubuntu]
0ea9b9f8f036: Pushed 
2f140462f3bc: Mounted from library/ubuntu 
63c99163f472: Mounted from library/ubuntu 
ccdbb80308cc: Mounted from library/ubuntu 
latest: digest: sha256:1f9dfa9100dba94515b4c030beb98cee2b78a552647cee1fc230f57e4b604f6e size: 1150

※dockerhubアカウントの開設は割愛します。簡単なのでこの辺を見てください。

Docker Hub アカウントとリポジトリの作成 — Docker-docs-ja 1.13.RC ドキュメント

自分のdockerhubにアップロードできたことを確認。

f:id:frazz:20210605012417p:plain

以上

今回はここまでです。おつかれさまでした!