0371.Blog

MacでVirtualBoxのubuntu18.04を起動し、Dockerのコンテナを建て、gitでcloneしたDjangoアプリを起動し、Mac側で表示の確認をする

2021-01-24

こんにちは、0371です。

今回はMacVirtualBoxubuntu18.04を起動し、Dockerのコンテナを建て、BitbucketからcloneしたDjangoアプリを起動し、Mac側で表示の確認をするというアホみたいなことができたので、メモしておきます。

開発環境

  • macOS Catalina 10.15.7
    • Docker for Mac

      • Engine : 20.10.2
      • Compose : 1.27.4
    • Python : 3.7

    • Django : 2.2

    • git 2.21.0

    • VirtualBox 6.1.16

      • ubuntu 18.04
      • Docker CE
        • Engine : 20.10.2
        • Compose : 1.27.4
          • Python : 3.7
          • Django : 2.2
          • nginx : 1.19.6
          • postgreSQL : 13.1
          • gunicorn : 19.9.0
      • git 2.17.1

注意:すでにDjangoアプリが用意できている前提で進めていきます。

VirtualBox上のubuntu18.04cloneするためのプロジェクトを作成する

VirtualBox上のubuntu18.04cloneするためのプロジェクトを作成します
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-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"

docker-composeを使用して、Djangoアプリのデプロイの準備をする。

以下の記事を参考にDjangoアプリを作成し、docker-compose起動まで行ってください。

DjangoをDocker Composeでupしよう!
"https://qiita.com/kyhei_0727/items/e0eb4cfa46d71258f1be"

注意すべき点は、

  1. requirements.base.txtDjangoのバージョンを2.2系にする
  2. 同じようにリポジトリ名もdjango2.2に変更する
  3. 「2.Djangoプロジェクトのローカルへの作成」のdocker runコマンドを以下の通りに変更する。
docker run --rm \
--mount type=bind,src=$(pwd),dst=/opt/apps \
django2.2 \
git clone [email protected]:{gitのユーザー名}/{gitのプロジェクト名}
  1. うまくいかないときは、Dockerfiledocker-compose.yml内のコマンドのパスの指定が合ってるかを確認する
  2. nginx.confmime.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を用意する

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

ターミナルを開いて、VirtualBoxubuntu18.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  

ターミナルを開いたまま、作業を続けます。

VirtualBoxubuntu18.04dockerdocker-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  

これでdockerdocker-composeを使用する準備が整いました。
参考にした記事は以下の通りです。

Ubuntu 18.04にDockerをインストールする(+docker-composeも)
"https://qiita.com/iganari/items/fe4889943f22fd63692a"

まとめ

結果として、納期に間に合いませんでした。(滝汗) 調査の時間が不足していたこと、ネットの情報が少なかったこと、自分たちの実力が足りなかったことなどが原因として挙げられます。

ただし、経験として得たものは多くあります。 次回の開発に活かして行きたいです。