ラップトップの購入でお金を節約する方法:TLSを介したDocker Remote API

最近、私は個人用ラップトップを購入することにしました。オープンソースプロジェクト(Flipperのアプリケーション)の開発と職場の変更により、私は仕事用のラップトップを個人的な目的で使用しなくなりました。そして、ここで、それはすでに(仕事で、私は16のトップエンド構成持っているラップトップのためのサポートHyndaiのSolarisのコストを与えるために残念だった「のMacBookを)。 したがって、それは私の情熱を緩和して取ることを決定した不正な8万ルーブルのために最も安いのMacBook Air 13」。ただし、MacではDockerが膨大な量のリソースを消費するため、購入後、この問題を解決する方法を考えなければなりませんでした。DockerEngineをどこかオンラインにするというアイデアがすぐに生まれました。否や言うほどない。











サーバーのチューニング



サーバーへのDockerEngineのインストール



Linuxでのdockerのオーバーヘッドは最小限です。 Mac上のDockerはLinux仮想マシンで実行されますが、Linuxではホストのカーネルを直接使用します。これについて詳しくは、こちらをご覧ください



小さなpingは私たちにとって重要なので、モスクワでホスティングを購入するのは理にかなっていますが、大きな違いはありません。



合計:Linux、モスクワ、特性はニーズによって異なります。

そここのためだけの安価な既製の関税であるruvds.comが。また、ruvds.comでは、DockerCEを搭載したセットアップをすぐに注文できます。ささいなことですが、いいです。



パスワードを探し、ホスティングのWebインターフェイスにログインして接続します。







次に、Dockerをインストールします。ここ優れた指示があります。以下に簡単にコマンドを示します(突然持ってsudoいない場合はapt-get install sudo、下からインストールすること忘れないでくださいsu):



sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io


dockerの動作を確認しましょう:



docker run hello-world




キーの生成



まず、SSLキーを生成する必要があります。あなたは簡単で難しい道をたどることができます。ハードパス(正規)の手順については、Dockerのドキュメントを参照してくださいしかし、善良な人々はそれをすべて10MB未満のコンテナに詰め込みました。



最初に、すべてを保存するフォルダーを作成しましょう。フォルダーは何でもかまいません。最初の(/etc/docker/ssl)は秘密鍵を格納し、2番目の(~/.docker)はアクセス用の鍵を格納します。



sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker


まず、ローカルフォルダにクライアントとCAの証明書を作成しましょう



docker run --rm -v ~/.docker:/certs \
    paulczar/omgwtfssl


上で生成したCAを使用してサーバー証明書を作成しましょう。そこで、サーバーにアクセスするためのIPをコンマで区切って指定します。私たちの場合、そこでサーバーのIPを指定することを忘れないでください!



sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
    -v ~/.docker:/certs \
    -e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
    -e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
    -e SSL_CERT=/server/cert.pem paulczar/omgwtfssl


dockerデーモンの構成



この段階での主なタスクは、dockerの起動時に必要なパラメーターを使用してコマンドライン引数をプッシュすることです。どのように行うかは重要ではありません。Ubuntuでは次のように行うことができます



。1。/etc/default/dockerお気に入りのエディターでファイルを編集します



nano /etc/default/docker


そして、最後に `DOCKER_OPTS`変数を追加します。そこに外部IPを挿入することを忘れないでください




DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"


2.サービスを開始するための引数を追加します。Ubuntuでは、起動パラメータファイルは/lib/systemd/system/docker.serviceです。サブセクションに行を追加します[Service]



EnvironmentFile=/etc/default/docker


そして、起動コマンドを並べて変更します。



ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS


はい、ポイント1はオプションであり、コマンド引数もここに挿入できますが、それらは多数あり、サービスファイルで実行する大きなコマンドがあると不便です。



3.デーモンを再起動します



sudo systemctl daemon-reload
sudo systemctl restart docker


4.デーモンログをチェックして、すべてが機能することを確認します。



journalctl -u docker.service -f




5. TLS経由で接続するレッツ・トライ:



export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info




ワーキング!



クライアントでの構成



クライアントの構成を開始する前に、certificatesフォルダーをコンピューターにダウンロードする必要があります。これは、任意の便利な方法で実行できます。たとえば、 `scp`経由:



