2020年12月1日のはじめてでもわかる!コンテナ入門 - 社内研修公開しちゃいます -にオンライン参加しました。GMOテクノロジーブートキャンプという新卒向けの研修プログラムを再編集した内容であり、DockerやKubernetesをこれから触ってみたいという方には良いセッションだったと思います。
セッション内容
インフラ基礎・コンテナ入門をテーマに、実際にGMOインターネットで行っている講義を公開しちゃいます!
動画
https://www.youtube.com/watch?v=_TKdXlWIlSI
講義資料
ハンズオン資料
Dockerのハンズオンでハマったところ
Dockerの削除はコマンドが用意されておらず脳死でコマンドを実行していたら、DockerHubからNginx公開後に、Dockerfileのデプロイしたらエラーでこけました。
1
2
| % docker run -p 8080:8080 --name 2020-12-Introduction-to-containers webweb:v1
docker: Error response from daemon: driver failed programming external connectivity on endpoint 2020-12-Introduction-to-containers (8e3853473efed9e774c4659b3f967443f85b5da258f1cf5968cde7961184c5cb): Bind for 0.0.0.0:8080 failed: port is already allocated.
|
8080ポートはNginxのコンテナが使用しているので、該当コンテナを停止することにしました。
1
2
3
4
5
| % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d6439b07598 nginx:latest "/docker-entrypoint.…" 6 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp nginx-latest
% docker stop 1d6439b07598
1d6439b07598
|
再実行したら今度はコンテナ名でコンフリクトしたので、一旦Dockerfileからデプロイしたコンテナを削除後に、ビルドからやり直したらうまくいきました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| % docker run -p 8080:8080 --name 2020-12-Introduction-to-containers webweb:v1
docker: Error response from daemon: Conflict. The container name "/2020-12-Introduction-to-containers" is already in use by container "0d8693a28c58f69107aaadaf3e3e027feb2c3e804baaf80f5f3b8314a1af912e". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
% docker rm 2020-12-Introduction-to-containers
2020-12-Introduction-to-containers
% docker build -t webweb:v1 .
Sending build context to Docker daemon 3.072kB
Step 1/9 : FROM golang:latest AS builder
---> 6d8772fbd285
Step 2/9 : WORKDIR /work
---> Using cache
---> bb961c0180d4
Step 3/9 : COPY main.go .
package main
---> Using cache
---> 837cf2c9437d
Step 4/9 : RUN go build -o web .
---> Using cache
---> 1c90f7764a7b
Step 5/9 : FROM golang:latest
---> 6d8772fbd285
Step 6/9 : WORKDIR /exec
---> Using cache
---> f6d69a80cc3e
Step 7/9 : COPY --from=builder /work/web .
---> Using cache
---> 0c95b5df16f2
Step 8/9 : EXPOSE 8080
---> Using cache
---> 0c1185f068e2
Step 9/9 : CMD ["./web"]
---> Using cache
---> bac3a6d96867
Successfully built bac3a6d96867
Successfully tagged webweb:v1
% docker run -p 8080:8080 --name 2020-12-Introduction-to-containers webweb:v1
|
Kubernetesのハンズオンでハマったところ
Manifestによるデプロイでyamlファイルがないと怒られました。
単純にローカルでyamlファイルを作成していないのが原因だったので、Githubから該当ファイルをコピーして再実行しました。
1
2
| % kubectl apply -f deployment.yaml --kubeconfig=kubeconfig.yaml
error: the path "deployment.yaml" does not exist
|
kindクラスタの削除
個人環境でkind
は使用していないので、手っ取り早く全てのクラスタを削除することにしました。
1
2
| % kind delete clusters --all
Deleted clusters: ["introduction-to-containers"]
|
まとめ
DockerやKubernetesの基礎部分の要点を凝縮した講義資料とハンズオンでした。
特に講義資料は実践的な内容となっていたため、後ほど読み返そうと思います。