Docker入門

Docker入門

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

こんな感じのエラーが出てしまったため、

sudo gpasswd -a $(whoami) docker

dockerのグループに追加

sudo chgrp docker /var/run/docker.sock

権限を付与

sudo service docker restart

サービスの再起動

sudo docker search nginx

で正常に検索することができた。

https://hub.docker.com/search/?q=

上記DockerHubというイメージがまとまっているサイトからイメージをpullする

今回はnginxをpullしてみる

sudo docker pull nginx

正常にpullできたか確認する

sudo docker images
>$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              27a188018e18        9 days ago          109MB

できてるっぽい

ホスト側にマウントしたいディレクトリを作成してみる

sudo mkdir /opt/docker

runコマンドでコンテナの生成と起動を実施する

sudo docker run -d -p 80:80 -v /opt/docker:/opt/ubuntu --name webserver nginx

ちなみに

-d はバックグラウンドで実行
-p はホストと仮想環境とのポート
-v はホスト側とのマウントするディレクトリを指定
--name は起動するコンテナに名前をつける
nginxは確認したイメージ

を指定している

http://localhost/ にアクセスすると Welcome to nginx! が出力される。⇒これでサーバーが起動していることが確認できる。

Dockerでは毎回コンテナを削除する感じで作業をすることが好まれる。 ⇒そのため-vオプションでマウント設定をしておくのがオススメ。

起動しているコンテナの状態を確認するときは

sudo docker ps
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
e186733527b2        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp   webserver

現在は正常にnginxが起動していることが確認できる

コンテナの中にはいってみる

sudo docker exec -it webserver /bin/bash

でコンテナの中に入ることができる ちなみに

exec は指定したコンテナに対してコマンドを実行する
-it は指定したコンテナのプロンプトをターミナルに接続する
webserver は先述したコマンドで設定したコンテナの名前(任意の値を設定できる)
/bin/bash 実行するコマンド

である。

ここで先程マウント設定をしたディレクトリに対してファイルを出力してみる。

root@e186733527b2:/opt# cd ubuntu/
root@e186733527b2:/opt/ubuntu# pwd
/opt/ubuntu
root@e186733527b2:/opt/ubuntu# touch test
root@e186733527b2:/opt/ubuntu# ls
test
root@e186733527b2:/opt/ubuntu# 

コンテナのターミナルを抜けてマウント先のディレクトリで確認をしてみる。

$/opt/docker$ pwd
/opt/docker
$/opt/docker$ ll
total 8
drwxr-xr-x 2 root root 4096 Apr 26 22:23 ./
drwxr-xr-x 5 root root 4096 Apr 26 22:11 ../
-rw-r--r-- 1 root root    0 Apr 26 22:23 test
$/opt/docker$ 

正常にマウントされている。

このときexitでぬけても

sudo docker ps
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
e186733527b2        nginx               "nginx -g 'daemon of…"   14 minutes ago      Up 14 minutes       0.0.0.0:80->80/tcp   webserver

プロセスは動いている。

コンテナを停止する場合は

$ sudo docker stop webserver
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

正常にとまる。

一度runしたコンテナを起動させるには

sudo docker start webserver

で起動できる。

コンテナを削除する場合は

sudo docker rm webserver

で削除ができる。

Vagrantでの違い

VagrantはVagrantfileをもとに

vagrant up
vagrant ssh

コマンドを実行することで仮想環境を作成することができますが、起動するまでにかなり時間がかかります。

特に最初の起動では時間がかかります。

メモリの使用率とかもDockerを使用したほうがかなり抑えられるようです。

開発環境としてはVagrantの方がVBoxによって管理されるため、いいかもしれませんが、動作に機敏性をもたせたいなら、Dockerなのかなとか思いました。