LoginSignup
0
1

More than 1 year has passed since last update.

Dockerの実験(その1:コンテナの作成)

Last updated at Posted at 2023-02-17

Google Cloud の Compute Engine で、Container optimized-os を選ぶ。
コンソールから、CLOUD SHELL Terminal をクリックする。
承認をクリックする。

$ gcloud compute ssh --project <プロジェクト名> --zone asia-northeast1-b docker-test

鍵を作成するとの表示になったら、y を押下する。

docker バイナリを確認する。

$ which docker
/usr/bin/docker

docker イメージが存在しないことを確認する。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE

現在のところイメージがないので、以下のコマンドで、docker hub から nginx イメージをダウンロードする。

$ docker image pull nginx

パラパラと表示が出る。
イメージを確認する。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    3f8a00f137a0   6 days ago   142MB

現在のところ、コンテナは存在しないことを確認する。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

nginxコンテナを起動する(-d:detach, -t:tty, -p:port)。

$ docker container run -dt -p 80:80 nginx
fe8d52bced5e983a1d3e06571653ac363ea8a7aca190667096220b66ee24b527

コンテナが起動していることを確認する。

$ docker container ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
fe8d52bced5e   nginx     "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   funny_wu

webブラウザからこのインスタンスのグローバルIPを確認して、ブラウザに入れても、到達できないことを確認する。

Google Cloud のこのインスタンスのみに、80番ポートをオープンする方法。

(参考)
https://stackoverflow.com/questions/21065922/how-to-open-a-specific-port-such-as-9090-in-google-compute-engine

NETWORKING->VPC network->Firewall->Create a firewall rule
Name:http-for-docker
Description:http-for-docker
Logs:off
Network:default
Priority:1000
Direction of traffic:Ingres
Action on match:Allow
Tagets:Specified target tags
Target tags:docker-test
Source filter:IPv4 ranges
Source IPv4 ranges:<MYIP>/32
Second source filter:None
Protocols and ports:Specified protocols and ports:TCP:80

CREATEをクリックする。

Google Cloud で作成した Firewall rule を特定の  vm インスタンス に適用する方法。

インスタンスをクリックする。
EDITアイコンをクリックする。
Network interfaces に行って、Network tags に、docker-test(設定したアドレスからのみアクセス可能) と入れる。
なお、Allow HTTP traffic にチェックを入れると、全世界からアクセス可能となるが、今回は、作成した Firewall Rule で、自分だけがアクセスできるようにしておく。

SAVEをクリックする。

ブラウザから確認する。
vm のグローバル IP の確認方法
(参考)
https://cloud.google.com/compute/docs/instances/view-ip-address?hl=ja#gcloud

$ gcloud compute instances list
$ gcloud compute instances describe <instance-name> --zone=asia-northeast1-b --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
xxx.xxx.xxx.xxx

ちなみに、プロジェクトのデフォルトゾーンに存在しているインスタンスならば、ゾーンオプションは省略できる。
上記コマンドにより、vm のグローバル IP がわかったので、ブラウザから確認してみる。

http://<vm のグローバル IP>

Welcome to nginx! を確認する。

コンテナを停止してみる(funny_wu というのは、Dockerが自動的につけてくれた名前)。

$ docker container stop funny_wu
funny_wu

コンテナが確認できないことを確かめる。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

curl コマンドでも確認する。

$ curl -I <vm のグローバルIP>:80
curl: (28) Failed to connect to 35.200.126.110 port 80 after 131817 ms: 接続がタイムアウトしました

netstatコマンドで、80番ポートが開いていないことを確認する。

$ netstat -ntlp
(No info could be read for "-p": geteuid()=20163 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:33905         0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -

コンテナの STATUS が、Exited となっていることを確認する。

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS                     PORTS     NAMES
fe8d52bced5e   nginx     "/docker-entrypoint.…"   10 hours ago   Exited (0) 5 minutes ago             funny_wu

コンテナを立ち上げる。

$ docker container start funny_wu
funny_wu

コンテナが立ち上がったことを確認する。

$ docker container ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS          PORTS                               NAMES
fe8d52bced5e   nginx     "/docker-entrypoint.…"   10 hours ago   Up 13 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   funny_wu

netstat コマンドで 80 番ポートが開いていることを確認する。

$ netstat -ntlp
(No info could be read for "-p": geteuid()=20163 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:33905         0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 :::80                   :::*                    LISTEN      -

curl コマンドで確認してみる。

$ curl -I <vm のグローバル IP>:80
HTTP/1.1 200 OK
Server: nginx/1.23.3
Date: Thu, 16 Feb 2023 09:23:33 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT
Connection: keep-alive
ETag: "6398a011-267"
Accept-Ranges: bytes

その2:コンテナの調査

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1