リモートマシンの場合:



mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker


ローカルマシン上:



scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker


次に、このフォルダーを使用してdockerクライアントを構成します。



Mac OS CLI



ここでの設定は、環境に変数を登録する必要があり、すべてが機能するという事実に帰着します。ただし、次のような疑問が生じます。「裸のクライアントはどこで入手できますか? Docker Engineに付属している公式の2GBヘビーウェイトクライアントは必要ありませんか?」



解決策があります!最新のDockerは、長い間クライアントとサーバーの部分に分割されてきました。 macos用にコンパイルされた個別のクライアントバイナリをダウンロードできます。公式の手順はここありますがここに簡単な抜粋を示します



。1。最新のバイナリまたはサーバーに対応するバイナリ(コマンドで引き出すことができますdocker info)をリンクからダウンロードして解凍します

。2。バイナリをフォルダー/usr/local/bin/コピーしてグローバルに機能させます

sudo cp docker/docker /usr/local/bin/


3.~/.bashrcまたは~/.zshrc必要な環境変数に登録します。IPと証明書付きのフォルダへのパスを挿入することを忘れないでください

export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1


4.コンピューターを再起動し(確かにSchaub)、以下を確認します。



docker info
docker run hello-world




美しさ!



Jetbrains IDE(PyCharm、IDEA、Android Studioなど)



Jetbrainsスタジオは、箱から出してtlsを介してdockerをサポートします。この設定はにありPreference->Build, Execution, Deployment->Docker->+ます。TCP socketそこに詳細を選択して入力する必要があります。ただし、落とし穴があります。





すべてが意図したとおりに行われると、エラーが発生します。

デーモンからのエラー応答:クライアントがHTTPSサーバーにHTTP要求を送信しました。

エラーかなり印刷情報
または

接続できません:ステータス400:クライアントがHTTPSサーバーにHTTP要求を送信しました
使用するプロトコルをスタジオに明示的に規定する必要がありますhttps

YOUR_IP:2376
その後、すべてが正常に機能するはずです。



ボーナス(Portainer)



実行中のコンテナとすでに使用されているコンテナを効果的に追跡するために、このサーバーにPortainerをインストールしました。次の2行に配置する必要があります。



docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce


その後、YOUR_IP:9000美しいWebインターフェイスがハングアップ、実行中のコンテナと強制終了されたコンテナを確認できます。私たちがどのように始めたhello-world覚えていますか?ここにあり、インターフェースから直接クリーニングできます。





Portainer自体は任意のDockerマシンに接続でき、すべてのマシンのDockerコンテナを1か所から管理できます。メトリック(Grafana + Prometheus + Alerts)は、2つのコマンドで同じように簡単に設定できます(インストールgi とを忘れないでくださいdocker-compose)。



git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d








ストレージの場合のみ、に変更sum(node_filesystem_free_bytes{fstype="aufs"})する必要がありますsum(node_filesystem_free_bytes{fstype="ext4"})







結論



ラップトップを購入したとき、特にJava / Androidの開発には十分であるため、どのようなタスクにも十分であるとは思っていませんでした。しかし、私は嬉しい驚きを覚えました。これまでのところ、個人的なプロジェクトやオープンソースのプロジェクトはすべてIDEで実行されています。しかし、私はこのタイプライターに対する私のすべての愛のために、それがDockerを排除しないことに気づきました。リモートドッカーサーバーで一度設定できてとても嬉しかったです。開発プロセス中、サーバーがローカルではないことはまったく認識できません。制限は感じません。ほとんど意味がなくなる前に、インターネットなしでDockerを実行することはすべて同じです。一般的に、私は非常に満足しています。 -強力で重いラップトップを購入する1つの理由。



さらに、LinuxのDockerオーバーヘッドは最小限であるため、ロシア連邦のRuVDSから月額240ルーブルで車を借りることができます(HABRプロモーションコードを使用すると割引が適用されます)-10%以下)、pingやサーバーアプリケーションがUIに与える影響について心配する必要はありません。さらに、外部IP(クライアントを表示して開発サンドを維持する機能)、プライベートVPN、およびトップクラスの信頼性があります。全体的に、私は満足しています。



リソース:












All Articles