Dockerのメリットとデメリット
Dockerとは?
- Dockerは「コンテナ」と呼ばれる仮想的な環境を使って、アプリケーションとその実行に必要なものをまとめて管理する技術
- これにより、開発環境と本番環境の違いによる問題を減らし、迅速な開発とデプロイを実現
Dockerのメリット
Dockerのメリットは大きく分けて以下
サーバの管理がしやすい(隔離性):
- コンテナは互いに独立しているため、あるソフトウェアのアップデートが他のソフトウェアに影響を与えない
- これにより、安全にアップデートや修正を行うことができる
- 例:Webサーバーとデータベースサーバーを別々のコンテナで管理することで、Webサーバーを変更してもデータベースに影響を与えることはない
独立性(複数コンテナの同居):
1つの物理マシンに複数のコンテナを載せることができ、同じアプリケーションの複数バージョンを同時に実行することも可能
コンテナの作成、変更、削除が容易なため、環境構築や変更にかかる手間と時間を大幅に削減
- 例:同じWebアプリケーションのテスト環境と本番環境を同じサーバー上で同時に実行できる
イメージ化が可能(配布・持ち運びの容易性):
コンテナの状態を「イメージ」として保存し、配布・共有することができる
これにより、環境の再現性が高まり、開発者間での環境共有や異なる環境へのデプロイが容易になる
Docker Hubというイメージの共有サービスを利用すれば、自分で1から環境を構築する必要はない
- 例:開発環境で作成したイメージをそのまま本番環境にデプロイできる
コンテナはカーネルを含める必要がない(軽量性):
サーバの玄人でなくても扱いやすい(容易な構築):
サーバの構築をコマンド一つで行えるため、専門知識が少なくてもコンテナを作成できる
- 例:docker runコマンド一つで、必要な環境が整ったコンテナを起動できる
Dockerのデメリット
Dockerのデメリットは以下
Linux OS依存:
親マシンへの依存:
単一コンテナでの利用ではメリットが少ない:
Dockerは複数のコンテナを効率的に管理するために設計されているため、単一のコンテナを長期的に使用する場合は、導入のメリットを感じにくい場合がある
Docker Engine自体がオーバーヘッドになる可能性がある
セキュリティ面の脅威:
Dockerの使い道
Dockerは以下のような用途で活用できます。
開発環境の統一: 開発者全員が同じ環境で開発を行うことで、環境差異による問題を回避
アプリケーションのデプロイ: 異なる環境へのデプロイを容易にし、迅速なリリースを実現
マイクロサービスアーキテクチャ: 独立したサービスをコンテナとして管理することで、システムの柔軟性と拡張性を高める
まとめ
Dockerは、アプリケーション開発と運用を効率化する強力なツール
メリットとデメリットを理解した上で、適切な場面で活用することで、開発効率の向上や運用コストの削減に繋げることができる
Kubernetesのお勉強~9回目~
今日やったこと
- Udemy:kubernetes入門
学んだこと
Namespaceとkubectl
- Namespaceの作成
k create namespace <Namespace>
- Namespaceの削除
k delete namespaces <Namespace>
- Namespace一覧
k get namespaces
- 特定のNamespace
k get namespaces <Namespace>
Namespace練習してみた
yamlファイルから作成
- test用のyaml作成
apiVersion: v1 kind: Namespace metadata: name: test
- apply
❯ k apply -f namespace-test.yaml namespace/test created
- testというNamespaceが作成された
❯ k get ns NAME STATUS AGE default Active 8d kube-node-lease Active 8d kube-public Active 8d kube-system Active 8d test Active 2m51s
- Namespace削除
❯ k delete -f namespace-test.yaml namespace "test" deleted
- kubectlで作成
❯ k create namespace test-create namespace/test-create created
- test-createというNamespaceが作成された
❯ k get ns NAME STATUS AGE default Active 8d kube-node-lease Active 8d kube-public Active 8d kube-system Active 8d test-create Active 9s
- Namespace削除
❯ k delete ns test-create namespace "test-create" deleted
所感
- Namespaceの作成方法としては管理、運用面を考えるとyamlファイル一択ですね
- 適当なtestとかだと直接作成した方が早いけど、そんな場面があるんだろうか?
Kubernetesのお勉強~8回目~
今日やったこと
- Udemy:kubernetes入門
学んだこと
Namespaceを分けるメリット
PodやContainerのリソースの範囲設定(LimitRange)
- PodやContainerにメモリ、CPUやストレージの上限、下限を設定
- ContainerのDefaultのメモリ、CPUの設定
Namespace全体の総リソース制限(ResourceQuota)
- Namespace内のメモリ、CPUの合計の上限
- PodなどObjectの数の上限
権限(RBAC)管理
- 特定のNamespace内のリソースに限って権限を付与
2種類のリソース
- KubernetesのリソースはNamespaceに属しているリソースと属していないリソースに分けられる
Namespaceに属しているリソース
- Namespace-scoped リソース
- Namespaceに属しているリソースでNamespace削除時には削除される
- Namespace内で名前はUniqueである必要がある
- 例:Pod、Service、Deployment、DaemonSet、StatefulSet
Namespaceに属していないリソース
- Cluster-scoped
Namespaceに属しているか属していないかはkubectlで確認
- 属している
k api-resources --namespaced=true
- 属していない
k api-resources --namespaced=false
- 補足
- Docker Desktopに接続
k config use-context docker-desktop
- 接続確認
k cluster-info
所感
PodやContainerのリソースの範囲設定(LimitRange)
- 設定忘れ、設定ミスの影響を防ぐことができる
Namespace全体の総リソース制限(ResourceQuota)
- 特定のNamespaceだけがリソースを使いすぎないようにできる
権限(RBAC)管理
- チームごとに特定Namespaceへの権限を付与できる
Kubernetesのお勉強~7回目~
今日やったこと
- Udemy:kubernetes入門
学んだこと
kubernetesオブジェクト作成時の必須フィールド
- apiVersion
- どのバージョンのKubernetes APIか
- 例:v1
- どのバージョンのKubernetes APIか
- kind
- どの種類のオブジェクトか
- 例:Pod、Deployment...
- どの種類のオブジェクトか
- metadata
- オブジェクト一意に特定するための情報
- 例:name、UID、namespace
- オブジェクト一意に特定するための情報
- spec
- 理想状態
- 内容はオブジェクトごとに異なる
- 理想状態
前回作成したyamlファイルの中身を確認
- 4つの必須フィールドが設定されている
apiVersion: v1
kind: Pod
metadata:
name: nginx-yaml
spec:
containers:
- image: nginx
name: nginx
Namespaceは目的別、チーム別、環境別で切り分けられる
- 初期Namespace
- default
- kube-system...
- 特定の目的
- monitoring
- frontend
- backend
- チーム
- 〇〇チーム...
- 環境
- production
- development...
初期Namespaceの役割
- default
- デフォルトのNamespace
- 指定しない場合はdefaultNamespaceの下にObjectが作成される
- kube-system
- kubernetesのシステムによって作成されたオブジェクトのためのNamespace
- kube-proxy、coredns
- metrics-server、kube-state-metrics、node-exporterなどのクラスタの状態を取得する
- kubernetesのシステムによって作成されたオブジェクトのためのNamespace
- kube-public
- 認証されていないユーザを含むすべてのユーザが読み取り可
- kube-node-lease
- LeaseオブジェクトのためのNamespace
所感
- Namespaceの役割を押さえておく必要がある
- まずはdefault、kube-systemだけでも押さえておこう!
Kubernetesのお勉強~6回目~
今日やったこと
- Udemy:kubernetes入門
学んだこと
yamlでpodを作成
- 前回学んだ
--dry-runをさっそく使用
kubectl create ns nginx-yaml --dry-run=client -o yaml > pod.yaml
中身はこんな感じで設定
apiVersion: v1
kind: Pod
metadata:
name: nginx-yaml
spec:
containers:
- image: nginx
name: nginx
- 作成したyamlファイルを指定してPodを作成
k create -f pod.yaml
- 出力結果
pod/nginx-yaml created
- Podを確認
k get pod
- 無事作成されました
❯ k get pod NAME READY STATUS RESTARTS AGE nginx-yaml 1/1 Running 0 2m2s
- API Versionも確認
- ちゃんとv1になってます
❯ k api-resources | grep pod pods po v1 true Pod podtemplates v1 true PodTemplate horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
kubernetes runコマンドでpodを作成
- 同じnginxで作成
k run nginx --image=nginx
出力結果
pod/nginx created
- Podを確認
- NAME
nginxが作成されています
- NAME
❯ k get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 20s nginx-yaml 1/1 Running 0 6m46s
作成したPodの削除
- yamlで作成したPod
❯ k delete pod nginx pod "nginx" deleted
kubectl-runで作成したPod
❯ k delete pod nginx-yaml pod "nginx-yaml" deleted
- 削除できました
❯ k get pod No resources found in default namespace.
所感
- Podの作成自体は凄く簡単にできた
- 詳細な設定を指定していなければデフォルト値になるみたい
Kubernetesのお勉強~5回目~
今日やったこと
- Udemy:kubernetes入門
学んだこと
- リソース作成
kubectl create/delete -f <FileName>
NameSpaceを指定して作成
kubectl create ns <NameSpace>
- 作成したリソースの確認
kubectl get -f <FileName>
kubectl get ns <NameSpace>
- リソース削除
kubectl delete -f <FileName>
kubectl delete ns <NameSpace>
yamlファイルのベースを作成できる
--dry-runを使用
kubectl create ns <NameSpace> --dry-run=<client or server> -o yaml
例
$ kubectl create ns test --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: null
name: test
spec: {}
status: {}
- 簡単にベースファイルを作成できる
- 必要に応じて編集するだけだから簡単
kubectl create ns <NameSpace> --dry-run=<client or server> -o yaml > test.yaml
--dry-run=clientの出力例
❯ k create ns nginx-yaml --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: null
name: nginx-yaml
spec: {}
status: {}
--dry-run=serverの出力例
❯ k create ns nginx-yaml --dry-run=server -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2023-03-06T11:17:04Z"
labels:
kubernetes.io/metadata.name: nginx-yaml
name: nginx-yaml
uid: e785e8dc-fe83-4503-84d6-ad9913ab2ec8
spec:
finalizers:
- kubernetes
status:
phase: Active
所感
- ベースファイルの作成は便利そう
ブロックチェーンゲーム(BCG) 11月収支
11月はFTXの破綻やその影響でBTC等の仮想通貨の下落があり、改めてリスク管理等は大事だなと感じた月でした。 では、早速11月の収支報告です!
11月の収支(11/1 - 11/30)
放置系
- クロスリンク
11月
- 0.00013367BTC 約308.31円
- 70.51IOST 約83.69円
- 0.6800ALGO 約22.89円
- 0.000057ETH 約9.30円
収支
- 合計:約424.19円
Walk To Earn(W2E)
BitWalk
- 11月
- 0.18027mBTC 約423円
- 11月
aruco
- 11月
- 0.000612ETH 約107.25円
- 11月
ステラウォーク
- 11月
- 4.572656XLM 約56円(ゲーム内トークン:990ジェム獲得)
- 11月
Walken
- NFT購入しましたが、まだ稼ぐには程遠い
- 収支
- 収入:0円
- 支出:10000円
- 全収支合計:-10000円
Aglet
- まだ稼ぐシステムなし
Sweatcoin
- 通貨への交換はなし。バウチャー等へ交換可能。
Sweat Wallet
- 当分は歩いてトークン稼ぎ
Play to Earn(P2E)
エグリプト
- レアモン当たらず
ゆびほる
- ETH等の商品と交換できるまでは暫く時間がかかりそう
JobTribes
- スカラーデビューしたので来月から変化ありそう
- ユーザLv.30(MAX)到達したので、初めての給料申請しました
- 11月
- 40DEP 約20.57円
METAHORSE(メタホース)
- 2022/11/15 に正式サービス開始しました
- 11月
- $81(11,043円)
MEEET
- 農場経営ゲーム
- miniNFTを2体購入(¥20,000)し始めました
- ある程度NFTを育てないと稼げないため育成中です