信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

2019

7

11月

初めてのDockerと疑問

テクログ

こんにちわ

入社から2ヶ月ほど経ちましたやすといいます。


前職でも開発の仕事をしていたのですがローカルの開発環境での経験がなかったため、入社初日から開発環境作成にとても苦労しました笑

ということで最近開発環境の勉強としてVMより軽量とよばれるdockerを触り始めたのでそのこと(疑問)について書きたいと思います!


Docker(コンテナ)とVMの違いを調べたところ


Docker:OSをホストと共有する

VM:OSをホストと共有しない


なるほど...

正直よく違いがわからないので実際にコンテナを作成し確認しました

まず以下のようにdocker-compose.ymlを作成します

version: '3'


services:
  nginx:
      image: nginx:1.13
      ports:
        - "8000:8000"
      volumes:
        - ./nginx/conf:/etc/nginx/conf.d
        - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
        - ./static:/static
      depends_on:
        - python


  db:
      image: mysql:5.7
      command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
      ports:
        - "3306:3306"
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: test
        MYSQL_USER: user
        MYSQL_PASSWORD: password
        TZ: 'Asia/Tokyo'
      volumes:
        - ./mysql:/var/lib/mysql
        - ./sql:/docker-entrypoint-initdb.d


  python:
      build: ./python
      command: uwsgi --socket :8001 --module app.wsgi --py-autoreload 1 --logto /tmp/mylog.log
      volumes:
        - ./src:/code
        - ./static:/static
      expose:
        - "8001"
      depends_on:
        - db



dockerhubイメージを使用してコンテナを作成するようです


$docker-compose up -d

でコンテナが起動します。

$ docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                NAMES
2f2da6f38d9f    nginx:1.13     “nginx -g ’daemon of…”  About an hour ago  Up About an hour  80/tcp, 0.0.0.0:8000->8000/tcp   django_nginx_1
e67d7e2e9773    django_python    “uwsgi --socket :800…”  About an hour ago  Up About an hour  8001/tcp              django_python_1
3d147018ebdd    mysql:5.7      “docker-entrypoint.s…”  About an hour ago  Up About an hour  0.0.0.0:3306->3306/tcp, 33060/tcp  django_db_1


コンテナが起動しました!

今までは一つのVMにdb,webserver,アプリなどひとまとめにしていたのでかなり新鮮です

でもここまででは3個のVMが起動している場合との違いがわからないです

docker exec -it コンテナ名 bash

でコンテナに入ることができるようなので確認しました。

VMならホストOSとは別のOSが起動していますがdockerではどうなってるの...


cat /etc/*release
PRETTY_NAME=“Debian GNU/Linux 9 (stretch)”
NAME=“Debian GNU/Linux”
VERSION_ID=“9"
VERSION=“9 (stretch)”
VERSION_CODENAME=stretch
ID=debian
HOME_URL=“https://www.debian.org/”
SUPPORT_URL=“https://www.debian.org/support”
BUG_REPORT_URL=“https://bugs.debian.org/”

debianでした(ホストOSはmac)

dockerhubイメージで設定されたOSなんでしょうか

コンテナでもOSは動いているようです


Docker:OSをホストと共有する

VM:OSをホストと共有しない


だとするとこのOSは見かけだけのものでコンテナ内のコマンドやプロセスはホストOSが実際に動かしているのでしょうか?


今回はうまく調べることができなかったので次までにはしっかり理解したいです。

この記事を書いた人

マスオさん

やす

所 属:
WEBインテグレーション事業部
出身地:
宮城
仕事内容:
web開発