2022-12-03に更新

Docker練習メモ

Docklerのダウンロード

# yum -y install docker


# 1.Dockerコマンドの基礎
## 1-1.imageの管理
### imageのダウンロード

[opc@publicpc1 ~]$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
214ca5fb9032: Pull complete
f0156b83954c: Pull complete
5c4340f87b72: Pull complete
9de84a6a72f5: Pull complete
63f91b232fe3: Pull complete
860d24db679a: Pull complete
Digest: sha256:2c72b42c3679c1c819d46296c4e79e69b2616fa28bea92e61d358980e18c9751
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest


### ローカルにあるdockerイメージの一覧を表示

[opc@publicpc1 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7425d3a7c478 4 days ago 141MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
```

[opc@publicpc1 ~]$ docker history nginx
IMAGE          CREATED      CREATED BY                                      SIZE      COMMENT
7425d3a7c478   4 days ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
      4 days ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
      4 days ago   /bin/sh -c #(nop)  EXPOSE 80                    0B
      4 days ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
      4 days ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB
      4 days ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB
      4 days ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB
      4 days ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB
      4 days ago   /bin/sh -c set -x     && addgroup --system -…   61.1MB
      4 days ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~bullseye   0B
      4 days ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.7.2        0B
      4 days ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.21.6     0B
      4 days ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
      4 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
      4 days ago   /bin/sh -c #(nop) ADD file:4a0bb88956083aa56…   80.4MB

ローカルにあるイメージの削除

[opc@publicpc1 ~]$ docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:2c72b42c3679c1c819d46296c4e79e69b2616fa28bea92e61d358980e18c9751
Deleted: sha256:7425d3a7c478efbeb75f0937060117343a9a510f72f5f7ad9f14b1501a36940c
Deleted: sha256:c263493a5dc62ebefab0486e0019affdd5f663aad79cb5cf67f1ef21b2aba3c4
Deleted: sha256:c0a19d1cdcd1bebfd81765ad4971708d177b06a1cb0eaf0bb721745fd8d7f055
Deleted: sha256:c953b0422ec13844d8700eaf0159a800fba90fa6321f6ce1adc57f7f8566a0f1
Deleted: sha256:f121c2b08c669e9bb8e37bdc4ca0f32047d1b37f3ca3e3e302d9d1350301ad0b
Deleted: sha256:138bdf299d05c844ac8833a0a2227499678214d264c3f6dde62cd4c9fb134932
Deleted: sha256:fd95118eade99a75b949f634a0994e0f0732ff18c2573fabdfc8d4f95b092f0e

1-2.コンテナの操作

dockerの起動

docker run <イメージ名> [:タグ名] コマンド

# docker run centos:6 cat /etc/redhat-release
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CentOS release 6.10 (Final)

そのほかにも、nginxというコンテナ名で起動。その場合は「--name」オプションをつける。

[opc@publicpc1 ~]$ docker run --publish 80:80 --name nginx nginx
#--publishは「-p」でもよい。
#80:80は、ホスト側のポートが80で、コンテナ側が80ということ
#host側はなんでもよい
#nginはデフォルトで80番ポートをオープンにしている

バックグラウンドで起動したい場合は以下
detachすることでターミナルからコンテナプロセスから切断することでアウトプットが返ってこなくなる。

docker run -p 80:80 --detach nginx

起動中のコンテナ一覧

[opc@publicpc1 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
af082867c083   nginx     "/docker-entrypoint.…"   33 seconds ago   Up 31 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx

動作終了したコンテナも含めて表示する場合は「-a」おオプションをつける。

コンテナの停止

docker stop <コンテナid>

停止したコンテナも含めてコンテナの一覧を表示したい場合は

[opc@publicpc1 ~]$ docker ps -all
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                     PORTS     NAMES
af082867c083   nginx     "/docker-entrypoint.…"   5 minutes ago   Exited (0) 6 seconds ago             nginx
[opc@publicpc1 ~]$

コンテナの削除

[opc@publicpc1 ~]$ docker rm <コンテナid>

dockerのコンテナ内のシェルを操作

$ docker exec --interractive --tty <コンテナid> bash

でコンテナ内のシェルの中に入ることができる。
bashじゃなくてもshでもよい。
--interractive--ttyをまとめて-itと表記してもよい。

[opc@publicpc1 ~]$ docker exec -it c7822718378e bash
root@c7822718378e:/# pwd
/
root@c7822718378e:/# whoami
root
root@c7822718378e:/# cd /home/
/home
root@c7822718378e:~# exit
exit

下記で、CentOS6のコンテナ内のシェルでコマンドを実行。

# docker run -it --name centosA centos:6 /bin/bash

コンテナから一時的に抜けるには、[Ctrl+P]+[Ctrl+Q]を実行する。この状態ではバックグラウンドではコンテナが実行中なので
再接続するためには、 docker attach

# docker attach centosA1
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
[root@b6067546d2da /]#

コンテナを抜けて終了するためにはexitする。

[root@b6067546d2da /]# exit
exit

[root@webpractice ~]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

コンテナの再開には「docker start コンテナ名またはコンテナID」を実行する。

1-3.コンテナイメージの作成

まずは上書きしたいコンテナを調べる

[root@publicpc1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED      STATUS      PORTS                               NAMES
c7822718378e   nginx     "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:80->80/tcp, :::80->80/tcp   modest_bassi

続いて、上書きしたいコンテナの中に入ってindex.htmlファイルを上書く。

[root@publicpc1 ~]# docker exec -it c7822718378e bash
root@c7822718378e:/# echo "Hello Taro">/usr/share/nginx/html/index.html
root@c7822718378e:/# exit
exit

上書きしたコンテナを新規にイメージを作成

[root@publicpc1 ~]# docker commit c7822718378e hello_Taro
sha256:ddb0b29808eb56539258060046bf06fdd12587a0057648f8d0714a4e40c11643

上書きした元のコンテナを停止。

[root@publicpc1 ~]# docker stop c7822718378e
c7822718378e

新規に作成したイメージからコンテナを起動。
注意点として、ローカル側のポートは使われていないポートにすること。
今回は8080番ポートを使用する。

[root@publicpc1 ~]# docker run -p 8080:80 -d --name hello_Taro hello_Taro
0931b542971f319c69eff05962efd69618a147064520b59396596f38df85b786

ちゃんと接続できる確認。

[root@publicpc1 ~]# curl localhost:8080
Hello Taro

できました。

ツイッターでシェア
みんなに共有、忘れないようにメモ

kawai_mizugorou

社会人2年目.自分用のメモとして使ってます.

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント