Dockerを知れば、PCが平和に!

こんにちは、松井です。

最近、仕事で〝Docker〟を使うようになりました。

そこで、
Docker未修者だった僕が、
Dockerの使い方を〝やんわり〟理解できるようになるまでに

学んだことを書いていこうと思います。

 

とはいえ、

Dockerの詳しい設定方法などは、
ほかのひとが書いてくださっている記事がたくさんあるので、

ここでは、

Docker未修者が、
〝直感的に〟Dockerの使い方が理解できる!

そんな記事となるよう頑張ろうと思います。

 

「なんだか、Dockerってとっつきにくいよなー」
と思っているひとが、少しとっつきやすくなる

そんな記事を目指します。

まずは、Dockerを起動するとこんな感じになるんよ。

Dockerについて、話したいことはたくさんありますが、

細かいことをツラツラと、いきなり話しても、
とっつきにくいと思うので、

まずは、Dockerの完成像からみていきましょう。

 

ということで、
Dockerを起動すると、このような画面になります。

詳細については、あとで話していきます。

 

この画面の赤枠の部分に注目してほしいのですが、

ここには、
「hope-trainer」というコンテナがあって、

そこに、

・「web」
・「db」
・「nginx」

というサービスが立ち上がっています。

 

ここのイメージとしては、

「hope-trainer」
というアプリケーションを作るにあたって、

その構成要素として、

・「web」:アプリケーション自体
・「db」:データベース
・「nginx」:動作サーバー

がある、って感じです。

 

このように、Dockerでは、
アプリケーションの構成に必要な

「web」「db」「nginx」

といった要素を、
コンテナの中に突きさしていくことで、

アプリケーションを構築します。

 

で、ここでは、
「nginx」の、8080番ポートが空いているので、

ブラウザから
「http://localhost:8080/」へアクセスすると・・・、

と。

こんな感じに、
「web」のアプリケーションを見ることができます。

(察しの良い方は分かると思いますが、
このアプリケーションが使用してるデータベースは、「db」です。)

 

Dockerのコンテナの設定と、起動は、こんな感じで。

Dockerのコンテナ設定は、
docker-compose.ymlというファイルに記載して、行います。

docker-compose.ymlには、コンテナの設定情報を、書いていきます。

(さきほどでいう「web」「db」「nginx」の設定情報ですね)

 

そしてそのdocker-compose.ymlファイルを、

PowerShellから「docker-compose up」
と、コマンド実行することで、

さきほどのようなコンテナが作成されます。

 

ここで、少し、
docker-compose.ymlの中身を見てみましょう。

(ここでは、「へぇーー、こんな感じなんだなー」
くらいの感じで、理解はしなくてよいです。)

「web」「db」「nginx」に注目いただければな、と思います。


version: '3.8'

services:

  db:
    container_name: db
    image: mariadb:10.5
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512
    ports:
      - "3306:3306"
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      TZ: Asia/Tokyo
    env_file: .env

  web:
    container_name: web
    build:
      context: ./
      dockerfile: ./docker/web/Dockerfile
    ports:
      - '9000:9000'
    volumes:
      - ./app:/var/www/hope-trainers
      - ./docker/web/php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - db

  nginx:
    container_name: nginx
    image: nginx:stable-alpine
    ports:
      - '8080:80'
    volumes:
      - ./app:/var/www/hope-trainers
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web
      - db
volumes:
  db-volume:

 

このファイルを見ると、さきほどの

・「web」
・「db」
・「nginx」

が、設定されているのが分かると思います。(詳細はさておき。)

ここの設定で、
各サービスのバージョンや、設定ファイルの位置などを指定することで、

開発チーム内で、
誰もが、同じ環境構成で開発できるようになります。

 

個人開発でも、Dockerをいれるべき理由

さきほどもいったように、

Dockerを導入することで、

開発チーム内の誰もが、
誰もが、同じ環境構成で開発できるようになります。

 

開発チーム内での環境構成の統一は、大切です。

 

でも、

「個人開発なら、そんなことは考える必要ないのでは?」

という気もしてきます。

 

事実、僕もいままで
あまりDockerに興味がなかったのは、

開発チームでDockerを使っているならまだしも、

個人での開発のときは、
わざわざ、Dockerをつかって開発環境をつくるより、

自分のPCに、必要なものを、
どんどんインストールしてけばいいじゃん!

と、思っていたからでした。

 

とはいえ、今回、Dockerをいれてみて、

