- Dockerとは?
- Dockerの仕組みやメリット、基本的な使い方とは?
- Docker-composeとは?
本記事ではこのような疑問を解決します。
エンジニアの世界に飛び込んだら避けては通れないツールがDockerです。
今回は初心者のためにDockerについてのあれこれを解説していきます。
Dockerとは?
Dockerとはコンテナ技術を用いてアプリケーションの開発やデプロイを簡単に行う仕組みのことです。
ネットや書籍などで様々な説明がなされていますが、
「Dockerって何?」と聞かれたら、個人的にこの説明が1番しっくりきます。
もっとざっくり言うと、「サーバーから独立させて仮想環境を動かせる仕組み」です。
Dockerのメリット
Dockerのメリットは以下の通りです。
・コマンドを何行か打つだけで仮想環境を構築できる
・どのサーバーやPCでも同じ環境を立ち上げることができる
・開発環境ごとデプロイすることができる
・コードで管理できるため、環境の構築や配布がやりやすい
Dockerの仕組み
Dockerの仕組みを理解するためには以下の3つの関係を確認する必要があります。
・Dockerエンジン
・Dockerイメージ
・Dockerコンテナ
○Dockerエンジン
Dockerエンジンとはこの後説明するDockerイメージとDockerコンテナを管理するアプリケーションのことです。
簡単にいうと、Dockerそのものになります。
ちなみに、中身ではクライアントであるDockerクライアントからサーバーであるDockerデーモンのAPIへアクセスすることによって、Dockerイメージ・コンテナに関する操作を行います。
中身の動きはちょっと難しそうなので無視でOKです。
○Dockerイメージ
Dockerイメージとは仮想環境の種類のことです。
もっと言うと、次に説明するDockerコンテナを作成するための雛形のことです。
例えば、Nginx環境を作りたい場合はNginxのDockerイメージを使う、MySQL環境を作りたい場合はMySQLのDockerイメージを使う、といった感じになります。
そして、このDockerイメージはレジストリと呼ばれるDockerイメージを管理している場所から入手することができます。
レジストリとして有名で世界最大なのがDocker社が提供しているDockerHubです。
DockerHubでは欲しいイメージ名(環境名)を検索し、イメージの詳細ページでコマンドをコピーし、ターミナル等で実行することでDockerイメージを入手できます。
iPhoneでいうところのAppストアですね。
○Dockerコンテナ
Dockerコンテナとは実行されるプロセスそのもののことです。
DockerコンテナはDockerイメージを使って立ち上げます。
オブジェクト指向プログラミングに例えると、イメージがクラスでコンテナがインスタンスといった感じです。
ちなみにDockerイメージからDockerコンテナを立ち上げることを「ビルドする」と呼びます。
Dockerにおける上記3つの関係は、
Dockerエンジンが土台にあり、その上にDockerイメージが乗っかって、Dockerイメージ内にDockerコンテナが置いてあるというイメージです。
さらにわかりやすくゲームに例えると、
Dockerエンジンがゲーム機、Dockerイメージがゲームソフト、Dockerコンテナがセーブデータという関係になります。
Dockerのインストール
DockerはホストOS(macOSやWindows、Linuxなど)上にインストールします。
現時点でDockerはLinux上でしか動かないため、MacやWindowsでは専用のソフトウェアが必要です。
ここでは簡単にmacOSやWindows、Linuxそれぞれのインストール方法を示します。
○macOS
こちら(Docker公式サイト)からインストーラーをダウンロードしてインストールします。
○Windows
Windowsでは事前にWSL2(Windows上でLinux用システムを動かせる設定)を有効にしておく必要があります。
以下のドキュメントを参考にインストールしてください。
・WindowsにDockerをインストールする手順(Docker)
・WSL2の設定(Microsoft)
・Windows用Dockerインストーラー(Docker)
○Linux
各Linuxディストリビューションのパッケージ管理ツールでインストールします。
例えば、aptやyumなど。
Dockerの操作方法
ここではDockerの基本的な操作方法を示します。
Dockerはバージョン1.13のリリースにおいて「docker [何を] [どうするか]」の体系(新体系)にコマンドが再編成されました。
旧体系のコマンドも引き続き使用できますが、Docker社は新体系のコマンドを推奨しています。
・(レジストリから)イメージを取得する
旧)$ docker pull イメージ名
新)$ docker image pull イメージ名
・取得済みのイメージを確認する
旧)$ docker images
新)$ docker image ls
・コンテナの作成と実行
旧)$ docker run イメージ名など
新)$ docker container run イメージ名など
※runはbuildとstartの2つを内部的に実行する
・コンテナを停止する
旧)$ docker stop コンテナ名
新)$ docker container stop コンテナ名
・コンテナを再起動する
旧)$ docker start コンテナ名
新)$ docker container start コンテナ名
・コンテナを削除する
旧)$ docker rm コンテナ名
新)$ docker container rm コンテナ名
Dockerfile
Dockerイメージは基本的にDockerHubから入手します。
しかし、DockerHubに欲しいイメージがない、自分の思い通りのイメージが欲しい、といった場合はイメージを自分で作ることができます。
そして、Dockerイメージを作るために使用するのがDockerfileです。
DockerfileではOS名やコマンドなどいくつか種類があるDockerコードを記述します。
ちなみにDockerfileの中身はこんな感じです。
FROM ubuntu:21.04
LABEL version=“2.0”
LABEL description=“Apacheサーバー”
RUN apt-get update
RUN apt-get install -y apache2
CMD [“apachectl”, “-D”, “FOREGROUND”]
Docker-compose
Dockerでは一般的に複数のコンテナを同時に立ち上げて使います。
ただ、それぞれのファイルごとに起動などの操作を行うのは面倒です。
そんな問題を解決してくれるのがDocker-composeです。
Docker-composeは複数のコンテナを一元管理する仕組みのことです。
Docker-composeは別途インストールをしてymlファイルで管理していきます。
ちなみにymlファイルの中身はこんな感じ。
version: ‘2’
services:
db:
image: mysql
web:
build: .
command: bundle exec rails s -p 3000 -b ‘0.0.0.0’
volumes:
- .:/myapp
ports:
- “3000:3000”
depends_om:
- db
なお、Docker-composeの基本的な操作方法は以下の通りです。
・複数のコンテナをビルドする
$ docker-compose build ―no-cache
・複数のコンテナを起動する
$ docker-compose up
・複数のコンテナを同時停止する
$ docker-compose down
Dockerによるディスク容量に注意する
Dockerでは使用していないオブジェクト(コンテナやイメージなど)を明示的に削除命令しない限り、削除されません。
そのためPCやサーバー上のディスク容量を大きく喰ってしまう可能性があります。
そんな時は以下のコマンドを実行します。
$ docker system prune
まとめ
以上がDockerの概要や仕組み、メリット等になります。
Dockerについての理解が深まったのではないでしょうか。
本記事を入門として、公式ドキュメント等を読みながらDockerをいじってみてください。
最後までお読みいただきありがとうございました。