この記事は、Dockerに触れたことがないが興味がある、仕組みについてざっくり知りたいと方向けの記事です。
はじめまして。エンジニアリングソリューション事業部の「せきしん」です。
今回は「Docker」について基礎的なところを紹介をしたいと思います!
目次
- Dockerとは
- Dockerインストール for macOS
- Docker Composeとは
- 最後に
1.Dockerとは
Docker Inc.(旧DotCloud社)によって開発された、コンテナ技術を使ったアプリケーションの実行環境を構築/運用するためのプラットフォームです。
そもそもコンテナて何だ。。。。
Dockerでのコンテナとは、「ホストOS上に理論的な区画を作りアプリケーションを動作させるために必要なアプリケーションやライブラリなどを1つにまとめた箱」のようなものです。
従来の構成と何が違うの?
Docker以外でも従来からホストOS上に複数のアプリケーションを動作させる仕組みはありましたね。それらはどのような構成でどういった問題があったでしょうか?
上図のような場合、別々のアプリケーションが「同じリソース」、「同じIPアドレス」を利用するため制御が難しく、またミドルウェアやライブラリのバージョンを変更する際に互いに影響を受けないように注意する必要がありました。
これをすると、ゲストOSがアプリケーションごとに必要になるため、オーバーヘッドが大きく、「遅い」「重い」といった問題が発生していました。
Dockerでは上記のような問題が解消され、コンテナ毎にリソースを占有しているようにみせ、かつ、軽量で動作させることが可能になりました。
Dockerでコンテナを作るには?
コンテナを作るには「Dockerイメージ」を利用します。
Dockerイメージは簡単に言うとコンテナのベースのようなものです。
(作ったコンテナのスナップショットから新たにイメージを自作することもできます)
Docker Hub
Dockerイメージは公式サイトDocker Hubにて多数公開されています。
これらを利用すれば、「nginx」「MySQL」などのコンテナを簡単に構築することが可能です。
Dockerイメージってどんなメリットがあるの?
開発者がDockerイメージを生成するためのDockerfileを作成し、それを共有することで、Dockerがインストールされたサーバ(PC)であれば、イメージから同じ環境(コンテナ)を再現することができます。
皆さんはこんな経験をしたことはないでしょうか?
- 開発環境構築のために複数のアプリケーションをインストールして設定する必要があり時間がかかる
- 設定の仕方にバラつきがあり人によって正常に動作する人と動作しない人が出てくる
- 開発環境/テスト環境/本番環境でインフラ手動設定に差分があり開発環境では動作したがそれ以外の環境では動作しなかった
Dockerイメージを利用すれば上記のような問題も解決!
(プロジェクトに新規参画した新人のPC開発環境構築に1週間かかりました…なんてことからもおさらば!)
2.Dockerインストール for macOS
では実際にDockerをPCにインストールして使ってみましょう!
今回は以下のような環境で実施しました。
MacBook Pro 13-inch, 2018(2.7 GHz クアッドコアIntel Core i7) macOS Catalina(10.15.6)
手順はとても簡単
Docker Hub公式ページからインストーラ(dmg)をダウンロードしてインストールするだけです。
https://hub.docker.com/editions/community/docker-ce-desktop-mac/
Dockerが無事インストールできているか確認
% docker version
Client: Docker Engine - Community
Azure integration 0.1.15
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:41:33 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:49:27 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
上記のようにバージョンが表示されればOK!
試しに、MySQLのコンテナをDockerに構築してみましょう。
% docker run --name test-db -e MYSQL_ROOT_PASSWORD=root -d -p 23306:3306 mysql:8
■コマンドの説明 MySQL8のイメージをもとにtest-dbというコンテナを起動。 DBのrootアカウントのパスワードはrootとし、23306ポートでアクセスされた場合、コンテナ内部の3306に転送。 (MySQL8のイメージがローカルに無い場合はDocker Hubから自動ダウンロード)
コンテナがうまく起動しているかを確認しましょう。
% docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dec97162c2a5 mysql:8 "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 33060/tcp, 0.0.0.0:23306->3306/tcp test-db
試しにMySQL Workbenchで接続できるかを確認しましょう。
無事MySQLコンテナが起動して接続できることも確認しました!
起動したコンテナを停止したい場合
% docker stop {コンテナID}
-- 今回の場合、コンテナIDは「dec97162c2a5」
作ったコンテナを削除したい場合
% docker container rm {コンテナID}
-- 今回の場合、コンテナIDは「dec97162c2a5」
ね!とっても簡単ですよね!
コマンド一つでMySQLが構築できてしまう!
(公式サイトからインストーラーをダウンロードしてきて頑張ってた頃が懐かしい。。。)
以上がDockerのインストール方法&基本的な使い方ですが、
今回はもう一つ、Dockerの便利ツール「Docker Compose」を紹介したいと思います
3.Docker Composeとは
Docker Composeとは複数のコンテナで構成されるアプリケーションを定義して、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツールのことです。
(Dockerに最初から含まれているため追加のインストールや設定は不要です)
% docker-compose --version
docker-compose version 1.27.2, build 18f557f9
どんな時に役に立つの?
例えばDockerで、「nginx」と「MySQL」の2つのコンテナで構成されるWebアプリケーションを立ち上げたい時、それぞれコマンドを打ってコンテナを起動させるのはちょっと面倒(2つだけなら良いかもしれませんが、3つ4つのコンテナが必要な場合はそれだけ手間になります)。
Docker Composeを利用すれば1つのコマンドで定義した全てのコンテナの起動・停止を行ってくれます!
具体的にどうやってやるの?
Docker Composeは「docker-compose.yml」という名の定義ファイルを作成し、そこに以下のような情報をyaml形式で記述することで利用することができます。
- Dockerイメージをビルドするための情報
(使用するDockerfile、イメージ名など) - コンテナ起動するための情報
(ホストとの共有ディレクトリ設定やポートフォワードなどの起動オプションなど) - 使用するDockerネットワーク
では今回は例として「nginx」と「MySQL」を定義してみましょう。
version: '3'
services:
# DB(MySQL)
test-db:
image: mysql:8
container_name: test-db-container
restart: always
ports:
- "23306:3306"
volumes:
# データ保持
- ./db/mysql_data:/var/lib/mysql
environment:
# 環境設定
MYSQL_ROOT_PASSWORD: root
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
# nginx
nginx:
image: nginx:1.15.8
container_name: test-nginx-container
restart: always
ports:
- "80:80"
depends_on:
# 依存関係(先にtest-dbのコンテナが起動していること)
- test-db
Docker Compose実行
docker-compose.ymlファイルのあるディレクトリで以下のコマンドを実行します。
% docker-compose up -d
「nginx」と「MySQL」のコンテナが起動していることを確認します。
% docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
211dcae05e83 nginx:1.15.8 "nginx …" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp test-nginx-container
377456dd7416 mysql:8 "docker…" 6 minutes ago Up 6 minutes 33060/tcp, 0.0.0.0:23306->3306/tcp test-db-container
先ほどと同じようにMySQL Workbenchで接続を確認。
nginxはブラウザで接続してWelcomeページが表示されればOKです。
http://localhost/
Docker Composeで起動したコンテナたちを停止したい場合
% docker-compose stop
# docker-compose.ymlファイルのあるディレクトリで実行する必要があります
Docker Composeで作成したコンテナたちを削除したい場合
% docker-compose down
# docker-compose.ymlファイルのあるディレクトリで実行する必要があります
このようにDocker Composeを利用すれば複数のコンテナ操作を簡単に行えます。
また、docker-compose.ymlを共有することで環境構築もしやすくなりますね。
以上がDockerの便利ツール「Docker Compose」の紹介でした。
4.最後に
近年ではDocker + Kubernetesを利用したマイクロサービスがトレンドになっています。
本記事では、そんなマイクロサービスと親和性の高いコンテナ技術の中でメジャーなDockerの基礎的な内容紹介でした。
この記事を読んだ方が、Dockerに興味を持ち、仕事やプライベートでの技術&生産性向上に繋がったら嬉しく思います。
COLORS by m/f は、AIを武器に企業のDX推進をサポートする
株式会社エム・フィールドとグループ会社の情報満載のオウンドメディアです。
挑戦者求む!
エム・フィールドグループでは、新卒・中途採用を積極的に行なっています。
Webアプリケーションエンジニア、Python開発プロジェクトリーダー、
クラウドエンジニア、セールスエンジニア、営業ルートセールス、
ネットワークエンジニア、PM/PL候補システムエンジニアを募集しております。
https://www.ambl.co.jp/recruit/
新卒採用情報はこちら!
https://job.mynavi.jp/22/pc/search/corp200590/outline.html
D X、A I、クラウドに関する企業研修、新卒研修を提供しています。
未経験からIT業界へ。働きながらキャリアチェンジができる。
次世代I T人材を未経験から育てるトレーニングセンターを開講しています。
ただいま「5日間お試し授業」実施中。
https://www.ambl.co.jp/recruit/trainingcenter/trial/