運用中の小規模プロジェクトにDockerを実装する、パート2

画像



パート1



最初の部分では、Dockerコンテナを使用するためのオペレーティングシステムを準備しました。



再起動後、認証への招待が表示されますが、システムでの認証はキーによってのみ可能であるため、サーバーコンソールからこれを行うことはできません。 デフォルトでは、コアユーザーにはパスワードがありません。 もちろん、次のコマンドを使用してインストールできます。



sudo passwd core
      
      





次に、新しいパスワードを2回入力しますが、これは、たとえば、構成ファイルに入力した以前に作成したキーを使用して、別のホームマシンなどからコンソールにログインした後に可能になります。



Linux、MacOSユーザーの場合はターミナルクライアントとして使用でき、Windowsを使用している場合はPuttyとして使用できます。 サーバーへの接続を構成する方法については説明しません。これは簡単な作業です。 インストールプロセス中にポートを標準から2222に変更したことのみを考慮する必要があります。したがって、接続パラメーターでこれを指定することを忘れないでください。



一部のホスティングプロバイダーでは、仮想プライベートクラウドサービスの場合、次の内容のdst-natルールを作成してエッジルーターを構成する必要があります。



 Source IP: Your Public IP Address Source Port: 2222 Destination IP: Your Private IP Address Destination Port: 2222
      
      





どのポートに接続するかをルーターに説明する必要があります。 もちろん、eth0にパブリックアドレスを持つ通常の仮想マシンの場合、このようなトラブルを起こす必要はありません。 プライバシーを強化するために、IPTABLEを構成できます。これは、構成段階で行うか、次の場所にあるカスタムファイルを使用できます。



 /usr/share/oem/cloud-config.yml
      
      





これを行うのは非常に簡単です。サービスとしてsshguardを使用してコンテナーを上げる例を示します(認証ログを読み取り、望ましくないユーザーをIPTABLESブロックリストに追加するデーモン)。



まず、コンテナを組み立てます。ハブから取り出した既製のものを使用できますが、最小限のAlpine Linuxに基づいて独自のコンテナを組み立てます。 スペースを整理してさまざまな種類のファイルを保存するために、サーバー上に次のディレクトリ構造を作成することにしました。



 /cloud/containers -  ,     ,     /cloud/etc/ -    ,   ,         /cloud/data/ -     ,  ,   ... /cloud/run/ -     unix      ,   php-fpm   uwsgi 
      
      





それでは、ディレクトリの構造を準備したとしましょう。もちろん、それが便利な場合は、コマンドを実行します。



 vi Dockerfile
      
      





なぜviエディターを使用しているのですか? システムは最小限のものであるため、CoreOSには他のエディターはありません。たとえば、vim nano mceditなどです(この問題の解決方法については後で説明します。先に進めないでください)。



