GCPに、Dockerコンテナをデプロイするのに、丸3日間以上、ハマりましたが、先程、デプロイできました。
自分が、どこで躓いたか?を含めて、共有しますね。
1.Dockerコンテナとは
PasSソリューションです。下記の記事が分かり易いと思います。
Docker入門(第一回)~Dockerとは何か、何が良いのか~
https://knowledge.sakura.ad.jp/13265/
あるいは、こっち。⇒ https://frontier.networld.co.jp/3179/
>コンテナの特徴は、ハードウェア上に存在するOSが1つのみであり、その上で複数のコンテナが稼働している仕組みになっていることです。コンテナアプリはOSから分離しているため、OSに起因するオーバーヘッドがかからずにリソースを有効活用できます。一方で、一般的な仮想マシンではハードウェアのリソースを、ハイパーバイザーを介してLinuxやWindowsなど複数のOS環境に分けて、それぞれで仮想マシンが稼働します。仮想マシンごとにOSを用意するため、アプリに合わせてOSを選択できます。
これもあり。⇒ https://cn.teldevice.co.jp/column/10509/
>いまや主要なOSやクラウドのほとんどがDockerに対応しつつあります。ハイパーバイザーと呼ばれる専用のソフトウェアを必要とする仮想サーバーと比べると、DockerはOSの基本機能として組み込まれていくため、ずっと気軽に利用できます。
2.Google CloudのCloud RunでDockerコンテナを動かす手順。
基本的に下記のステップになります。
- ローカルでアプリケーションを作る。(ローカルで作成)
- そのアプリと同じDirectoryに、Dockerfileを作る。(ローカルで作成)
- gcloud コマンドを使って、Dockerfileを操作して、Google Cloud Registryにアップする。(gcloudコマンド一発で、この処理は全部完了。ローカルからGoogle Cloudにアップ)
- Cloud RegistryからCloud Runへのデプロイ (Google Cloudでデプロイ)
詳しくは、こちらのサイト通りです。
https://cloud.google.com/run/docs/quickstarts/build-and-deploy
私の理解では、DockerImageと言うのは、仮想サーバのイメージの様なモノです。
仮想サーバをローカル側でイメージ化して、それをクラウド上にコピーして、インスタンスを立てていますが、それが、アプリレベルで可能になったと言う事と理解しております。
「コンテナの起動はシステム的には単なるプロセスの起動であるため、ハードウェアの初期化やカーネルのロードなど時間のかかるブート過程が存在しません。」> https://frontier.networld.co.jp/3179/
3.より詳しく(Dockerfileの作り方)
大まかな流れは上の通りです。
この流れを理解するのに、凄い時間が掛りました。
つまり、アプリケーションをコーディングして、Dockerfileを作成すれば、そこから先は、gcloudコマンドで簡単にデプロイまで持っていけます。
Dockerfile作成に関しては、下記記事が分かり易かったです。
Dockerfileの作り方(基礎)⇒ https://qiita.com/daisuke30x/items/a3ea62ff8fa582b2b065
DockerfileはDockerImageの設計図のようなものです。
Dockerfileを自身で作成することで構築したい環境のDocker imageを作成できます。
技術的に難度が高いのは、Dockerfile作成です。
ただ、私も、この部分はまだ勉強中ですので、近々、追記します。
<番外編>
1.
下記の記事では、「CentOSのDockerイメージをもとにTomcatが動くコンテナを構築」しております。
https://knowledge.sakura.ad.jp/14427/
はい。
Tomcatをローカルで動かすのは、成功しました。
こんな感じです。
ただ、Tomcatを設定するのは、初心者には煩雑です。(俺も、丸1日掛かりました。)
2.
尚、Tomcatとは何ぞや?と言う部分から、俺は始めました。
⇒https://wa3.i-3-i.info/word12843.html
>Webサーバで動くJavaプログラムがあります。この「Webサーバ上で動くJavaプログラム」を「Java Servlet(サーブレット、Servlet)」と言います。さて、Java Servletさんですが、実は単独ではお仕事ができません。とあるソフトのお世話になって、はじめてお仕事ができます。
その「とあるソフト」を「サーブレットコンテナ」と言います。サーブレットコンテナさんが、Java Servletさんを、ちまちま動かしてくれるのです。サーブレットコンテナのひとつが「Apache Tomcat(アパッチ・トムキャット)」です。
3.
と言う訳で、Tomcatを動かすのは難しいので、まずローカルで、Ubuntuを立ててみましょう。(こっちの方が遥かに簡単です。)
手順はこちら。⇒ https://weblabo.oscasierra.net/docker-ubuntu1604/
C:\Users\user_xxx>docker pull ubuntu:latest
latest: Pulling from library/ubuntu
f3ef4ff62e0d: Pull complete
Digest: sha256:a0d9e826ab87bd665cfc640598a871b748b4b70a01a4f3d174d4fb02adad07a9
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
C:\Users\user_xxx\Desktop\test1007\ubuntu>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 2E48-BBB4 です
C:\Users\user_xxx\Desktop\test1007\ubuntu のディレクトリ
2021/10/09 00:04 <DIR> .
2021/10/09 00:04 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 47,020,986,368 バイトの空き領域
C:\Users\user_xxx\Desktop\test1007\ubuntu>mkdir logs
C:\Users\user_xxx\Desktop\test1007\ubuntu>docker run -it -d -p 18088:8080 -v /test1007/ubuntu/logs:/share/logs --name ubuntu2 ubuntu:latest
0c4116fadffb668957f92172be865bc6e021469983187cfad4fef1cf8033c1fd
C:\Users\user_xxx\Desktop\test1007\ubuntu>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat-image latest c8e1c9dafd3a 25 hours ago 596MB
ubuntu latest 597ce1600cf4 7 days ago 72.8MB
django latest eb40dcf64078 4 years ago 436MB
C:\Users\user_xxx\Desktop\test1007\ubuntu>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c4116fadffb ubuntu:latest "bash" 8 minutes ago Up 8 minutes 0.0.0.0:18088->8080/tcp, :::18088->8080/tcp ubuntu2
C:\Users\user_xxx\Desktop\test1007\ubuntu>docker exec -it ubuntu2 /bin/bash
root@0c4116fadffb:/# pwd
/
root@0c4116fadffb:/# mkdir test
root@0c4116fadffb:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin share srv sys test tmp usr var