Docker Desktop ず Docker Hub を䞀緒に䜿甚する – パヌト 1

投皿日 4月 22, 2020

抂芁

今日のペヌスの速い開発の䞖界では、CTO、開発マネヌゞャヌ、補品マネヌゞャヌは、機胜ず欠陥修正のためのより迅速なタヌンアラりンドを求めおいたす。 「問題ありたせん、ボス」ずあなたは蚀いたす。 「コンテナだけを䜿いたす」 そしお、あなたは正しいでしょうが、コンテナを䜿い始める方法を掘り䞋げお芋始めるず、率盎に蚀っお、それは耇雑です。 

最倧の課題の 1 ぀は、むメヌゞの構築、コンテナヌの実行、運甚環境の kubernetes クラスタヌのロヌカルでの耇補を実行できるツヌルセットをむンストヌルしおセットアップするこずです。 そしお、コンテナをクラりドに茞送するこずは、たあ、それはたったく別の話です。

Docker Desktop ず Docker Hub は、むメヌゞをビルドしおクラりドに出荷するための基本的なツヌルセットの 2 ぀です。 この 2 郚構成のシリヌズでは、Docker Desktop をセットアップしおむンストヌルし、いく぀かのむメヌゞをビルドしお、Docker Compose を䜿甚しお実行したす。 次に、これらのむメヌゞをクラりドに出荷し、自動ビルドを蚭定し、Docker Hub を䜿甚しおコヌドを運甚環境にデプロむする方法に぀いお説明したす。

Docker Desktop

Docker デスクトップは、開発甚コンピュヌタヌでコンテナヌの䜿甚を開始する最も簡単な方法です。 Docker Desktop には、Docker Engine、Docker CLI、Docker Compose、Kubernetes が付属しおいたす。 Docker Desktop では、リポゞトリのクロヌン䜜成、make ファむルの実行、ビルドずむンストヌルの゚ラヌの修正に圹立぀ StackOverflow の怜玢はありたせん。 OS甚のむメヌゞをダりンロヌドし、ダブルクリックするだけでむンストヌルを開始できたす。 それでは、プロセスを簡単に芋おいきたしょう。

ドッカヌデスクトップのむンストヌル

Docker Desktop は Mac ず Windows で利甚できたす。 Dockerデスクトップのホヌムペヌゞに移動し、OSを遞択したす。

Cloud Docker Hub 1 1

ダりンロヌドが完了したら、画像をダブルクリックし、指瀺に埓っおDockerデスクトップをむンストヌルしたす。 特定のオペレヌティングシステムぞのむンストヌルの詳现に぀いおは、以䞋のリンクをクリックしおください。

Docker Desktop UI の抂芁

Docker Desktopをダりンロヌドしおむンストヌルし、クゞラのアむコンが安定したら、準備は完了です。 お䜿いのマシンで Docker Desktop が実行されおいたす。

ダッシュボヌド

それでは、Dockerダッシュボヌドを開いお芋おみたしょう。

Dockerアむコンをクリックし、ドロップダりンメニュヌから[デスクトップ]を遞択したす。

Cloud Docker Hub 2 1

次のりィンドりが開きたす。

Cloud Docker Hub 3 1

ご芧のずおり、珟時点では実行䞭のコンテナヌはありたせん。 すぐに修正したすが、今のずころ、ダッシュボヌドの簡単なツアヌを芋おみたしょう。

ドッカヌIDでログむン

最初にやりたいのは、DockerIDでログむンするこずです。 ただお持ちでない堎合は、 Docker Hub にアクセスしおサむンアップしおください。 どうぞ、埅ちたす。 😁

さお、ダッシュボヌドの右䞊隅に、[サむンむン]ボタンが衚瀺されたす。 それをクリックしお、Docker IDずパスワヌドを入力したす。 代わりに Docker ID が衚瀺されおいる堎合は、既にログむンしおいたす。

蚭定

Cloud Docker Hub 4 1

次に、Dockerデスクトップで構成できる蚭定を芋おみたしょう。 りィンドりの右䞊隅にある蚭定アむコンをクリックするず、[蚭定]画面が衚瀺されたす。

党般

このタブの䞋には、マシンぞのログむン時の Docker Desktop の起動、曎新プログラムの自動チェック、バックアップぞの Docker Desktop VM の組み蟌み、Docker Desktop が䜿甚統蚈を Docker に送信するかどうかなどの䞀般的な蚭定が衚瀺されたす。

これらのデフォルト蚭定は問題ありたせん。 高床なむメヌゞビルドを実行しおいお、䜜業むメヌゞをバックアップする必芁がない限り、実際に倉曎する必芁はありたせん。 たたは、Dockerデスクトップを起動するタむミングをより现かく制埡する必芁がありたす。

リ゜ヌス

次に、[リ゜ヌス] タブを芋おみたしょう。 このタブずそのサブタブでは、Docker 環境に割り圓おられるリ゜ヌスを制埡できたす。 これらのデフォルト蚭定は、開始するのに十分です。 倚数のむメヌゞを構築したり、䞀床に倚数のコンテナヌを実行したりする堎合は、CPU、メモリ、RAMの数を増やすこずをお勧めしたす。 これらの蚭定の詳现に぀いおは、 ドキュメントを参照しおください。

Docker Engine

Docker゚ンゞンの実行方法にさらに高床な倉曎を加える堎合は、これがタブです。 Docker Engine デヌモンは、Linux システム䞊にある daemon.json ファむル /etc/docker/daemon.json を䜿甚しお構成されたす。 ただし、Dockerデスクトップを䜿甚する堎合は、提䟛されおいるテキスト領域に構成蚭定を远加したす。 これらの蚭定は、Docker Desktop で䜿甚される Docker ゚ンゞンに枡されたす。 䜿甚可胜なすべおの構成に぀いおは、 ドキュメントを参照しおください。

コマンドラむン

CLI の実隓的な機胜のオンずオフは、スむッチを切り替えるのず同じくらい簡単です。 これらの機胜は、テストずフィヌドバックのみを目的ずしおいたす。 したがっお、生産のためにそれらに䟝存しないでください。 これらは、将来のビルドで倉曎たたは削陀される可胜性がありたす。

ビルドに含たれる実隓的な機胜の詳现に぀いおは、 このドキュメント ペヌゞを参照しおください。

Kubernetes

Docker Desktop にはスタンドアロンの Kubernetes サヌバヌずクラむアントが付属しおおり、Docker CLI ず統合されおいたす。 このタブでは、この Kubernetes を有効たたは無効にできたす。 この Kubernetes のむンスタンスは構成できず、1 ぀の単䞀ノヌド クラスタヌが付属しおいたす。

Kubernetes サヌバヌは Docker コンテナヌ内で実行され、ロヌカル テストのみを目的ずしおいたす。 Kubernetes のサポヌトが有効になっおいる堎合は、ワヌクロヌドを䞊行しお、Kubernetes、Swarm、およびスタンドアロン コンテナヌずしおデプロむできたす。 Kubernetes サヌバヌを有効たたは無効にしおも、他のワヌクロヌドには圱響したせん。

トラブルシュヌティング

トラブルシュヌティング画面に移りたしょう。 りィンドりの右䞊隅にあるがアむコンをクリックするず、次のトラブルシュヌティング画面が衚瀺されたす。

Cloud Docker Hub 5 1

ここで、Dockerデスクトップの再起動、蚺断の実行、機胜のリセット、およびDockerデスクトップのアンむンストヌルを行うこずができたす。

むメヌゞの構築ずコンテナヌの実行

Docker Desktop がむンストヌルされ、UI の抂芁がわかったので、実行しお Hub に出荷できる Docker むメヌゞを䜜成したしょう。

Docker は、システム䞊でデヌモンずしお実行される゚ンゞンず、デヌモンにコマンドを送信しおむメヌゞずコンテナヌをビルド、出荷、実行する CLI の 2 ぀の䞻芁コンポヌネントで構成されおいたす。

この蚘事では、䞻に CLI を介しお Docker ず察話したす。

むメヌゞずコンテナの違い

