行こう
数年間、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から仮想マシンを削除します。