LoginSignup
34
42

More than 5 years have passed since last update.

Docker使えば初心者でもDB作れる😊

Last updated at Posted at 2018-08-07

データベースの構築なんて聞いただけだと難しそうー :dizzy_face: 大変そう :cold_sweat: って感じですが
Dockerを使えば、ワタシのような初心者でもデータベースが作れます:v_tone2:

初心者でも平気だよ.png

使用するサービス

今回使うサービス.png
VirtualBox   … PC に仮想環境を構築
Vagrant   … 仮想マシン環境を管理
Docker    … コンテナ型の仮想環境を作成、実行
PostgreSQL  … データベース管理

ワタシのイメージ

初心者の解釈なので違うかもしれませんが、温かい心で読んで頂けたらと思います。

今、作業しているマシンの中に仮想マシン(VirtualBox) を作って、
操作してくれる人(Vagrant) に、超便利なツール(Docker) をインストールしてもらって
そのツールを使ってデータベース(PostgreSQL)を構築する。  みたいなことをやります。
ワタシのイメージ.png

各ツールをインストール

:one: まずは、仮想環境を構築するために VirtualBoxインストール

1.png


:two: 次に仮想環境を管理してくれる Vagrantインストール

2.png


:three: Vagrantfile を設定し、仮想マシンを立ち上げる

3.png

仮想マシンに入れるOSはVagrant Cloudの一覧に載っています。
こんな感じで色々ありますが、今回はubuntu/xenial64でマシンを立ち上げます。
Vagrant cloud.png

まずは、任意のディレクトリで
11.png

以下のコマンドを実行

vagrant init

そうするとVagrantfileが出来ます。
12.png

今回は任意のIPで仮想マシンを作成するように設定してみます。
ついでに仮想マシンとローカル(ホスト)の任意の場所同士がアクセスできるように
設定したいのでVagrantfileを編集します。

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "private_network", ip: "192.168.11.29"
  config.vm.synced_folder ".", "/srv/", type: "nfs"
end

Vagrant.configure("2") do |config| ~ end の間に設定を書きます。

config.vm.box = "ubuntu/xenial64"   ・・・BOXはubuntu/xenial64で起動してね
config.vm.network "private_network"  ・・・ホストマシンからしかアクセスしないよ
ip: "192.168.11.29"          ・・・IPは 192.168.11.29 に設定してね
config.vm.synced_folder ".", "/srv/"
  ・・・ホストマシンのVagrantfileがある場所(.)を仮想マシンの/srv/の下にマウントしてね
type: "nfs" ・・・ NFS マウントしてね。

synced_folderに指定したホストマシンのディレクトリと仮想マシンのディレクトリを設定
同じディレクトリとして扱えるようにすることをマウントと呼びます。
マウント.png

仮想マシンが作成されるとき(vagrant upしたとき)に、このマウントをするのですが
そのときのスピードがNFS マウントした方が断然早いらしいです。
それと、Vagrantfileの" "内は定型じゃないので自分の環境で好きに変えてください。

Vagrantfileの編集が終わったら以下のコマンドを実行します。

vagrant up

これで仮想マシンが作成されて起動しましたー!本当に起動してるか確認してみます。
13.png

VirtualBoxを起動すると…ちゃんと実行中になってます。
14.png

このマシンにsshで繋いでみます。以下のコマンドを実行

vagrant ssh

おーっ!繋がりました!本当に仮想マシンにマウントされてるのかな~?
15.png

では、ホストのtedkumaディレクトリに画像ファイルを入れてみて、仮想マシンで見えるか確認します。
16.png

/srv/の下がVagrantfile置いてる場所と同じになってるはずなので移動してみます。

cd /srv
ls

見えてますー!ちゃんと設定通りマシンが立ち上がってるのが確認できました。
17.png


:four: Docker をインストールする

4.png
上のイラストで色々な環境と言ってますが、dockerではこれをコンテナと呼びます。
pythonの開発環境のコンテナ、ポスグレ環境のコンテナ、nodeの開発環境のコンテナ…
というようにdocker上に色々なコンテナを立ち上げることができます。

