Docker install
Docker Desktop ダウンロード
以下から Docker Desktop をダウンロード
対応するOSのDockerをダウンロードしてください

Docker install
管理者として実行




Docker 起動
再起動後エラー

Linux カーネル更新プログラム パッケージをダウンロードする
「https://aka.ms/wsl2kernel」をURLに入力し、以下のピンク枠をクリックし「wsl_update_x64.msi」をダウンロードする

wsl_update_x64.msi
wsl_update_x64.msi を実行する





チュートリアル

コンテナーとして実行するためのGitをクローンする
青いボタンを押すとDockerコマンドが実行され、Gitがクローンされる


PS C:\Users\user> docker run --name repo alpine/git clo
ne https://github.com/docker/getting-started.git
Unable to find image 'alpine/git:latest' locally
latest: Pulling from alpine/git
3d2430473443: Pull complete
3cede86c7d99: Pull complete
5d60e16cf3af: Pull complete
eed811f041bf: Pull complete
Digest: sha256:1283cf559e7fa83951f25b292394dc7bac783e12e2c03
53ddda8e3c51583d10f
Status: Downloaded newer image for alpine/git:latest
Cloning into 'getting-started'...
PS C:\Users\user> docker cp repo:/git/getting-started/
Dockerイメージは、コンテナー専用のプライベートファイルシステムです。コンテナに必要なすべてのファイルとコードを提供します。

