Docker Install 4.9.0

ダウンロード先

インストール

ダウンロードしたファイルを管理者モードで実行する

再起動後

しばらくすると以下のウィンドウが表示されるので表示されているURLを押す

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

ダウンロードした「wsl_update_x64.msi」 を実行する

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公式の開発環境 Laravel Sailがリリース開始

Laravelの開発環境をDockerで構築しようとしたら公式さんがLaravel Sailって素敵ツールを提供してくれていました

docker info
-bash: docker: command not found

Docker のインストールじに管理者としてインストールしていないと、上記のようなエラーが発生することがある。

参考

Docker超入門 Part01 – Dockerを使った開発環境構築

Docker超入門 Part02 – Dockerfileをちゃんと書く

Docker超入門 Part03 – 複数コンテナを動作させる

Docker超入門 Part04 – おわりに

エラー発生

”Docker failed to initialize”というエラー

しばらくDockerを起動していなかったら、

「C:\Users\[ユーザー]\AppData\Roaming\Docker」を削除して、DockerDesktopを再起動する。

「I accept the terms」をチェック後「Accept」をクリック

AWS ECS ECR

ECS

Dcokerコンテナを簡単に使う仕組み

ECR

Gitみたなもの

LambdaとFargate

色々と調べたら現時点で Fargate を使った方がよさそう

参考

Fargate VS Lambda 両者の違いをスタートアップCTOが本気で考えてみた!

サーバーレスのAWS FargateとAWS Lambdaの使い分けについて

参考

Laravelプロダクト Fargate化への道

ECS(Fargate)でLaravelの環境変数の設定方法

LaravelアプリをDockerfile, ECR, ECS, RDSを使用してデプロイする。

AWS LambdaでLaravelを動かす

【AWS 入門】ECS(Fargate)とECRで楽々コンテナからHelloWorldしよう!

AWS FARGATE

サーバー無しでコンテナを動かす

サーバー有り無しイメージ

サーバー有りのEC2とサーバー無しのFargateの対比

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

ECS

ECSの中にFARGATEを持てる

サーバーレスのコンテナが実行できる

メリット

サーバーの管理をする必要がない

スケーリングができる

デメリット

サーバーが無いためコンテナの外側のサーバー側のエラーなどが調べられない

コンテナ内を調べる事ができない

ECSの中にEC2も持てる

サーバー有りのコンテナが実行できる

メリット

サーバーが有るためコンテナの外側のサーバー側のエラーを調べらることが出来る

コンテナ内を調べる事ができる

デメリット

サーバーの管理が必要

コンテナのスケーリングをするのが大変

FARGATEの構造

タスクを増やす

クラスター

複数のサービスを持てる

サービス

タスクをまとめて管理しており、複数のタスクは同じタスク定義を元に立ち上がったものなので、同じタスクを複数作れる(スケーリングできるってこと)

タスク

docker.compose.ymlとだいたい同じ