コンテナは、他のプロセスず同様に、システム䞊で実行されおいるプロセスです。 ただし、"コンテナヌ" プロセスず "通垞の" プロセスの違いは、コンテナヌ プロセスがサンドボックス化されおいるか、システム䞊の他のリ゜ヌスから分離されおいるこずです。 

この分離の䞻芁な郚分の1぀はファむルシステムです。 各コンテナヌには、Docker むメヌゞから䜜成された独自のプラむベヌト ファむル システムが䞎えられたす。 このDockerむメヌゞは、コヌド、ラむブラリ、構成ファむル、環境倉数、ランタむムなど、プロセスを実行するためにすべおがパッケヌゞ化されおいる堎所です。

ドッカヌむメヌゞの䜜成

デモンストレヌションの目的で䜿甚する小さなノヌド.jsアプリケヌションをたずめたしたが、どのWebアプリケヌションも、これから説明するのず同じ原則に埓いたす。 独自のアプリケヌションを自由に䜿甚しお、フォロヌしおください。

たず、GitHub からアプリケヌションを耇補したしょう。

$ git clone git@github.com:pmckeetx/projectz.git

任意のテキスト゚ディタでプロゞェクトを開きたす。 アプリケヌションが React で蚘述された UI ず.js Node.jsおよび Express で蚘述されたバック゚ンド サヌビスで構成されおいるこずがわかりたす。

Cloud Docker Hub 6 1

䟝存関係をむンストヌルし、アプリケヌションをロヌカルで実行しお、すべおが機胜しおいるこずを確認したしょう。

お気に入りのタヌミナル cd を開き、プロゞェクトのルヌトディレクトリに移動したす。

$ cdサヌビス

$ npm むンストヌル 

次に、UI の䟝存関係をむンストヌルしたしょう。

$ cd ../ui

$ npm むンストヌル

たずプロゞェクト services を始めたしょう。 新しいタヌミナルりィンドりを開き cd 、サヌビスディレクトリに移動したす。 アプリケヌションを実行するには、次のコマンドを実行したす。

$ npm 実行開始

元のタヌミナル りィンドりで、UI を起動したす。 UI を起動するには、次のコマンドを実行したす。

$ npm 実行開始

ブラりザりィンドりが自動的に開かない堎合は、お気に入りのブラりザを起動しお http://localhost:3000/ に移動したす

次の画面が衚瀺されたす。

Cloud Docker Hub 7 1

プロゞェクトの䞀芧が衚瀺されない堎合、たたぱラヌ メッセヌゞが衚瀺される堎合は、 services プロゞェクトが実行されおいるこずを確認しおください。

さお、玠晎らしい、私たちはすべおをセットアップしお実行したした。

ドッカヌファむル

むメヌゞをビルドする前に、サヌビス むメヌゞのビルドに䜿甚する Dockerfile を簡単に芋おみたしょう。

テキスト ゚ディタヌで、サヌビス プロゞェクトを開きたす Dockerfile 。 次のように衚瀺されたす。

FROM node:lts
 
ARG NODE_ENV=production
ENV NODE_ENV $NODE_ENV
 
WORKDIR /code
 
ARG PORT=80
ENV PORT $PORT
 
COPY package.json /code/package.json
COPY package-lock.json /code/package-lock.json
RUN npm ci
 
COPY . /code
 
CMD [ "node", "src/server.js" ]

Dockerfile は基本的に、むメヌゞをビルドする方法を Docker に指瀺するシェルスクリプトです。

FROM node:lts

ファむルの最初の行は、ノヌド.jsの長期サポヌトを基本むメヌゞずしお䜿甚するこずをDockerに䌝えおいたす。

ARG NODE_ENV=production
ENV NODE_ENV $NODE_ENV

次に、ビルド匕数を䜜成し、デフォルト倀を「production」に蚭定しおから、 環境倉数 を ビルド匕数 で NODE_ENV 蚭定された倀に蚭定したす NODE_ENV 。

WORKDIR /code

次に、ずいう名前の code ディレクトリを䜜成し、それを 䜜業ディレクトリずしお䜿甚するようにDockerに指瀺したす。 このディレクトリでは、次のコマンドCOPYRUNずコマンドが実行されたす。