Dockerを0から勉強するからDockerインストールの箇所を引用させて頂きました。

一旦ルートに戻って

cd /

HTTPS経由でリポジトリを使用できるようにパッケージをインストールする

sudo apt-get install -y

Dockerの公式GPGキーを追加

curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -

OK

key IDが58118E89F3A912897C070ADBF76221572C52609Dであることを確認

apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D

pub  4096R/2C52609D 2015-07-14
    Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D
uid         Docker Release Tool (releasedocker) docker@docker.com

非公式リポジトリ(docker用リポジトリ)の追加

sudo add-apt-repository "deb https://apt.dockerproject.org/repo/ ubuntu-$(lsb_release -cs) main"

Dockerをインストールする
aptパッケージを更新する

sudo apt-get update

Dockerの最新バージョンをインストール

sudo apt-get -y install docker-engine

正しくインストールされているか確認

docker -v

Docker version 17.05.0-ce, build 89658be ※ちゃんとバージョン出てくればOK

お試し :relieved: hello-worldイメージをダウンロードして、コンテナ内で実行。
sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
 
 ※こんなことを言ってます。(Google翻訳さん)
18.png

Docker Hubにはオフィシャルなものから個人の方が作成したものまで様々なコンテナのイメージが
公開されています。Gitでいうところのgit clone的な感じでdocker pullして使うことが出来ます。
…で、dockerはそのイメージからコンテナを作成します。


:five: Docker-Compose をインストールする

5.png

Install Docker Compose のLinuxタブを引用しています。Docker Composeの最新バージョンをダウンロード

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/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.21.2, build a133471 ※ちゃんとバージョン出てくればOK


ポスグレのコンテナを立ち上げる(DB作る)

6.png

さて、大詰めです。ディレクトリの中にdbというディレクトリを作成し、
docker-compose.ymlという名前でヤムルファイルを作成します。
19.png

docker-compose.ymlの中身はこんな感じで書きました。

docker-compose.yml
version: '3'

services:
  db:
    container_name: postgres
    image: postgres:latest
    ports:
      - "5432:5432"
    volumes:
      - ./db:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_USER=password
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=postgres
    networks:
      - default

volumes:
  yarn_cache:
    driver: 'local'

先に動かしてみます。
docker-compose.ymlファイルのあるディレクトリに移動してから

cd /srv

以下のコマンドを実行 (-dはデーモンで起動するというオプション)

sudo docker-compose up -d db

そうするとCreating postgres ... done!出来ましたー!コンテナが立ち上がりましたー!
20.png

本当に立ち上がったか確認してみます。

sudo docker ps

この画面見るとdocker-compose.ymlで設定した内容が分かると思います。設定した内容の他に、
作成されたコンテナにCONTAINER ID(ユニークID)が割り振られ、CREATEDで47秒前に作成されたよ
STATUSでUP…起動中だよというのがわかります。
21.png
volumeというのはマウントされる領域を指しているのですが、./dbは先ほど追加したdbディレクトリ
対する/docker-entrypoint-initdb.dという場所は、データ置き場です。
docker-entrypoint-initdb.dにデータを置いておくとDBのデータとして処理してくれます。
だから、ローカルのdb = データ置き場 ってことでマウントしてね って書いてます。

じゃあ、本当にポスグレ使えるようになってるのか確認してみます。
24.png
docker-compose.ymlに書いたDB名、ID、パスワードでテスト接続すると...無事繋がりました:v_tone2:
25.png

Docker使用してDBを作成するに関しては以上です。
コマンドやDockerの特性に関しては全く触れず申し訳ありません。
丁寧に解説して下さっているページがたくさんありますので、そちらでご確認頂くようお願いします。


以下はその他参考にさせて頂いたページです。

:slight_smile: Dockerメモ より sudo なしでdockerコマンドを叩けるようにする
:slight_smile: Vagrant入門から実践まで より 仮想マシンのメモリを増やす

34
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
42