Productionの小さなプロジェクトにDockerを実装する

画像



この記事は、よく知られているホスティングプロバイダーの1つに大きな仮想マシンを持たずに、このテクノロジに悩まされるべきかどうかを考えているすべての人に捧げられています。

興味のある方は、猫にようこそ。



また、この記事はアクションの完全なガイドではなく、独自のサーバーを展開するための考えられるシナリオの1つについてのみ説明しています。



さまざまな種類のホスティングプロバイダーでの幅広い経験があり、大規模プロジェクトと小規模プロジェクトの両方でサイトを選択できます。一部のサイトの長所と短所を知っており、自分の意見があります。 これは情報を提供する記事であり、広告ではありませんので、サイトの最終的な名前で運営することはありません。 そして、いくつかの条件のみを設定します。



  1. 開発シナリオ、クリーンインストールされたOS、不要​​なコンポーネントなし、Dockerの最新バージョン、インストール方法については、 ドキュメントで詳しく説明されています



  2. もう1つの優れた方法は、 CoreOSなどのコンテナ専用に設計されたOSを使用することです


オプション番号2については、自分で選択したため、さらに詳しく説明します。 当初、RancherOSとCoreOSのどちらかを選択しましたが、最初の運用期間中に多くの欠陥、問題、不便を発見したため、使用を中止することにしました。 OSの種類に興味がある人は、Googleに簡単に対処して、それに関する情報を探すことができます。 要するに、これはフォークですが、CoreOSですが、すべてのシステムサービスはDockerコンテナです。 一般に、それらは非常に似ており、それぞれに独自の機能があります。 しかし、個人的には、牧場主の不足は、適切なドキュメントの不足、cloud-configを介して多くの設定を実行できないこと、およびメモリとシステムリソースの使用に関する他のいくつかのポイントでした。 / optおよび/ homeフォルダーを除いて、ファイルシステム構造が元の状態にクリアされることは言うまでもありません。 このディストリビューションの欠点の1つは、デフォルトでは、すべてのLinuxディストリビューションと同様に、UTCタイムゾーン用に構成されているが、インストール後にコンソールでこの問題を変更する可能性がなく、コンソールをサポートされているもの、たとえばCentOSまたはUbuntuはあまり便利ではありませんが、余分な時間とディスク容量が必要です。 また、cliud-configおよびuser-configからの初期化コマンドは、コンソールのコンテキストでのみ実行されます。 したがって、特定。 CoreOSでは、これはすべて良好であり、次のように実行できます。



cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
      
      





そして、これらの設定をコンテナのいずれかに転送します。 別の問題は、インストール後にRancherが実行するスタートアップスクリプトの作成で、スクリプトは正常に作成されましたが、実行されませんでした。 権利は正しく設定されていましたが。 彼と一緒に仕事をしていると、多くの小さな疑問が生じ、その結果、その使用を放棄することになりました。 また、CoreOSを選択します。CoreOSは、RancherOSにはまだ備わっていない、すぐに使用できるクラスタリングをサポートしています。 さらに、CoreOSはDockerコンテナと独自のRocket(rkt)の両方で動作しますが、これはもちろんプラスです。 CoreOSの別の機能は自動更新であり、非常に頻繁に要求されます。受信すると、すべてを再起動します。もちろん、インストール段階またはユーザー設定ファイルで修正できますが、開発者自身はこの値を変更せずにOSを再起動することをお勧めします、クラスターがあり、サービスがノードごとに自動的に移行する場合、これはそれほど重要ではありませんが、サーバーが1台の場合、おそらくこの機能は数分でサービスのダウンタイムに重要になります。 正直に言って、ロードは非常に高速です。



一般に、どちらのインストールオプションにも違いはありませんが、1つのOSが非常にミニマルであるため、パッケージマネージャーさえありません。 しかし、誰もが使い慣れたディストリビューションにコンテナを展開することを禁止していません。 ホストマシンに余分なソフトウェアを入れたくありませんでした。必要なコンテナにユーティリティやプログラムをインストールでき、OS自体の整合性を損なうことなくいつでも削除できます。



まず、オペレーターがこのイメージのダウンロードを許可している場合、CoreOSをサーバーにインストールします。 最初に、YAML形式のcloud-config.yml設定ファイルを作成する必要があります。



 #cloud-config hostname:    #        write_files: - path: /etc/systemd/timesyncd.conf content: | [Time] NTP=0.ru.pool.ntp.org 1.ru.pool.ntp.org #     sshd write_files: - path: /etc/ssh/sshd_config permissions: 0600 owner: root:root content: | #   . UsePrivilegeSeparation sandbox Subsystem sftp internal-sftp PermitRootLogin yes PasswordAuthentication no ChallengeResponseAuthentication no Port    PrintLastLog yes PrintMotd yes SyslogFacility AUTHPRIV RSAAuthentication yes PubkeyAuthentication yes PermitEmptyPasswords no UseDNS no UsePAM yes coreos: units: #     - name: 10-static.network runtime: true content: | [Match] Name=     [Network] DNS=8.8.8.8 DNS=8.8.4.4 Address=192.168.100.100/24 Gateway=192.168.100.1 DHCP=no #       Europe/Moscow - name: settimezone.service command: start content: | [Service] ExecStart=/usr/bin/timedatectl set-timezone Europe/Moscow RemainAfterExit=yes Type=oneshot #    sshd     - name: sshd.socket command: restart runtime: true content: | [Socket] ListenStream=    FreeBind=true Accept=yes #  ,         syslog   - name: journalctl-output.service command: start content: | [Service] Type=simple Restart=always TimeoutStartSec=60 RestartSec=60 ExecStart=/usr/bin/bash -c '/usr/bin/journalctl -o short -f | /usr/bin/ncat _ ' ExecStop= [Install] WantedBy=multi-user.target ssh_authorized_keys: -   ,          
      
      





サーバーが安全に接続を受け入れ、必要なコンテナーを起動する準備ができるように、最小限の構成を提供したため、ユーザーやその他のパラメーターを意図的に構成しません。



ネットワークをお持ちでない場合は、CoreOSインストールディスクから起動した後、ネットワークを手動で構成できます。



 sudo ifconfig _ add _ip sudo route add -net 0.0.0.0/0 _ sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
      
      





1行目はマップにアドレスを割り当て、2行目はこのマップを介してすべてのネットワークへのルートを登録し、3行目はDNSサーバーを登録します。残念ながら、ベースイメージのresolv.confファイルにはGoogleサーバーへのリンクさえありません。エラーが発生します。



任意の大きな設定をサーバーにアップロードしやすくするために、小さな設定を行うことができます。



  1. コマンドsudo passwd core



    使用して、ユーザーコアのパスワードを変更します。
  2. sshを介してサーバーに接続します。
  3. vi cloud-config.yml



    後に、構成のコピーと貼り付けを行います。


次に、次のコマンドを使用してインストールする必要があります。



 sudo coreos-install -d /dev/sda -c cloud-config.yml
      
      





最初のディスクにインストールするようにシステムに指示する場合、ボリュームレイアウト自体を実行し、この構成ファイルを取得します。 ところで、インストールブランチを切り替えることができます。デフォルトはStableですが、私はこれをしませんでした。



インストール後、再起動し、システムでDockerコンテナーを使用する準備ができました。どのコンテナーとどのように使用するかについては、興味深い場合は次の部分で説明できます。



あまり蹴らないようにお願いします、これはHabréに関する私の最初の記事です)ご清聴ありがとうございました!



All Articles