DockerCEとDjangoをUbuntuに導入したい!! 文系学生がやってみた!!

##はじめに
インターン先でプログラミングを勉強中の文系学生。

「プログラミング、できるようになってきたんじゃない?」
「本当ですか!! ありがとうございます!!」
「じゃあ、これから仕事をしていこうか」
「!!!」
「Dockerインストールしてる?」
「???」

さてさて、今回はDockerを導入していきますか!!

##Dockerとは
当方、Dockerなるものを初めて聞いた。
ドットインストールに[Docker入門](https://dotinstall.com/lessons/basic_docker)を発見!!
概要だけ説明してもらおうっと。

Dockerとは仮想環境のこと。
ほかのOSとかにインストールされていても、使うことができるという特徴を有しているらしい。
『 Build once,run anywhere』って言われるらしい。
まんまのイメージかな。
もうちょっと調べてみるか。

[さわって理解するDocker入門](https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html)によると、Dockerは仮想環境の中でもコンテナ型というらしい。
文字じゃ十分に説明できないから、サイトを見たほうがいいかも。
まとめることで軽量化が実現されるらしい。
Webpackのモジュールとかと同じ考え方かな？

まぁ、プログラミングにおいて、軽量化は欠かせないよね。
そんな便利なDockerを導入していくか!!

##Windowsに導入
Windowsに導入するには、`Hyper-V`と`VT`が必要みたい。
まぁ、仮想環境入れるわけだしね。
一応、確認しておきますか。

まずは`Hyper-V`からだな。
…て、ないし。
あれ？ Windows10ってHyper-Vあるんじゃないの?

調べてみると、`Windows10 Home`にはないみたい。
ちなみに、自分のWindowsは`Widows10 Home`。

次だ次!!

##Vagrantに導入
Vagrantにubuntuを導入すれば、Dockerでも使えるみたい。
ドットインストールもこの方法だし、この方法でやっていくか。

###Ubuntuの導入
Vagrantのフォルダに、[Vagranbox.es](www.vagranbox.es)から、Ubuntuのボックスを追加する。
ボックスの名前は`Official Ubuntu 14.04 daily Cloud Image amd64 (Development release, No Guest Additions)`ね。
見つけたら、Powershellで

```
$ vagrant box add ubuntu https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
```

を張り付けて、Enter！

完了したら、

```
mkdir Docker
cd Docker
vagrant init ubuntu
```

こうすることで、`Vagrantfile`が`Docker`にできる。
`Vagrantfile`のIPアドレスを変えないと、CentOSと被るな…。
ドットインストールと同じように'192.168.55.44'にしておくか。
作業が終わったら、`vagrant up`。

続いて、PuttyでVagrantにログイン。
どっちも`vagrant`でいける。

###DockerCEのインストール
Puttyでubuntuに入れたら、Dockerをインストールしていこう!!
[ホームページ](https://docs.docker.com/install/linux/docker-ce/ubuntu/)を見る。

まずは、

```
$ sudo apt-get update
```

色々とインストールする方法はあるみたいだけど、今回はリポジトリを使ってインストールしていくか。
『リポジトリ=データベース』の認識で良いよね?

```
$sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

```

これらが終わったら、

```
$edge test stable
```

だけど、`n2n`パッケージがないから、edgeは使えないとのこと。
まぁ、インストールすればいいんだよね。

```
$ sudo apt-get install n2n
```

をした後に、

```
$edge test stable
```

あとはコマンド連打。

```
$ 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 docker-ce
$ apt-cache madison docker-ce
```

最後のコマンドを打つと、使用できるDockerCEが表示される。
その中から最新のDockerCEを見つけて、

```
$ sudo apt-get insatll docker-ce=18.03.0~ce-0~ubuntu
```

(2018/4/3時点だと18.03がそれっぽい？)

```
$ docker --version
```
でさっきインストールしたバージョンがインストールされていればOK?

##用語
Dockerで利用するコマンドをまとめておこう。
DockerをインストールしたOSにImageを持ってくるのは`docker pull`。
`docker run`でImageを実行して、作られるのがContainer。
`docker commit`でContainerからImage作成
`docker push`でImage複製

###Imageの操作
[Docker Index](https://index.docker.io)に色々なImageがある。
このページから検索もできるけど、`$ sudo docker search (文字列)　|more`でもできる。
`Ctrl + C`で抜け出して、`sudo docker pull centos`でImageを持ってくる。
Imageが取得できたかどうかは、`sudo docker images`でわかる。
Imageの詳細は、`sudo docker inspect (Image名 or ImageのID)`。
Imageの削除は`sudo docker rmi (Image名 or ImageのID)`。

###Containerの操作
`sudo docker run (Image名) (操作)`
バックグラウンドでの稼働は`sudo docker run Image  -d (操作)`。
フォアアラウンドに持ってくるのは、`sudo docker attach`。`Ctrl + C`で抜けるためには、`--sig-proxy=false (Container名)`
`sudo docker stop (Container名)`や`sudo docker kill (Container名)`でストップできる。
`sudo docker start (Container名)`で再開。

実行中のタスクのログは`sudo docker logs (Container名)`で見れる。
Containerが作られた場所は`sudo docker ps`で実行中の一覧表示。
動作が終了したものは、`sudo docker run Image (操作) -a`。
Containerの削除は、`sudo docker rm (名前)`。

Container内でImageの作成するのは、`sudo docker run -i -t (image) (ディレクトリ)`

##Django編
とりあえず、これで必要最低限の導入はできたかな?
終わったことを報告すると、「『Django』も導入しようか」とのこと。
そんな簡単に導入できるのか…?

###Composerの導入
[Quickstart: Compose and Django](https://docs.docker.com/compose/django/#define-the-project-components)を見てみるか。
まずは、DockerのComposerをインストールしなくちゃいけないのね。

```
$ sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$docker-compose --version
```

上から順番にやっていって、`docker-compose version 1.20.1, build 1719ceb`が表示されればいいんじゃないかな?

###Djangoの導入

公式の英語が完全には理解できないから、ほかのサイトを探そう…
[vagrant + Ubuntu 16.04 LTS でDjango開発環境を構築](http://ritarock.hatenablog.com/entry/2017/10/11/203636)
を発見!!
いやぁ、助かった助かった。

まずは、`Vagrantfile`の

```
#config.vm.network "forwarded_port", guest: 80, host: 8000
```

を

```
config.vm.network "forwarded_port", guest: 8000, host: 8000
```

に変更。

続いて、以下のコマンドを入力していく。

```
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py
$ sudo pip install Django
```

これで`$python3 -m django --version`を打って、``が表示されれば良いはず。

###Djangoの運用
まずはtreeコマンドをインストールしないと。
tree構造で見たほうがわかりやすいからね。

```
$ sudo apt-get install tree
```

その後で、`$ django-admin startproject (プロジェクト名)`でプロジェクトの作成。
`$tree`でツリー構造でディレクトリを見れるはず。
`cd (プロジェクト名)`に移動して、`Django`を動かす。

```
$ python3 manage.py runserver 0.0.0.0:8000
```

これで`http://127.0.0.1:8000`にアクセスすれば、動いているかどうかが確認できるね。

##まとめ
今回は、DockerとDjangoをUbuntuに導入しました!!
これからも少しずつ実務の準備を進めていこう!!


##参考資料
[ドットインストール-Docker入門](https://dotinstall.com/lessons/basic_docker)-https://dotinstall.com/lessons/basic_docker
[さわって理解するDocker入門](https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html)-https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html
[vagrant + Ubuntu 16.04 LTS でDjango開発環境を構築](http://ritarock.hatenablog.com/entry/2017/10/11/203636)-http://ritarock.hatenablog.com/entry/2017/10/11/203636