エディターを起動した後、キーボードの「i」キーを押して挿入モードに変換し、次のテキストを配置します。



 FROM alpine:3.2 RUN apk add --update \ iptables \ ip6tables \ sshguard \ && rm -fr /var/cache/apk/* ENTRYPOINT ["/usr/sbin/sshguard"]
      
      





FROMの最初の行は、使用するコンテナを構築するベースイメージを示しています。前述したように、Alpine Linuxバージョン3.2を使用します。



RUNで始まる行は、次のコマンドを実行します。この例では、追加のパッケージをインストールし、sshguard自体をインストールします。 その後、コンテナ/ usr / sbin / sshguardへのエントリポイントを示します。



以上で、コンテナ構成ファイルを保存する必要があります。 これを行うには、「ESC」キーを押してキーボードの挿入モードを終了し、「Shift +:」を押してviをコマンドモードにし、「wq」と書いて「Enter」を押します。 構成ファイルの作成はすべて完了しました。 それでは、コンテナの組み立てを始めましょう。 これを行うには、コンソールで次の手順を実行します。



 docker build -t local/sshguard .
      
      





このコマンドを詳しく見てみましょう.buildコマンドを使用して、sshguardという名前でローカルリポジトリにコンテナーをビルドする必要があることをDockerに伝えます。たとえば、hub.docker.comのリポジトリを使用できるローカルな場所で、その後はdocker push repoを作成する必要があります/コンテナ。 -tスイッチは、イメージにタグを付ける(名前を付ける)次のパラメーターを待機します。この場合、ローカルイメージlocal / sshguardを作成します。 ポイントの代わりに、Dockerfileへのパスを指定する必要がありますが、ファイル自体と同じディレクトリにいる場合は、十分なポイントがあります。



その後、コンテナのアセンブリが開始され、アセンブリの成功の結果がコンテナのハッシュになります。 次のコマンドを使用して、サーバー上で作成されたすべての画像を表示できます。



 docker images
      
      





スペースで区切られた1つ以上の名前またはIDを指定して、画像を削除します。



 docker images rmi image_id  image_name
      
      





さて、私たちはサービスと一緒に画像を作成しました。今ではそれを使い始めるのがいいでしょう。 イメージをサービスとして使用し、systemdを介して起動します。



これを行うには、ファイル/usr/share/oem/cloud-config.ymlの編集に進み、そこに次の内容を追加します。 上記の類推で、お気に入りのviを使用します。



 #cloud-config coreos: units: - name: sshguard.service command: start content: | [Unit] Description=sshguard After=docker.service Requires=docker.service [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill sshguard ExecStartPre=-/usr/bin/docker rm sshguard ExecStartPre=/usr/bin/docker pull local/sshguard # setup sshguard tables ExecStartPre=-/usr/sbin/iptables -N sshguard ExecStartPre=-/usr/sbin/ip6tables -N sshguard # block abuser traffic ExecStartPre=-/usr/sbin/iptables -D INPUT -j sshguard ExecStartPre=-/usr/sbin/ip6tables -D INPUT -j sshguard ExecStartPre=-/usr/sbin/iptables -A INPUT -j sshguard ExecStartPre=-/usr/sbin/ip6tables -A INPUT -j sshguard ExecStart=/bin/sh -c 'journalctl --no-pager -q -f -t sshd | sed -u "s/\\[[0-9]*\\]//" | docker run -i --name sshguard --rm --net=host --privileged local/sshguard' ExecStop=-/usr/bin/docker stop sshguard ExecStop=-/usr/bin/docker rm sshguard
      
      





ファイルを保存した後、カスタム設定を適用するためにシステムを初期化するといいでしょう。 これを行うには、コンソールでコマンドを実行します。



 sudo coreos-cloudinit --from-file /usr/share/oem/cloud-config.yml
      
      





上記の構成ファイルを使用して、パラメーターを置き換えて、必要なIPTABLESチェーンに必要なルールを作成できます。 それは難しくなく、私はそれを説明しません。



私たちのアクションの結果は、一定の期間、コンソール注文の違反者をブロックできる既製のサーバーでした。 公式ドキュメントの追加のsshguardパラメーターについて読んで、好みに合わせてカスタマイズできます。 デフォルト設定を使用しました。 より詳細には、launchコマンド自体のみを検討します。



 ExecStart=/bin/sh -c 'journalctl --no-pager -q -f -t sshd | sed -u "s/\\[[0-9]*\\]//" | docker run -i --name sshguard --rm --net=host --privileged local/sshguard'
      
      





すべてのログはjournalctlを介してロギングサーバーに取得されるため、それらを抽出し、同時にフィルター処理して、コンテナーで始まる入力sshguardに渡す必要があります。 パラメーター--net = hostは、Dockerデーモンが実行されているマシン上ですべてのアクションを実行する必要があることを示しています。一方、-privilegedキーを指定して特権モードでコンテナーを起動します。



これで、コンテナの操作を開始できたらいいのですが、まず1つのサービスについてお話したいと思います



これは、コンテナを管理するための優れたクラウドダッシュボードです。 ただし、最初にインストールする必要があります。CoreOSの場合、非常に簡単です。



 sudo curl -s http://getnucleus.io/install/coreos_installer.sh | bash -s --
      
      





インストールの詳細についてはこちらをご覧ください



次に、承認を実行し、sshを介してサーバーコンソールに接続せずにコンテナを管理できます。 これを行うには、右上隅でロケットアイコンをクリックし、コンソールで行うのと同様にコマンドを実行します。 たとえば、コンテナをNginxで実行します。これには次のように入力します。



 docker run -p 80:80 -p 443:443 --name=nginx nginx
      
      





コマンドが実行されると、nginxという名前のコンテナと公開されたポート80および443がリストに表示されます。サーバー構成、ファイル、およびスクリプトの転送方法については、他の記事または公式ドキュメントを参照してください。 サンドイッチをクリックすると、コントロールデッキ列でコンテナを管理できるだけでなく、コンテナが消費するリソース、メモリ、CPU、ネットワークなどを確認できます。



次の記事では、Warnish、Memcached、PHP7.1-FPM、Nginx、Mariadbを使用してWPのブログのインフラストラクチャを整理する方法、およびPHP 7.1の拡張機能とそのすべてを構成する方法について説明します。 ご清聴ありがとうございました。



All Articles