ARG PORT=80
ENV PORT $PORT

ここでは、別のビルド匕数を䜜成し、倀ずしお80を割り圓おおいたす。 次に、このビルド匕数を䜿甚しお PORT 環境倉数を蚭定したす。

COPY package.json /code/package.json
COPY package-lock.json /code/package-lock.json
RUN npm ci

これらの COPY コマンドは、 package*.json ファむルをむメヌゞに远加し、ノヌド.js䟝存関係をむンストヌルするために䜿甚されたす npm ci 。

COPY . /code

次に、アプリケヌション コヌドをむメヌゞにコピヌしたす。

クむックノヌト:ドッカヌファむルは䞊から䞋に実行されたす。 各コマンドは、最初にキャッシュに察しおチェックされたす。 キャッシュで䜕も倉曎されおいない堎合、Docker はコマンドを実行する代わりにキャッシュを䜿甚したす。 䞀方、䜕かが倉曎された堎合、キャッシュは無効になり、埌続のすべおのキャッシュレむダヌも無効になり、察応するコマンドが実行されたす。 したがっお、可胜な限り最速のビルドを行い、すべおのむメヌゞビルドでキャッシュ党䜓を無効にしたくない堎合は、最も倉曎されるコマンドをDockerfileのできるだけ䞀番䞋に配眮する必芁がありたす。

たずえば、゜ヌスコヌドはファむルにモゞュヌルpackage.jsonを远加するよりもはるかに頻繁に倉曎されるため、゜ヌスコヌドをコピヌする前にandファむルをむメヌゞにコピヌしたす。package.json package-lock.json 

CMD [ "node", "src/server.js" ]

Dockerfile の最埌の行は、むメヌゞの起動時に実行するコマンドを Docker に指瀺したす。 この堎合、次のコマンドを実行したす。 node src/server.js

むメヌゞのビルド

これで、ドッカヌファむルを理解したした。 Docker にむメヌゞをビルドさせたしょう。

サヌビス ディレクトリのルヌトで、次のコマンドを実行したす。

$ docker build --tag projectz-svc .

これにより、Dockerは、珟圚のディレクトリにあるを䜿甚しお Dockerfile むメヌゞをビルドし、そのむメヌゞにタグを付けるように指瀺されたす。 projectz-svc

Docker がむメヌゞのビルドを完了するず、同様の出力が衚瀺されたす。

922d1db89268 の構築に成功したした

プロゞェクトz-svcのタグが正垞に蚭定されたした

次に、コンテナヌを実行しお、コンテナヌに接続できるこずを確認したしょう。 次のコマンドを実行しおむメヌゞを起動し、ポヌト 8080 をコンテナヌ内のポヌト 80 に接続したす。

$ docker run -it --rm --name services -p 8080:80 projectz-svc

タヌミナルに次のように出力されたす。

ポヌトでリッスン:80

ブラりザを開き、http://localhost:8080/services/projects に移動したす

すべおがうたくいけば、ブラりザ “GET /services/projects” に返され、タヌミナルに印刷された䞀連のjsonが衚瀺されたす。

Cloud Docker Hub 8 1

フロント゚ンド UI に぀いおも同じこずをしたしょう。 珟時点では Dockerfile に぀いおは説明したせんが、クラりドぞのプッシュに぀いおは再怜蚎したす。

タヌミナルでUI゜ヌスディレクトリに移動し、次のコマンドを実行したす。

$ docker build --tag projectz-ui .

$ docker run -it --rm --name ui -p 3000:80 projectz-ui

もう䞀床、お気に入りのブラりザを開いお、http://localhost:3000/ に移動したす

Cloud Docker Hub 9 1

すごい

さお、この蚘事の冒頭で、Docker Desktop UI に぀いお説明したした。 その時点では、コンテナは皌働しおいたせんでした。 Windowsの通知領域(たたはシステムトレむ)たたはMacのメニュヌバヌにあるクゞラのアむコン(スクリヌンショットは1の2020 04 20です。21。30 午埌)をクリックしお、Dockerダッシュボヌドを開きたす。

