WindowsでVagrantのDockerでdjangoアプリケーションを起動する

こんにちはHabr! 数年間、私はHabrahabr Webサイトで読み取り専用モードで、他の人の出版物に時々コメントを残していましたが、新年の数週間前に、この状況を変えたかったのです。 これは私の最近の仕事の割り当てでした。 そして、情報を探し始めたとき、私はいつものように、それがたくさんあり、それは私が見つけたいものではなく、面倒な方法で書かれていることに気付きました。 しかし、この人がこの問題を初めて知ったらどうしますか? だから私はこの分野で自分自身を試してみることにしました。 そもそも私にとって役立つチュートリアルを作成してください。



行こう



数年間、Dockerは私の耳にありましたが、彼とは一緒に仕事をすることはありませんでした。 そして、管理者だけがスタックを変更したいと考えていました。 Docker、コンテナ、クラウドなどの言葉が話し始めました。 新しいことを学ぶ理由は何ですか? 私はラジオのDevOpsエンジニアとして働いています。 私のテクノロジーのリストは非常に簡単です。OctopusDeploy + TeamCity +および自作アプリケーションのトロリーです。 それは完璧に動作します。



この記事では、私自身が個人的に見つけたい形で情報を共有したいと思います。 目標は、VagrantでDockerを起動し、デフォルトのDjangoプロジェクトでイメージを作成し、コンテナーを初期化し、メインOSでサイトに到達することです。



職場では、Windowsで作業しています。 まず、必要なソフトウェアをインストールするためにChocolateyが必要です。



便利なターミナル(cmder)、VirtualBox、Vagrantをインストールします。



C:\> choco install cmder C:\> choco install vagrant C:\> choco install virtualbox
      
      





Chocolateyを使用したくない場合は、すべてを手動で配置できます。



プロジェクトのフォルダーを作成し、Vagrantfileファイルを追加します。



 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu/xenial64" config.vm.network "forwarded_port", guest: 5000, host: 8080, host_ip: "127.0.0.1" end
      
      





通常、このファイルは、単一のvagrant init ubuntu/xenial64



で生成できます。 仮想マシンのメインOSとゲストOS間のポート転送用に1行追加しました。 これは、後でコンテナで実行されているWebサイトにアクセスするときに必要になります。



仮想マシンを起動し、次の2つのVagrantコマンドを使用して端末に接続します。



 vagrant up vagrant ssh
      
      





ターミナル仮想マシンに正常に接続する必要があります。



Dockerのインストールに移りましょう。



 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 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 -y docker-ce
      
      





Dockerが正常にインストールされ、サービスが実行されていることを確認してください。 次のコマンドを実行します。



 sudo systemctl status docker
      
      





次の内容のDockerfileファイルを作成します。



 FROM python:latest ENV PYTHONUNBUFFERED 1 RUN apt-get update RUN mkdir /code WORKDIR /code RUN pip install django==1.11.8 RUN django-admin startproject mysite RUN python mysite/manage.py migrate RUN echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | python mysite/manage.py shell ADD . /code/ CMD python mysite/manage.py runserver 0.0.0.0:5000
      
      





デフォルトのDjangoアプリケーションを使用して、将来のイメージの説明を作成しました。 この説明では、Pythonイメージを使用してシーズニングを追加します。つまり、Djangoのインストール、デフォルトプロジェクトの作成、データベースの初期化スクリプトの実行、ユーザー管理者の作成です。



以下を実行して画像を組み立てましょう。



 sudo docker build -t my/app:latest .
      
      





このコマンドは、Dockerレジストリから必要なすべてのイメージをプルアップし、構成をmy / appという最終的な構成に追加します。



コマンドを実行すると、組み立てられたイメージがローカルに表示されます。



 sudo docker images
      
      





これは、初期化する必要があるクラスとしての単なる画像です。 初期化中に、コンテナ(オブジェクト)を作成します。 コンテナは、Dockerで実行中のイメージです。



画像に基づいてコンテナを作成します。



 sudo docker run -d -p 5000:5000 my/app
      
      





Dockerは、実行中のコンテナーの生成された一意の識別子(guid)を返します。 コンテナでアプリケーションを起動しました。 このコマンドでは、コンテナー内のポートとゲストOS上の外部ポートをマップするようにDockerに指示しました。



リモート端末を最小化し、メインシステムでブラウザを起動します。 移動先: http:// localhost:8080 /



Djangoアプリケーションのメインページが表示されます。 管理ページに移動し、 admin/pass



データを使用してコントロールパネルを開きます。



Vagrantを使用する理由 実験のために、私はメインシステムに何もインストールせず、仮想マシンを操作します。 問題が発生した場合は、いつでも削除して最初からやり直すことができます。 私にとって最高のドキュメントはコードです。



コンソールに戻ります。 ログを表示するには、次のコマンドを実行します:



 sudo docker logs <guid > | head
      
      





このコマンドは、Djangoの内部サーバーを実行しているコンソールの出力を出力します。 通常、自分でローカルでpython manage.py runserver



を起動したことをすべて確認できます。



次のコマンドでコンテナをオフにします。



 sudo docker stop <guid >
      
      





繰り返しますが、メインシステムで実行中のブラウザーに戻り、Webサイトをリロードします。 利用できません。



コンテナが停止しているときは、サーバーが停止していると考えてください。 コンテナの状態は、デスクトップでハイバーネットを作成したかのように保存されます。



このコマンドは、初期化されたすべてのコンテナーをリストします。



 sudo docker ps -a
      
      





コンテナをもう一度実行してみましょう。



 sudo docker start <guid >
      
      





ブラウザは同じウェブサイトを返します。 コントロールパネルにログインしてユーザーを作成し、コンテナの電源を入れたり切ったりすることができます。 コンテナを再度起動すると、ユーザーが保存されて利用可能になります。



次のポイントを示すために、特に古いバージョンのDjangoを使用しました。 Dockerfileを開き、編集します。 pip



コマンドを使用してインストールするときに、Djangoのバージョンをpip



ます。



次のコマンドで新しいイメージを作成します。



 sudo docker build -t my/app:latest .
      
      





実行中のコンテナを停止しなかったことに注意してください。 上記のコマンドは、ローカルに保存されているイメージを更新しました。



次のコマンドで現在のコンテナを削除しましょう:



 sudo docker kill <guid>
      
      





そして、新しいコンテナを実行します:



 sudo docker run -d -p 5000:5000 my/app
      
      





イメージに基づいて新しいコンテナを起動するたびに、Dockerはそれに対して一意の識別子を生成します。この識別子を使用して、コンテナを操作できます(オフ、オン、ターミナル経由で接続など)。



それだけです。クリーンアップして不要なものをすべて削除しましょう。



次のように入力して、ターミナルでSSHセッションを終了します。



 exit
      
      





そして、あなたは再びメインシステムのホームディレクトリにいます。 Vagrantはまだ実行されており、それぞれDockerとコンテナです。 ブラウザでこれを再度確認し、サイトがまだ実行されていることを確認してください。



Vagrantで実行中の仮想マシンを削除するには、次を実行します。



 vagrant halt vagrant destroy
      
      





最初のコマンドは仮想マシンをシャットダウンしてその状態を保存し、2番目のコマンドはVirtualBoxから仮想マシンを削除します。



All Articles