PS C:\Users\user> cd getting-started
PS C:\Users\user\getting-started> docker build -t dock
er101tutorial .
[+] Building 35.6s (23/24)
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 1.12kB 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 52B 0.0s
=> [internal] load metadata for docker.io/library/ng 3.4s
=> [internal] load metadata for docker.io/library/py 3.2s
=> [internal] load metadata for docker.io/library/no 3.3s
=> [internal] load build context 0.2s
=> => transferring context: 10.47MB 0.1s
=> [stage-6 1/3] FROM docker.io/library/nginx:alpine 3.4s
=> => resolve docker.io/library/nginx:alpine@sha256: 0.0s
=> => sha256:44e208ac2000daeff77c27a 1.65kB / 1.65kB 0.0s
=> => sha256:4b63f6b2255f7933f52e8d8 1.57kB / 1.57kB 0.0s
=> => sha256:53722defe627853c4f67a74 8.89kB / 8.89kB 0.0s
=> => sha256:40e059520d199e1a1a25908 2.81MB / 2.81MB 0.5s
=> => extracting sha256:40e059520d199e1a1a259089077f 0.3s
=> => sha256:f206cf0d6188016c9a1c85d 7.34MB / 7.34MB 1.8s
=> => sha256:065a4ca9176e7dbc2df50043aa9 599B / 599B 1.3s
=> => sha256:67124ec378c3b70408a77c08ac8 892B / 892B 1.5s
=> => sha256:b17ba2c5bc9faf2b84543090fc3 664B / 664B 1.8s
=> => sha256:fed8f5509a6a95d0c0cd2a7 1.39kB / 1.39kB 2.1s
=> => extracting sha256:f206cf0d6188016c9a1c85d531cb 0.6s
=> => extracting sha256:065a4ca9176e7dbc2df50043aa9f 0.0s
=> => extracting sha256:67124ec378c3b70408a77c08ac86 0.0s
=> => extracting sha256:b17ba2c5bc9faf2b84543090fc36 0.0s
=> => extracting sha256:fed8f5509a6a95d0c0cd2a7bcc92 0.0s
=> [app-base 1/5] FROM docker.io/library/node:12-alp 6.8s
=> => resolve docker.io/library/node:12-alpine@sha25 0.0s
=> => sha256:1d33634fa022e95ffcff0b8 1.43kB / 1.43kB 0.0s
=> => sha256:24bb9a52c94009b078a4319 1.16kB / 1.16kB 0.0s
=> => sha256:314ec282a0891b509b09379 6.58kB / 6.58kB 0.0s
=> => sha256:40e059520d199e1a1a25908 2.81MB / 2.81MB 0.5s
=> => sha256:3ee146eff338ef49c4cc8a0 2.36MB / 2.36MB 0.6s
=> => sha256:e640ca4424debd550918f 24.91MB / 24.91MB 2.6s
=> => extracting sha256:40e059520d199e1a1a259089077 31.4s
=> => sha256:7a51ccd0399be7010e380861999 451B / 451B 0.9s
=> => extracting sha256:e640ca4424debd550918f38ba573 1.7s
=> => extracting sha256:3ee146eff338ef49c4cc8a00a792 0.2s
=> => extracting sha256:7a51ccd0399be7010e3808619996 0.0s
=> [base 1/4] FROM docker.io/library/python:alpine@s 4.8s
=> => resolve docker.io/library/python:alpine@sha256 0.1s
=> => sha256:9316f0d151250a0b5a6c6bc 1.65kB / 1.65kB 0.0s
=> => sha256:bd9f7fd93baf921d34f30f5 1.37kB / 1.37kB 0.0s
=> => sha256:656462f348025c46732c1c3 7.06kB / 7.06kB 0.0s
=> => sha256:40e059520d199e1a1a25908 2.81MB / 2.81MB 0.4s
=> => extracting sha256:40e059520d199e1a1a259089077 31.4s
=> => sha256:4f950178bcecafaa040 667.02kB / 667.02kB 2.2s
=> => sha256:1d594d4d0bf45cb10c75 12.25MB / 12.25MB 31.9s
=> => extracting sha256:4f950178bcecafaa0400ab3ea61c 0.3s
=> => sha256:8e36cd7b5f339ec9c2af84c41c1 232B / 232B 2.7s
=> => sha256:0b8007321b2d1e8ddf4deaa 2.87MB / 2.87MB 3.2s
=> => extracting sha256:1d594d4d0bf45cb10c75de0f7661 0.6s
=> => extracting sha256:8e36cd7b5f339ec9c2af84c41c1f 0.0s
=> => extracting sha256:0b8007321b2d1e8ddf4deaaa0cc3 0.3s
=> [base 2/4] WORKDIR /app 1.6s
=> [base 3/4] COPY requirements.txt . 0.3s
=> [base 4/4] RUN pip install -r requirements.txt 24.1s
=> [app-base 2/5] WORKDIR /app 0.1s
=> [app-base 3/5] COPY app/package.json app/yarn.loc 0.1s
=> [app-base 4/5] COPY app/spec ./spec 0.1s
=> [app-base 5/5] COPY app/src ./src 0.1s
=> [app-zip-creator 1/4] COPY app/package.json app/y 0.1s
=> [app-zip-creator 2/4] COPY app/spec ./spec 0.1s
=> [app-zip-creator 3/4] COPY app/src ./src 0.2s
=> [app-zip-creator 4/4] RUN apk add zip && zip 1.8s
=> [stage-6 2/3] COPY --from=app-zip-creator /app.zi 0.1s
=> [build 1/2] COPY . . 0.3s
=> ERROR [build 2/2] RUN mkdocs build 0.8s
------
> [build 2/2] RUN mkdocs build:
#23 0.678 Traceback (most recent call last):
#23 0.678 File "/usr/local/bin/mkdocs", line 8, in <module
>
#23 0.678 sys.exit(cli())
#23 0.678 File "/usr/local/lib/python3.10/site-packages/cl
ick/core.py", line 1130, in __call__
#23 0.679 return self.main(*args, **kwargs)
#23 0.679 File "/usr/local/lib/python3.10/site-packages/cl
ick/core.py", line 1055, in main
#23 0.679 rv = self.invoke(ctx)
#23 0.679 File "/usr/local/lib/python3.10/site-packages/cl
ick/core.py", line 1657, in invoke
#23 0.680 return _process_result(sub_ctx.command.invoke(
sub_ctx))
#23 0.680 File "/usr/local/lib/python3.10/site-packages/cl
ick/core.py", line 1404, in invoke
#23 0.681 return ctx.invoke(self.callback, **ctx.params)
#23 0.681 File "/usr/local/lib/python3.10/site-packages/cl
ick/core.py", line 760, in invoke
#23 0.681 return __callback(*args, **kwargs)
#23 0.681 File "/usr/local/lib/python3.10/site-packages/mk
docs/__main__.py", line 187, in build_command
#23 0.681 build.build(config.load_config(**kwargs), dirt
y=not clean)
#23 0.681 File "/usr/local/lib/python3.10/site-packages/mk
docs/config/base.py", line 216, in load_config
#23 0.682 from mkdocs.config.defaults import get_schema
#23 0.682 File "/usr/local/lib/python3.10/site-packages/mk
docs/config/defaults.py", line 1, in <module>
#23 0.682 from mkdocs.config import config_options
#23 0.682 File "/usr/local/lib/python3.10/site-packages/mk
docs/config/config_options.py", line 8, in <module>
#23 0.682 from mkdocs import utils, theme, plugins
#23 0.682 File "/usr/local/lib/python3.10/site-packages/mk
docs/theme.py", line 6, in <module>
#23 0.682 from mkdocs.utils import filters
#23 0.682 File "/usr/local/lib/python3.10/site-packages/mk
docs/utils/filters.py", line 13, in <module>
#23 0.682 @jinja2.contextfilter
#23 0.682 AttributeError: module 'jinja2' has no attribute '
contextfilter'
------
executor failed running [/bin/sh -c mkdocs build]: exit code
: 1
PS C:\Users\user\getting-started>
前の手順で作成したイメージに基づいてコンテナを起動します。コンテナを実行すると、マシンの他の部分から安全に分離されたプライベートリソースを使用してアプリケーションが起動します。

