💭

docker run はすげぇよって話

2022/11/07に公開約3,800字

image の取得、コンテナの生成、起動、接続、これらを1つのコマンドで実行する方法。

例えば、
Ubuntu20.04 イメージを pull して接続 までしたいとなった場合、工程はこんな感じ。

・イメージのダウンロード docker pull [イメージ名]
・コンテナを生成 docker create [コンテナ名]
・コンテナ起動 docker start [コンテナ名]
・接続 docker container attach(稼働中のコンテナに接続)

これをそれぞれやるのは少々めんどくさいので、「一括でやろう」となった場合に活躍するのが、docker run です。

docker run を使うと1行で解決します。

Ubuntu20.04 イメージ取得⇒コンテナの生成⇒起動⇒接続まで

(名前は、abc-ubuntu とする)

コマンド

docker run --name abc-ubuntu -it ubuntu:20.04

実行結果

[root@localhost test-vm]# docker run --name abc-ubuntu -it ubuntu:20.04
Unable to find image 'ubuntu:20.04' locally
Trying to pull repository docker.io/library/ubuntu ... 
20.04: Pulling from docker.io/library/ubuntu
eaead16dc43b: Pull complete 
Digest: sha256:450e066588f42ebe1551f3b1a535034b6aa46cd936fe7f2c6b0d72997ec61dbd
Status: Downloaded newer image for docker.io/ubuntu:20.04
root@5bc68b0cd7f3:/# 

ls コマンドで動作確認

root@5bc68b0cd7f3:/# ls -l
total 0
lrwxrwxrwx.   1 root root   7 Oct 19 16:47 bin -> usr/bin
drwxr-xr-x.   2 root root   6 Apr 15  2020 boot
drwxr-xr-x.   5 root root 360 Nov  6 21:02 dev
drwxr-xr-x.   1 root root  66 Nov  6 21:02 etc
drwxr-xr-x.   2 root root   6 Apr 15  2020 home
lrwxrwxrwx.   1 root root   7 Oct 19 16:47 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Oct 19 16:47 lib32 -> usr/lib32
lrwxrwxrwx.   1 root root   9 Oct 19 16:47 lib64 -> usr/lib64
lrwxrwxrwx.   1 root root  10 Oct 19 16:47 libx32 -> usr/libx32
drwxr-xr-x.   2 root root   6 Oct 19 16:47 media
drwxr-xr-x.   2 root root   6 Oct 19 16:47 mnt
drwxr-xr-x.   2 root root   6 Oct 19 16:47 opt
dr-xr-xr-x. 138 root root   0 Nov  6 21:02 proc
drwx------.   2 root root  37 Oct 19 16:50 root
drwxr-xr-x.   1 root root  21 Nov  6 21:02 run
lrwxrwxrwx.   1 root root   8 Oct 19 16:47 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Oct 19 16:47 srv
dr-xr-xr-x.  13 root root   0 Nov  6 02:25 sys
drwxrwxrwt.   2 root root   6 Oct 19 16:50 tmp
drwxr-xr-x.  13 root root 145 Oct 19 16:47 usr
drwxr-xr-x.  11 root root 139 Oct 19 16:50 var
root@5bc68b0cd7f3:/#

これだけ!簡単すぎる。

次に、「docker上にwebサーバを構築してポート番号を割り当ててブラウザで Welcome ページを表示したい」 となった場合。これも1つのコマンドで実行可能。

anginx イメージを取得⇒コンテナの生成⇒起動⇒80ポートに割り当てる。

(名前は、abc-nginx とする)

[root@localhost test-vm]# docker run --name abc-nginx -it -d -p 80:80 nginx
Unable to find image 'nginx:latest' locally
Trying to pull repository docker.io/library/nginx ... 
latest: Pulling from docker.io/library/nginx
e9995326b091: Pull complete 
71689475aec2: Pull complete 
f88a23025338: Pull complete 
0df440342e26: Pull complete 
eef26ceb3309: Pull complete 
8e3ed6a9e43a: Pull complete 
Digest: sha256:943c25b4b66b332184d5ba6bb18234273551593016c0e0ae906bab111548239f
Status: Downloaded newer image for docker.io/nginx:latest
ccbbdfb9bd819f48d1078dc3958a1527c8dcd1bf6310020b4ec2537ca3ab707a
[root@localhost test-vm]# 

ブラウザを立ち上げ、「localhost:80」と検索。「it works!」と表示されれば成功

もちろん、イメージにも入っているし、コンテナ上で動いてもいる。

[root@localhost test-vm]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              76c69feac34e        12 days ago         142 MB
[root@localhost test-vm]#
[root@localhost test-vm]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
ccbbdfb9bd81        nginx               "/docker-entrypoin..."   56 seconds ago      Up 52 seconds       0.0.0.0:80->80/tcp   abc-nginx
[root@localhost test-vm]#

まとめ


docker run 優秀すぎ。
docker pull して docker create して docker start docker container attach して~
みたいなのが、docker run で一括で出来るので、非常に楽です。
知らなかった!って人はぜひ試してみてください!

ここまで見ていただきありがとうございました!

Discussion

ログインするとコメントできます