Docker入門
- #Docker
 - #Tips
 - #Know-how
 
- 2019/04/29
 
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なのかなとか思いました。