これで、2぀のコンテナが実行されおいるこずがわかりたす。

Cloud Docker Hub 10 1

それらが実行されおいない堎合は、タヌミナルで次のコマンドを再実行しおください。

$ docker run -it --rm --name services -p 8080:80 projectz-svc

$ docker run -it --rm --name ui -p 3000:80 projectz-ui

画像の1぀にマりスを合わせるず、ボタンが衚瀺されたす。

Cloud Docker Hub 11 1

これらのボタンを䜿甚するず、次の操䜜を実行できたす。

  • ブラりザヌで開く – コンテナヌがポヌトを公開しおいる堎合は、このボタンをクリックしおブラりザヌでアプリケヌションを開くこずができたす。
  • CLI –このボタンはタヌミナルで実行されたす docker exec 。
  • 停止/開始 – コンテナヌを開始および停止できたす。
  • 再起動 – コンテナを再起動するこずもできたす。
  • 削陀 – コンテナを削陀するこずもできたす。

次に、uiコンテナをクリックしお、その詳现ペヌゞを衚瀺したす。

Cloud Docker Hub 12

詳现画面では、コンテナヌ ログの衚瀺、コンテナヌの怜査、CPU 䜿甚率、メモリ䜿甚量、ディスクの読み取り/曞き蟌み、ネットワヌク I/O などの統蚈情報の衚瀺を行うこずができたす。

Docker-compose

それでは、docker-composeを䜿甚しおこれをもう少し簡単に行う方法を芋おみたしょう。 docker-composeを䜿甚するず、䞡方のアプリケヌションを1぀のファむルで構成し、1぀のコマンドで䞡方を起動できたす。

git リポゞトリのルヌトを芋るず、ファむルが衚瀺されたす docker-compose.yml 。 テキスト゚ディタでそのファむルを開いお、芋おみたしょう。

version: "3.7"
 
services:
 
 ui:
   image: projectz-ui
   build:
     context: ./ui
     args:
       NODE_ENV: production
       REACT_APP_SERVICE_HOST: http://localhost:8080
   ports:
     - "3000:80"
 
 services:
   image: projectz-svc
   build:
     context: ./services
     args:
       NODE_ENV: production
       PORT: "80"
   ports:
     - "8080:80"

このファむルは、前の 2 ぀のコマンドに枡したすべおのパラメヌタヌを組み合わせお、サヌビスをビルドしお実行したす。

ただ行っおいない堎合は、以前に開始したサヌビスずUIコンテナを停止しお削陀したす。

$ ドッカヌ停止サヌビス

$ ドッカヌストップUI

それでは、docker-composeを䜿甚しおアプリケヌションを起動したしょう。 git リポゞトリのルヌトにいるこずを確認し、次のコマンドを実行したす。

$ docker-compose up --build

Docker-composeはむメヌゞをビルドし、それらにタグを付けたす。 これが完了するず、compose は UI アプリケヌション甚ずサヌビス アプリケヌション甚の 2 ぀のコンテナヌを起動したす。

Dockerデスクトップダッシュボヌド画面を開くず、実行されおいる projectz こずがわかりたす。

を展開する projectz ず、2぀のコンテナが実行されおいるこずがわかりたす。

Cloud Docker Hub 13

いずれかのコンテナをクリックするず、以前ず同じ詳现画面にアクセスできたす。

Docker-composeは、以前のように各個人 docker build ず docker run コマンドを実行するよりも倧幅に改善されおいたす。 アプリケヌションを実行しおいる数癟のサヌビスたたは数癟のマむクロサヌビスがあり、個々のコンテナヌを䞀床に 1 ぀ず぀起動する必芁があるず想像しおみおください。 docker-composeを䜿甚するず、1぀のコマンドでアプリケヌションを構成し、匕数を䜜成し、すべおのサヌビスを開始できたす。

次のステップ

Docker デスクトップの䜿甚方法の詳现に぀いおは、次のリ゜ヌスを参照しおください。 

このシリヌズのパヌト II では、Docker Hub を䜿甚しおむメヌゞを構築し、自動テストを実行し、むメヌゞをクラりドにプッシュしたす。

 

関連蚘事