「個人開発でも、Dockerいれたほうが便利かも。」

と、思いました。

 

なにって、めっちゃPCの中がスッキリするんですよね!

イメージ的には、こんな感じ。

dav

 

個人で開発していても、
いくつもアプリをつくっていると、

どんどんPC内にモノが取っ散らかっていくようになります。

 

普段は、SQLiteしか使わないのに、
勉強したいな、と思って、

MySQLや、PostgreSQLもPCのなかにインストールされている。

でも、彼らを最後に動かしたのはいつだろう?

と思うと、思い出せない。

 

じゃあ消せばいいじゃん、と思いますが、

またいつか使うかもなー、と思うとけしずらい。

そんなこんなで、
PC内にいらない(使っていない)ものが増え、

だんだん収集がつかなくなっています。(これは僕だけ?)

 

しかし、Dockerを使うことで、
それぞれのアプリは、
コンテナごとの独立した世界のなかで構成されるようになります。

そのため、各アプリに必要なものが明確になり、
(不要なものは消せたりして、)とてもスッキリします。

これだけ整っていると、

他のひとに教えるときや、
自分でまた別のアプリをつくるときも、簡単にできます。

 

また、不要になったコンテナは、削除すれば、

(例えば)それに付属したmysqlやpostgresqlなんかも、
一緒に消えてくれるので、

PC内をより、クリーンに保てるし、

新しいことに挑戦するハードルが、ぐっと下がります。

 

Dockerのインストールに必要なもの

Dockerのインストールに必要なのは、この3つです。

・Docker
・Dokcer for Desktop
・Dokcer Hubへのユーザー登録する。

ちなみに、最初のこの画像は、
「Dokcer for Desktop」の画面です。

 

 

上の3つをインストールしたならば、

その後の、ざっくりとした手順は、

1.docker-compose.ymlを書く。※1

2.PowerShellで、docker-compose.ymlがあるディレクトリにいき、
「docker-compose -d –build」を実行する。

(2回目以降は、「docker-compose -d」でOK)

3.「Dokcer for Desktop」で、コンテナが立ち上がったことを確認する。

って感じです。

 

※1のところの、
docker-compose.ymlの詳しい書き方については、

「wordpress docker つくり方」
とか、

「ASPNET Core docker つくり方」
とか、調べてみて、

そちらを参考してみてください!

(きっとその過程で、Docker Hubが必要になるでしょう。)

例えば、
SymfonyのDocker環境構築では、
こちらの記事を参考に僕はやりました。

>> Docker ComposeとSymfonyを使って開発してみよう

 

覚えておいたほうがよいコマンドとして、

「docker-compose exec db /bin/bash」

があります。

これは、「db」サーバに接続するためのコマンドで、

「db」の部分は、
「web」や「nginx」に置き換えれば、

それぞれのサーバーにコマンド接続できます。

なにかとよく使います。

 

Dockerを知ると、PCが平和に。

ここまで読んでみて、いかがだったでしょうか。

少しでも、Dockerのある世界に、
魅力を感じていただけていたら、幸いです。

 

環境構築は、いつもいつも、
なぜか、詰まってしまっては、いたずらに時間を溶かしてしまう…。

そのような経験をしたことがあるひとも、多いのではないでしょうか。

 

無論、僕も、何時間も、

いや、何日も溶かしまくったことがあります……。

 

もちろん、その詰まりを解いていく過程のなかで、
ミドルウェアへの理解は深まったり、

インフラ系のひとたちとの交流が増え、
仲良くなれたり、

悪いことばかりではありませんが、

環境構築がもっとスムーズに終われば、
アプリケーション開発へ、よりエネルギーを注ぐことができます。

 

Dockerは、初回導入こそは、
(Docker自体の環境構築があるので)少し大変ですが、

それ以降は、
さまざまなアプリケーションの開発が楽にできるようになります。

 

そして…、

ふと、思いついたアプリを、実装したい。

新しい技術を、試してみたい。

アプリの質を高めて、お客さんによりよいものを届けたい。

そのような、
人間のクリエイティブな部分を助けてくれるツールと、

Dockerは、なってくれるでしょう。

 

「なんでもとにかくツール化すればいい!」

というものではありませんが、

単純な繰り返し作業は、ツールに任せ、

ひとは、ひとで、

人間にしかできないことをやっていきたいな、

と、僕は思います。

 

では、今日はこのへんで。

ありがとうございました!