MacでDocker環境を構築する【初心者向け】

今やエンジニアの界隈でスタンダードになったDockerですが、慣れるまでは概念が分かりにくいかもしれません。

初めて触るものは概念を完璧に理解しようとするよりも、あまり正確ではなくても、概念をはっきり理解することが重要だと思います。

この記事ではDockerの導入と基本の操作方法について解説します。

Dockerとは?

DockerはDocker社が開発している仮想化技術です。

Dockerの最大の特徴はコンテナと呼ばれるミドルウェアの環境をまとめたものがあることです。

よく仮想マシンが比較に出されますが、初心者のうちは「コンテナと仮想マシンは似てるけど違うもの」くらいの認識で問題ありません。強いて言えば「仮想マシンよりコンテナは軽い!」という知識くらいで十分だと思います。少なくとも私はこの違いを今まで意識したことはありません。

Dockerの環境構築

Dockerの環境を作るのは非常に簡単です。まずはDocker for Macをダウンロードしましょう。

https://docs.docker.com/desktop/mac/install/

自らのMacのCPUに合った方を選べばOKです。もし、分からない方は、左上のリンゴマークをクリックして、「このMacについて」を開けば、プロセッサが分かります。

ダウンロード後は指示に従いながらインストールして、起動しましょう。ツールバーにDockerのロゴが出ていればOKです。Dockerのロゴが動いている間は起動中なので、少し待ちましょう。

Dockerの起動が終わったら、dockerコマンドがインストールされているかを確認しましょう。

$ docker -v
Docker version 20.10.11, build dea9396

このように表示されればOKです!

Docker Hubのアカウントを作る

Docker HubではコンテナのベースになるDocker Imageというものがたくさん提供されています。

https://hub.docker.com/

Docker Hubのアカウントを作成しましょう。

変わったことをする必要はないので、表示される指示に従って、アカウント作成してください。

ログイン後、Exploreをクリックすると以下のようにDocker Imageがたくさん表示されます。

一つ注意点ですが、特段の事情がない限りは、イメージ名の横に「official Image」や「Verified Publisher」のマークが付いているものを選びましょう。

知らない誰かが作ったDocker Imageを利用すると、悪意のあるパッケージが含まれている可能性もあります。これらのマークがついているものは、信頼のおける提供者のものなので、安心して利用できます。

Dockerイメージを作る

今回は一番上に表示されているUbuntuのイメージから、コンテナを作成しましょう。

まず、適当なディレクトリに移動して、以下のようなDockerfileを作成します。

FROM ubuntu

CMD echo 'Hello Docker!'

FROMではベースとなるDocker Imageを指定します。ここではUbuntuのDocker Imageをベースに作るので、ubuntuを指定します。このIDはDocker HubのDocker Image名を記述すればOKです。

CMDは後述のdocker runを実行したときに叩くコマンドを書いておきます。

Dockerfileには他にもRUN, ENV, WORKDIRなど様々な設定を書くことができます。具体的にどのような設定があるのかはDockerの公式ドキュメントを参照してください。

このDockerfileを新たなDocker Imageを作りましょう。Docker Imageを作成するにはdocker buildコマンドを使います。

$ docker build ./ -t docker_test
[+] Building 1.0s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                                     0.0s
 => => transferring dockerfile: 80B                                                                                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                        0.0s
 => => transferring context: 2B                                                                                                                                                                                                          0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                                                                                         0.9s
 => CACHED [1/1] FROM docker.io/library/ubuntu@sha256:8ae9bafbb64f63a50caab98fd3a5e37b3eb837a3e0780b78e5218e63193961f9                                                                                                                   0.0s
 => exporting to image                                                                                                                                                                                                                   0.0s
 => => exporting layers                                                                                                                                                                                                                  0.0s
 => => writing image sha256:7a10ba0980e095bdde948f49566da1f62be990f58b2554579bdad692f5639f3f                                                                                                                                             0.0s
 => => naming to docker.io/library/docker_test

それではDocker Imageを作成できたか確認しましょう。Docker Imageに対する操作はdocker imageコマンドで行います。

$ docker image list
REPOSITORY                      TAG            IMAGE ID       CREATED        SIZE
docker_test                     latest         7a10ba0980e0   9 days ago     72.8MB

ちゃんとdocker_testというイメージができていますね。docker imageコマンドでは他にもimageを削除したりダウンロードしたり様々な操作ができます。docker image --helpコマンドを叩けば、どのような操作ができるか見ることができるので、軽く目を通しておくといいかもしれません。

Docker Imageを実行する

ここまで出来たら、docker runコマンドを叩くだけでDocker Imageがコンテナ化し、起動することができます。

$ docker run docker_test
Hello Docker!

ちゃんとCMDで指定したecho 'Hello Docker!'が実行されていることがわかります。

まとめ

実際にRailsの環境構築するときなどは、もっと細かく設定して、サーバーの自動起動を行なったり、ホストマシンのディレクトリとコンテナ内のディレクトリを紐づけて作業したり、様々な設定を行う必要があります。

実際に環境構築を行う方法は、やりたいこと別に追々、記事に書いていこうと思います。

今回は「イメージ」と「コンテナ」について簡単に解説しました。

  1. 公開されているDocker Imageを元にオリジナルのDocker Imageを作成する
  2. オリジナルのDocker Imageを元にコンテナ化して起動する

以上の流れはいつでも付き纏うのでイメージとコンテナと関係はしっかりと把握しておきましょう。