今やエンジニアの界隈でスタンダードになった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 Imageというものがたくさん提供されています。
Docker Hubのアカウントを作成しましょう。
変わったことをする必要はないので、表示される指示に従って、アカウント作成してください。
ログイン後、Exploreをクリックすると以下のようにDocker Imageがたくさん表示されます。
一つ注意点ですが、特段の事情がない限りは、イメージ名の横に「official Image」や「Verified Publisher」のマークが付いているものを選びましょう。
知らない誰かが作ったDocker Imageを利用すると、悪意のあるパッケージが含まれている可能性もあります。これらのマークがついているものは、信頼のおける提供者のものなので、安心して利用できます。
今回は一番上に表示されている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 run
コマンドを叩くだけでDocker Imageがコンテナ化し、起動することができます。
$ docker run docker_test
Hello Docker!
ちゃんとCMD
で指定したecho 'Hello Docker!'
が実行されていることがわかります。
実際にRailsの環境構築するときなどは、もっと細かく設定して、サーバーの自動起動を行なったり、ホストマシンのディレクトリとコンテナ内のディレクトリを紐づけて作業したり、様々な設定を行う必要があります。
実際に環境構築を行う方法は、やりたいこと別に追々、記事に書いていこうと思います。
今回は「イメージ」と「コンテナ」について簡単に解説しました。
以上の流れはいつでも付き纏うのでイメージとコンテナと関係はしっかりと把握しておきましょう。