2021-01-24
こんにちは、0371です。
今回はMac
でVirtualBox
のubuntu18.04
を起動し、Docker
のコンテナを建て、Bitbucket
からclone
したDjango
アプリを起動し、Mac
側で表示の確認をするというアホみたいなことができたので、メモしておきます。
Docker for Mac
Python : 3.7
Django : 2.2
git 2.21.0
VirtualBox 6.1.16
注意:すでにDjango
アプリが用意できている前提で進めていきます。
VirtualBox
上のubuntu18.04
でclone
するためのプロジェクトを作成するVirtualBox
上のubuntu18.04
でclone
するためのプロジェクトを作成します
Bitbucket
のリポジトリ作成画面で.gitignore
の自動生成はしない方がいいでしょう。
mkdir ~/docker-django && cd docker-django
mkdir django
git init
vi .gitignore
---
{Djangoのアプリ名}/
---
git add .
git commit -m "first commit"
git remote add [email protected]:{gitのユーザー名}/{gitのプロジェクト名}
git push origin -u master
docker-compose
用のssh鍵を用意します。
ターミナルを開き、コマンドを実行していってください。
docker run -itd --name make-ssh-key centos
docker exec -it make-ssh-key bash
yum -y update
yum -y install git
cd /root
ssh-keygen -t rsa # sshキーの作成 3回Enterを押して完了
chmod 600 ~/.ssh/id_rsa
chmod 700 .ssh
vi .ssh/config
---
Host bitbucket.org
User LocalServer:abc
Port 22
HostName bitbucket.org
identityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes
---
cat ~/.ssh/id_rsa.pu
# bitbucketに公開鍵を貼り付け
ssh -T [email protected] # yesを入力
exit
cd ~/docker-django/django
docker cp make-ssh-key:/root/.ssh .ssh
docker rm -f make-ssh-key
cd ..
これで、docker-compose
用のssh鍵を用意できました。
こちらの記事を参考にしています。(Bitbucket用に一部修正しました)
Dockerで作るGitHub環境
"https://qiita.com/Y-Kanoh/items/94b3ea3df97fcd1546ce"
以下の記事を参考にDjangoアプリを作成し、docker-compose
起動まで行ってください。
DjangoをDocker Composeでupしよう!
"https://qiita.com/kyhei_0727/items/e0eb4cfa46d71258f1be"
注意すべき点は、
requirements.base.txt
のDjango
のバージョンを2.2系にするdjango2.2
に変更するdocker run
コマンドを以下の通りに変更する。docker run --rm \
--mount type=bind,src=$(pwd),dst=/opt/apps \
django2.2 \
git clone [email protected]:{gitのユーザー名}/{gitのプロジェクト名}
Dockerfile
、docker-compose.yml
内のコマンドのパスの指定が合ってるかを確認するnginx.conf
、mime.types
は公式から取得し、追記する。
くらいでしょうか。docker-compose.yml
を載せておきます。version: '3.7'
services:
django:
restart: always #明示的に stop がされない限り、終了ステータスに関係なく常に再起動が行われる
build: ./django
expose:
- "3031" # コンテナ側のポート 指定されたコンテナ側のポートはホストマシンには公開されず、仮想ブリッジであるdocker0にのみ晒される。リンクされたサービスからのみアクセスが可能。
depends_on:
- postgres #コンテナの依存関係を定義する postgres → django → nginxの順番にコンテナが起動する
command: bash -c "python {アプリ名}/manage.py migrate && cd {アプリ名} && gunicorn {アプリ名}.wsgi -b 0.0.0.0:3031"
volumes:
- "staticdata:/opt/static/" # パスをボリュームとしてマウントする. ホスト側のパス:コンテナ側のパス
- "mediadata:/opt/apps/{アプリ名}/media"
nginx:
restart: always
image: nginx
depends_on:
- django
ports:
- "80:80"
volumes:
- "./nginx/:/etc/nginx/"
- "staticdata:/opt/apps/static/"
postgres:
image: postgres
ports:
- "5432:5432" # ホスト側ポート:コンテナ側ポート
volumes:
- "dbdata:/var/lib/postgresql/data"
environment:
POSTGRES_PASSWORD: hogemojahogemoja #コンテナの環境変数を追加する。
volumes:
dbdata:
staticdata:
mediadata:
うまくアプリが立ち上がり、localhost
で表示が確認できればOKです。
docker-compose
を終了させます。
docker-compose down
ここで生成したimage
やコンテナ
は破棄しても構いません。
最後にgit push
しておきます。
cd ~/docker-django
git add .
git commit -m "[add] dockerfile & docker-compose"
git push origin master
VirtualBox
のインストーラをダウンロードします。
Download VirtualBox
"https://www.virtualbox.org/wiki/Downloads"
導入方法はこちらの記事がわかりやすいです。
MacにVirtualBoxをインストールしてみた "https://pc-karuma.net/mac-virtualbox-install/"
ubuntu18.04
のisoファイルを用意する「ubuntu-ja-18.04.3-desktop-amd64.iso(ISOイメージ)」と書かれているリンクをクリックし、ダウンロードしてください。
ちなみに、このisoファイルはGUI
付きなので、「別にCUI
でいいじゃん」って方はそちらでも大丈夫です。
Ubuntu Desktop 日本語 Remixのダウンロード "https://www.ubuntulinux.jp/download/ja-remix"
ubuntu18.04
のisoファイルをVirtualBox
に読み込ませ、インストールさせます。
こちらの記事を参考にインストールまでを行ってください。
ユーザー名とパスワードはssh接続時に必ず使うので、メモしておいてください。
VirtualBoxにUbuntu18.04をインストール(SSH接続するまで)
"https://one-it-thing.com/5699/"
インストールが終わったら、VirtualBox
のポートフォワーディングを行います。
こちらの記事を参考にポートフォワーディングを行ってください。
VirtualBoxのポートフォワーディング設定
"https://8oclockis.blogspot.com/2018/04/virtualbox.html"
ポートフォワーディングの項目は、以下のようにします。
書いていない項目は全て空欄で大丈夫です。
名前 ホストポート ゲストポート
http接続 8080 80
ssh接続 22 22
ターミナルを開いて、VirtualBox
のubuntu18.04
にssh接続します。
ssh {ユーザー名}@localhost -p 22
{パスワードの入力}
このように表示されたら成功です。
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-23-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Introducing self-healing high availability clusters in MicroK8s.
Simple, hardened, Kubernetes for production, from RaspberryPi to DC.
https://microk8s.io/high-availability
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
~~~ 個のパッケージがアップデート可能です。
~~~ 個のアップデートはセキュリティアップデートです。
Your Hardware Enablement Stack (HWE) is supported until April 2023.
Last login: Fri Jan 22 19:04:09 2021 from 10.0.2.2
不安な方は、以下のコマンドでubuntu
の情報を確認することができます。
cat /etc/issue
arch
ターミナルを開いたまま、作業を続けます。
VirtualBox
のubuntu18.04
にdocker
、docker-compose
をインストールします。
# sudoコマンドがインストールされているか確認
apt list --installed | grep sudo
# ない場合はインストール
apt update
apt install sudo
# 登録したユーザーに sudo 権限を付与
gpasswd -a {ユーザー名} sudo
# 再度 apt パッケージのアップデート
sudo apt update
# 必要なパッケージのインストール(HTTPS経由でrepositoryをやりとり出来るようにするためのパッケージ郡らしい)
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
# Dockerの公式GPG keyを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# repository( stable ) を追加する
apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 再度 apt パッケージのアップデート
sudo apt update
# dockerのインストール
sudo apt install -y docker-ce
#dockerグループに一般ユーザーを追加する
sudo gpasswd -a {ユーザー名} docker
# dockerが使用するソケットを一般ユーザーでも読み込み出来るようにする
sudo chmod 666 /var/run/docker.sock
# dockerの起動確認
sudo systemctl status docker
# hello-world イメージの実行
docker run hello-world
### docker-composeをインストール
# 最新のバージョンを確認し、変数にいれる
export compose='1.27.4' #2020/1/24現在の最新版です
# /usr/local/bin/ 配下にダウンロード
sudo curl -L https://github.com/docker/compose/releases/download/${compose}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 実行権限の付与
sudo chmod 0755 /usr/local/bin/docker-compose
# docker-compose の確認
docker-compose -v
これでdocker
、docker-compose
を使用する準備が整いました。
参考にした記事は以下の通りです。
Ubuntu 18.04にDockerをインストールする(+docker-composeも)
"https://qiita.com/iganari/items/fe4889943f22fd63692a"
結果として、納期に間に合いませんでした。(滝汗) 調査の時間が不足していたこと、ネットの情報が少なかったこと、自分たちの実力が足りなかったことなどが原因として挙げられます。
ただし、経験として得たものは多くあります。 次回の開発に活かして行きたいです。