‫こんにちは｡
‫このビデオには2つの理由があります｡
‫1つは､ ローカルでDockerを実行しない場合です｡
‫Dockerをリモートでサーバ上で実行したい場合､ それが生産用であれ､ 他のサーバ用途であれ､ あるいは単にライセンス性能リソースのためにローカルでDockerを実行できないためであれ､
‫あなたは自分がローカル管理者でないことを知っているはずです｡
‫いろいろな理由があるのでしょう｡
‫ということで､ LinuxサーバーのDockerエンジンについてです｡
‫エンジンとサーバーというのは､ このビデオで説明する重要なコンポーネントです｡
‫このビデオでは､ 正しい場所から最新のDockerをインストールすることに焦点を当てます｡ これは､ デフォルトのLinuxパッケージマネージャとは異なります｡
‫そして､ サーバーにずっとsshイングしないように､ どこからでも操作できるようにサプライをインストールするようにします｡
‫実際にリモートで操作できるように設定するのですが､ LinuxサーバーでDockerエンジンを動かすには､
‫どのような方法があるのでしょうか？
‫そして､ 少し免責事項ですが､ もしあなたが前回のビデオ､ LinuxデスクトップのためのDockerデスクトップについてのビデオを見ていないなら､
‫これはそれとは別です｡
‫これは､ Dockerデスクトップができる前の話で､ Dockerエンジンだけがありました｡
‫Dockerデスクトップには､ 必ずDockerエンジンが入っています｡
‫Dockerエンジンは､ Docker DまたはDocker Daemonと呼ばれる単一のバイナリで､ あらゆるLinuxサーバーで動作します｡
‫Linuxのカーネルさえあれば､ それと同じことが実行できるのです｡
‫Windows Server上で動かすことができるDocker RD ESXiは､ 実際にWindows Server上でサービスとして動作し､ Windows Containersを実行することができるのです｡
‫でも､ このビデオではその話はしません｡
‫Dockerデスクトップは､ ローカルシステム上で動作するもので､ Dockerをローカルで利用するためだけのものです｡
‫でもこれは､ ローカルでもリモートでも､ VMでも物理サーバでも､ Raspberry Piでも､
‫どんなLinuxシステムでも実行できるDockerエンジンなんです｡
‫Linuxカーネルが動作していれば､ それはリストに含まれていますし､ Dockerには､ 動作が確認されているテスト済みのサポートビルドの互換リストがあります｡
‫世の中にあるすべてのLinuxディストリビューションではありません｡
‫技術的にはLinuxではないBSDは含まれていませんし､ セントラルウェスト､ レッドハット､
‫Ubuntu､ Debianといった大手に焦点を合わせています｡
‫そして､ さまざまなアーキテクチャをサポートします｡
‫そこで､ このビデオでは､ 現在エンジンに対応しているLinuxディストリビューションの一覧を示す､
‫このページへのリンクを紹介しています｡
‫もちろん､ 私のお気に入りのサーバーLinuxディストリビューションであるUbuntu上でDockerを使用し､ その手順を説明します｡
‫詳細は省きますが､ 実際にはこれを読むか､ 次に述べるスクリプトを実行するだけだからです｡
‫さて､ このビデオのリソースとして､ UbuntuやFedoraなどのLinuxディストリビューションにインストールする方法に関するすべてのドキュメントのリンクを紹介します｡
‫しかし､ 本当に簡単な方法は､ ほとんどの場合､ スクリプトを実行するだけです｡
‫ブラウザで入力すると､ Dockerを取得します｡
‫シェルスクリプトを表示し､ ダウンロードし､ 自動的に実行することができます｡
‫Curlの場合は､ 基本的に正しい設定をして､ 古いものをアンインストールして､ 新しいものをインストールして､ 正しいソースを取得しているかどうか､
‫そういうことを全部一度にやってくれるものです｡
‫Dockerは､ プロジェクト開始当初に知って以来､ ずっとこの方法でインストールしています｡
‫ですから､ おそらく学習用として､ 初めてLinuxサーバーにDockerをインストールするときは､ パッケージマネージャでステップバイステップで説明されているドキュメントに従ってください｡
‫aptかもしれないし､ yumかもしれない､ APKかもしれない､ ただ､ あなたがLinuxディストロで何をしているかによるのです｡
‫でも､ もっと簡単なこのスクリプトを使おうと思っています｡
‫基本的には､ スクリプトをファイルに丸めて､ そのファイルをシェルで実行するのです｡
‫そして､ これはまさにそのスクリプトが､ 最後のスライドに行くと､ それをコピーして貼り付け､ コピーして実行するように言っているのです｡
‫そうすると､ 私がどのディストリビューションを使っているか､ そのディストリビューションのどのバージョンか､
‫それらがサポートされているかどうかがわかります｡
‫このコマンドは､ サーバーの速度にもよりますが､ 数分間実行されます｡
‫そして､ Dockerコマンドライン､ DockerエンジンやDaemon､ その他いくつかのユーティリティを使って､
‫シェルプロンプトに戻ることになるのです｡
‫通常､ 画像を作成するためのビルドキットや､ それを実行するためのコンポジットなど､ いくつかのプラグインが付属しています｡
‫コースを通じて､ そのすべてに触れていきます｡
‫ですから､ システム内には4つか5つのバイナリが浮遊していると考えてください｡
‫Dockerをインストールする他の方法と同様に､ Docker space versionコマンドを実行し､ シェルでそのコマンドを入力すると､
‫少なくともコマンドラインクライアントとサーバーのバージョンが返ってくるはずです｡
‫そのサーバーのバージョンが返ってきたら､ そのサーバーのAPIと会話できるようになったということです｡
‫サーバーのシェルにいる場合､ 技術的にはソケットを使用してローカルホストと会話していることになります｡
‫Dockerエンジン､ Dockerコマンドライン､ プラグインなど､ すべてオープンソースであることを忘れないでください｡
‫これらはすべてフルオープンソースです｡
‫ApacheライセンスのDockerデスクトップですが､ これまでのビデオでは､ Dockerのクローズドソースやライセンスソフトウェアと同様に､
‫このようなものもすべて含まれています｡
‫Docker Desktopは､ もっといろいろなもののスーパーセットです｡
‫ここでインストールするDockerエンジンは､ 必要最低限のものだけです｡
‫Dockerでコンテナを実行するために必要なデーモンです｡
‫そして注意点として､ 以前のビデオでもそうでしたが､ ここではコマンドラインしかアクセスできないのでDockerログインコマンドを使う場合､
‫Docker space, log inと入力すると､ Docker IDでログインでき､ それによってさらにプールが増えるということです｡
‫覚えていれば､ プールはこのコースの最初の数本のビデオにあったもので､ ソフトウェアが入っています｡
‫イメージを引っ張ってきて､ それをコンテナとして動かし､ それを一定回数繰り返すのです｡
‫そして､ Dockerは最終的に､ 「おい､ 見ろ､ 超過しているぞ」と文句を言うかもしれません｡ 現在の数字は106時間といったところでしょうか｡
‫プールの数を超えたと表示されます｡
‫もしあなたが会社のファイアウォールの内側にいて､ 社内の全員がDockerを使っていて､ それらがすべて1つのIPアドレスの内側にいる場合､
‫その制限はかなり早く破られることになります｡
‫しかし､ 単にログインするだけなら､ Dockerは､ Dockerにお金を払えば､ 無料アカウントで何もせずに少なくとも2倍のプルを提供してくれます｡
‫このコースではその必要はありませんが､ もしDockerにお金を払ってDockerサブスクリプションに加入したければ､
‫そのアカウントでログインする限り､ 無限のプルを手に入れられると思います｡
‫しかし､ このデーモンをローカルに制御することに移ろう｡
‫さて､ ここで起こることは､ 使用するシステムが何であれ､ 例えばサーバーのセットアップであっても､ あるいは単にローカルマシンでDockerを実行したくないということであっても､
‫です｡
‫もしかしたら､ 許されないかもしれない｡
‫リソースが足りないのでは？
‫もしかしたら､ ローカルマシンでrootになっていないかもしれません｡
‫しかし､ このリモートマシン上でDockerを実行する機能は持っています｡
‫まあ､ リモートマシンのシェルに座って､ そこですべてのコマンドを入力したり､ すべてのソースコード作業をしたり､
‫このコースのレポをクローンする必要はないんですけどね｡
‫そこでは何もできない｡
‫無視してもいいんですよ｡
‫実際にそこにDockerをインストールし､ リモートで話をすることができます｡
‫さて､ ちょっと話を戻そう｡
‫数年前､ 2018年頃にこのSSHトンネル機能が登場する前は､ サーバーにsshでログインしてサーバー上ですべてを行う必要がありましたが､
‫その場合､ 自分のものをコピーしなければならず､ あまりいいものではありません｡
‫他のものはすべてローカルにあり､ コードエディターがあり､ おそらくVisual Studioコードを使っていて､
‫このクラスのソースコードがあって､ ここにいろいろあるんでしょう？
‫ですから､ 理想的にはローカルマシンですべての作業を行いたいものです｡
‫Dockerは､ 2013年に登場したときにそれを解決してくれました｡
‫そのためには､ TCPポートを使うしかありませんでした｡ TCPポートには認証機能が内蔵されておらず､
‫デフォルトでは接続の暗号化もできません｡
‫そのため､ 一般的にはDockerに接続するのは良くないとされていました｡
‫安全なネットワーク上でしかできないことであり､ 特に認証されていなかったからです｡
‫そのポートにアクセスできるところから単純に接続すれば､ 技術的にはサーバーへのリモート・ルート・アクセスを可能にすることができますが､
‫それは悪い考えです｡
‫そこでDockerは､ そのサーバーにSSHで接続でき､ 認証や証明書があれば､
‫透過的にSSH接続ができる機能を新たに追加しました｡
‫あなたはそれを行うことができますし､ 輪を飛び越え､ 任意の追加のポートを公開する必要はありません｡
‫というわけで､ そういうことになります｡
‫このステップでは､ Windows､ Mac､ Linux､ Raspberry､ PIなど､ どんなシステムでもいいので､
‫Dockerコマンドラインクライアントを入手する必要があります｡
‫Macならコマンドラインクライアントを買えばいいだけ｡
‫意外にもbrewインストーラは､ もしあなたがbrewを知らないなら､ MacとBrew install Dockerのための最高のインストーラを見逃していることになるのですが､
‫実際には完全なDockerエンジンやDockerデスクトップをインストールするわけではありません｡
‫いるから､ クライアントをインストールするだけ｡
‫Mac用のDockerエンジンはないのですか？
‫Macのカーネルはコンテナをサポートしていないので､ 意外にもインストールはコマンドラインのみで､ この場合､ 私たちが望むのはこれです｡
‫ローカルマシンがLinuxの場合､ DockersのドキュメントにあるLinux installパッケージを使い､
‫そのパッケージをリポジトリとして設定したら､ そのリポジトリからDocker CCIパッケージをaptでインストールすればいいのです｡
‫そして最後に､ Windowsをお使いの方なら「Chocolaty」をご存知かもしれませんね｡
‫最近のWindowsのパッケージマネージャの一つですね｡
‫そして､ コマンドラインクライアントだけをインストールするチョコチョコとしたインストールも可能です｡
‫しかし､ Dockerのドキュメントには､ OSに対応したクライアントライブラリの入手方法と､
‫クライアントライブラリだけの入手方法についても､ すべて説明されています｡
‫なるほど｡
‫真実の瞬間
‫LinuxサーバーにDockerエンジンをインストールしました｡
‫練習用か本番用かにかかわらず､ サーバにDockerを導入し､
‫クライアントをローカルマシンのSouthernに導入しました｡
‫ここで､ クライアントのインストールについて説明しましたが､ すでにDocker Desktopがインストールされている場合は､
‫その必要がないことをお断りしておきます｡
‫Docker Desktopにはクライアントが付属していますが､ クライアントにどこを指してサーバーエンジンと話すかを指示することができますので､
‫これからそれを実行しようと思います｡
‫このように､ IPアドレスやホスト名を指定して､ sshルートというコマンドでサーバーにアクセスすることを想像してみてください｡
‫そして､ SSH証明書を持っているとします｡
‫つまり､ SSHの基本を理解し､ サーバーで証明書を取得してリモートでログインする方法を知っていることが前提です｡
‫それについてはチュートリアルが大量にあり､ その知識が前提となっています｡
‫繰り返しになりますが､ Dockerに関わる前に､ Linuxの基本的な知識があることが前提です｡
‫だから､ それができると仮定して､ そのアクセス権があれば､ あとは環境変数を作ればいいだけなんです｡
‫Dockerアンダースコア・ホスト環境変数は､ Dockerコマンドラインに､ デフォルトでどのサーバに話しかけるかを伝えます｡
‫Dockerを何かにインストールして､ コマンドラインを使い始めると､ ローカルソケットやローカルホストを想定してしまいます｡
‫それで､ この環境変数もないんです｡
‫デフォルトでは､ この環境変数が空白の場合､ Dockerがそれを調べようとして見つからなかったとしても､
‫「OK､ ローカルホストと話す必要があると仮定してください」と言い､ うまく実行されます｡
‫しかし､ これを変更するには､ https の URL で使用するのと同じように､ docker host equals ssh のコロンスラッシュをエクスポートして追加します｡
‫そこで､ ホスト名のところをsshコロンのスラッシュユーザー名に置き換えると､ 通常のdockerコマンドを打つだけでdockerに飛び込めるようになります｡
‫ここでDockerのバージョンを入力していますが､ 私のローカルマシンではDockerは起動していません｡
‫Dockerクライアントが､ 先ほど設定したリモートクラウドインスタンスにインターネット経由でSSH接続して､
‫サーババージョンとクライアントバージョンが返されます｡
‫サーバーはLinuxで､ これはサーバーでエンジンを動かしているからです｡
‫それだけでいいんです｡
‫そのDockerアンダースコアのホスト環境変数の設定を解除したい場合､ Dockerのコマンドラインは､ ローカルでエンジンを動かしていたとして､
‫ローカルマシンに戻り､ その間を行き来することができるようになるのです｡
‫実際､ たくさんの異なるサーバーを用意し､ どのサーバーと話すかを各シェルで環境変数を変更するだけでいいのです｡
‫Dockerのcontextコマンドでも可能です｡
‫まだその話はしない｡
‫しかし､ Docker contextというコマンドを使えば､
‫設定を保存したり､ 接続するエンジンのリストを管理したりすることができます｡
‫最後のステップは､ このコースのリポジトリをローカルにクローンすることです｡ これは､
‫数回前の講義で言及されたもので､ コースのレポをダウンロードし､ コードエディタや他のもの､
‫Dockerクライアントとともにローカルマシンに置くことです｡
‫サーバー上にあるのはインストールしたエンジンだけで､ ローカルで実行するDockerコマンドはすべてリモートサーバーに対して実行されるだけなので､
‫常にsshで接続する必要はありません｡
‫そのリモートサーバー｡
‫ところで､ Dockerでテストするためにブラウザでlocal hostと入力するときはいつも､ ウェブサイトやDockerで実行している何かのように､
‫local hostと入力するのではなく､ Dockerをインストールしたサーバのホスト名またはIPアドレスと入力することを覚えておいてください｡
‫これがエンジンを動かし､ コンテナを動かしているマシンで､ ブラウザに入力する必要があるものです｡
‫また､ curlやpingなどのローカルコマンドを実行している場合は､ そのサーバーのIPに対してそれらを実行する必要があります
‫以上です｡
‫これで､ 世界のどこかのLinuxサーバーでエンジンが動くようになりましたね｡
‫ローカルシステム上でコードとレポとその他もろもろを実行し､ 始める準備ができたとします｡