1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

dockerがなんなのかざっくり調べてみた

Last updated at Posted at 2020-05-05

対象

「docker, docker」ってよく聞くけど、いまいちよくわからない
仮想環境らしいんだけど、VMWareとかと何が違うの??
って人向けです

そして先に謝っておくと、あんまり詳しいことは質問されてもわかりませんので質問はしないで。。。

用意したPC

mac 2台(MacA, MacB[新品状態])

最初に

自分はDocker完全な素人です
全部調べながらやりました

まずは何から?

どうやらdockerを使うためにはdockerをインストールするらしい
こちらを参考にアカウントを作成し"docker desktop for mac"をインストールします
DockerをMacにインストールする

これが終わるとdockerのアプリが使えるようになって、コマンドラインでdockerコマンドが使えるようになります
スクリーンショット 2020-05-05 16.07.50.png

$ docker version

これでdockerを使う準備完了!

で、、、dockerってなに?

こちらを参考に読んだけど、、、
【図解】Dockerの全体像を理解する
正直最初は全然理解できなかった・・・

現時点での自分のざっくりとした知識

ホスト型仮想化(今までの仮想環境)

virtual boxやVMWareといったソフトを利用して、そこにOSをインストールして使う(PCもう一台買ったようなイメージ)

コンテナ型仮想化(docker)

自分のMac内にコンテナと呼ばれる独立スペースを一気に用意する(rubyとかのインストールは自分のMacにインストールされるのではなく、コンテナ内だけにインストールされる)

docker使うと何がうれしいの?

OSのインストールとかが不要だし、OSの起動とかしなくてもいきなり使える

コンテナってやつはDockerfileというものを使って、簡単に環境構築できるので、
MacAでDockerfileを使って作成した環境は、MacBで同じDockerfileを使ったら同じコンテナが作成できる!

$ docker build

Dockerfileさえあれば、これだけでみんなと同じ環境が作れる!
開発環境を構築するときに「rubyやpostgresのバージョンは?」とか確認しなくても大丈夫

Dockerfileとは

コンテナを一気に作ってくれる設定ファイルっぽい
docker hubにいろんな設定が用意されているので、それを呼ぶだけで簡単にrubyとかのインストールが終わる!
https://hub.docker.com/_/ruby
下のほうにあるバージョンから選べばいいだけ

スクリーンショット 2020-05-05 17.52.57.png

Dockerfile
FROM ruby:2.6.3

デメリット

元となるPCのOSが同じじゃないとうまく動かない可能性がある
(Macなら"docker desktop for mac"が同じなら大丈夫)

実際に使ってみた

実務でrailsとnuxtを使っているので、両方混ぜたやつで試してみた
Nuxt.js + Rails(API) on DockerのHello Worldするべ!
こちらのページを参考に、MacAでなんとか動くものができた!
https://github.com/aiyu427/docker_sample
こちらをMacB[新品状態]で簡単に動かせたら満足

MacBでgit clone
READMEに書いたことを実行すると、、、
無事に動いた!!
(途中でnuxt.configが上書きされていて動かなくなったことを何度も繰り返したけど、、、)

まとめると・・・

rubyやpostgresとか何もインストールすることなく同じ開発環境が構築できて感激!

豆知識

コンテナはどこに作られる?

macのストレージはコンテナを作るたびに使われていく
コンテナ作ってもdockerアプリの容量は変わらない(当然なんだけど、、、)

dockerのデータフォルダはどこ??

ls -lh ~/Library/Containers/com.docker.docker/Data

ここらしいけど見当たらない・・・
スクリーンショット 2020-05-05 17.22.15.png
さらに奥深く潜っていくと
スクリーンショット 2020-05-05 18.05.51.png

これがdockerで設定した仮想ディスクイメージサイズに当たるっぽい
スクリーンショット 2020-05-05 17.27.38.png

macのストレージで認識されるのは使っている分だけみたい (2.2 GB used)
よくわからないけどストレージ仮想化?とかの仕組みが使われているのかな

dockerはlinux上じゃないと動かない?

でもMacはlinux環境ではない
じゃあなんで動くの??

"docker desktop for mac"をインストールしたときに、実は仮想環境でlinuxが用意されているらしい!
そのlinux環境上でdockerを動かしているんだって

Reset Disk Image してもデータが残ってた!

先ほどのdocker_sampleアプリでデータを作成したけど、
勉強のためにResetして作り直してみた
スクリーンショット 2020-05-05 18.08.25.png

なのにDBにデータが残ったままになっていた!
なんで??

docker-compose.ymlの設定でvolumesが重要!

services:
  db:
    container_name: sample_db
    image: postgres:11.4-alpine
    environment:
      - TZ=Asia/Tokyo
    volumes:
      - ./api/tmp/db:/var/lib/postgresql/data

この最後の行の意味が重要だった
「:」は左と右を分けるコロンだった
(「db:」って何かを意味するフォルダだと思っていた・・・)

ローカル:./api/tmp/db
コンテナ:/var/lib/postgresql/data

こんな感じで設定していたみたい
シンボリックリンク貼ってるみたいな感じなのかな
実際のデータはローカルの"./api/tmp/db"に残ってるみたい

ここを

    volumes:
      - "db-data:/var/lib/postgresql/data"
volumes:
  db-data:

にすると、docker内にVolume(コンテナの仲間みたいなもの)が作られて、そこに保存されるみたいです
Volumeに保存しているとReset Disk Imageしたら消えちゃいます

containerの中で作業したい

コンテナをチェック

$ docker ps -a

CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS                   PORTS                              NAMES
e9b045a393fc        app_api_web                          "/bin/sh -c 'rm -f t…"   2 hours ago         Up 14 seconds            0.0.0.0:3000->3000/tcp             app_api_web_1

app_api_web_1のコンテナに入る

$ docker exec -it app_api_web_1 bash

これでコマンド動かせます

root@e9b045a393fc:/app_api#
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?