PS C:\Users\user\getting-started> docker run -d -p 80:8
0 --name docker-tutorial docker101tutorial
Unable to find image 'docker101tutorial:latest' locally
docker: Error response from daemon: pull access denied for d
ocker101tutorial, repository does not exist or may require '
docker login': denied: requested access to the resource is d
enied.
See 'docker run --help'.
PS C:\Users\user\getting-started>
イメージをDockerHubに保存して共有し、他のユーザーが任意の宛先マシンでイメージを簡単にダウンロードして実行できるようにします。



D:\test2>docker -v
Docker version 20.10.8, build 3967b7d
D:\test2>docker run -d -p 80:80 docker/getting-started
33437824d5a7d4f3fe9114c4843b8cfe06aa8d0b955a63030eb6d92f272ed939
D:\test2>dir
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は C4AE-B0F5 です
D:\test2 のディレクトリ
2021/09/01 00:38 <DIR> .
2021/09/01 00:38 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 66,009,018,368 バイトの空き領域
D:\test2>
Laravel公式の開発環境 Laravel Sailがリリース開始
Laravelの開発環境をDockerで構築しようとしたら公式さんがLaravel Sailって素敵ツールを提供してくれていました

docker info
-bash: docker: command not found
Docker のインストールじに管理者としてインストールしていないと、上記のようなエラーが発生することがある。
参考
Docker超入門 Part01 – Dockerを使った開発環境構築
Docker超入門 Part02 – Dockerfileをちゃんと書く
Docker超入門 Part03 – 複数コンテナを動作させる
エラー発生
”Docker failed to initialize”というエラー
しばらくDockerを起動していなかったら、
「C:\Users\[ユーザー]\AppData\Roaming\Docker」を削除して、DockerDesktopを再起動する。
「I accept the terms」をチェック後「Accept」をクリック

Laravel Docker
AWS ECS ECR
ECS
Dcokerコンテナを簡単に使う仕組み
ECR
Gitみたなもの
LambdaとFargate
色々と調べたら現時点で Fargate を使った方がよさそう
参考
Fargate VS Lambda 両者の違いをスタートアップCTOが本気で考えてみた!
サーバーレスのAWS FargateとAWS Lambdaの使い分けについて
参考
ECS(Fargate)でLaravelの環境変数の設定方法
LaravelアプリをDockerfile, ECR, ECS, RDSを使用してデプロイする。
【AWS 入門】ECS(Fargate)とECRで楽々コンテナからHelloWorldしよう!
AWS FARGATE
サーバー無しでコンテナを動かす
サーバー有り無しイメージ
サーバー有りのEC2とサーバー無しのFargateの対比

Fargateの場合がアプリケーションコンテナのみに作業を集中できるが、Fargateの部分がブラックボックスになっているため、不具合解析にはEC2の方が解析しやすい。



ECS
ECSの中にFARGATEを持てる
サーバーレスのコンテナが実行できる
メリット
サーバーの管理をする必要がない
スケーリングができる
デメリット
サーバーが無いためコンテナの外側のサーバー側のエラーなどが調べられない
コンテナ内を調べる事ができない
ECSの中にEC2も持てる
サーバー有りのコンテナが実行できる
メリット
サーバーが有るためコンテナの外側のサーバー側のエラーを調べらることが出来る
コンテナ内を調べる事ができる
デメリット
サーバーの管理が必要
コンテナのスケーリングをするのが大変
FARGATEの構造
タスクを増やす
クラスター
複数のサービスを持てる
サービス
タスクをまとめて管理しており、複数のタスクは同じタスク定義を元に立ち上がったものなので、同じタスクを複数作れる(スケーリングできるってこと)
タスク
docker.compose.ymlとだいたい同じ
Docker
docker-compose
ローカル開発環境
ECS Beanstalk EKS
AWSで使う場合