Dockerって何?詳しく初歩からDockerの使い方を説明してみる

Docker

Docker(ドッカー)とは何か?メリットは何?

初心者がプログラミングやWebアプリケーションを作成する際に最初につまずくのは環境構築を行うことです。

「初心者」は、と書きましたが、マニアックなことをしようとすると、依存するライブラリをそろえたりバージョンの違いを解決したりと、上級者ですら多大な時間を費やして環境構築を行ってきました。

Dockerはこうした環境構築の「悩み」を解決してくれます。

誰かがうまいこと設定してくれた環境をDocker Hubからダウンロードしてきて自分が使う!みたいなことができるわけです。

ソフトウェアのインストールを考えてみます。

Dockerを使用することで、環境構築や依存関係の解決などに頭を悩ますことなく、ソフトウェアのインストールと実行が非常に容易に行うことができるようになります。

ではDockerとは何なのでしょうか?

Dockerはコンテナを動かすためのプラットフォームです。

Docker Client
Docker Server
Docker Machine
Docker Images
Docker Hub
Docker Compose

これらのサービスをまとめてDockerと呼んでいます。

イメージ (Image) とコンテナ (Container)

dockerはイメージをダウンロードして、そこから複数のコンテナを複製します。

DockerをMacにインストールする

Dockerをインストールするのは簡単です。

  1. docker.comでDocker Hub(ハブ)アカウントを作成する
  2. MacにDockerをダウンロード(.dmgファイル)してインストールする

ターミナルでdockerがインストールされたかを確認

$ docker version
Client: Docker Engine - Community
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:47:43 2018
OS/Arch: darwin/amd64
Experimental: falseServer: Docker Engine - Community
Engine:
Version: 18.09.0
API version: 1.39 (minimum version 1.12)
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:55:00 2018
OS/Arch: linux/amd64
Experimental: true

こんな感じでバージョン情報が表示されればインストール完了です。

Dockerを試してみる

docker run hello-world

hello-worldというイメージからコンテンを作成せよという命令です。

Docker Clientに指示を出し、Docker ClientはDocker Severにhello-worldというイメージがあるか問い合わせます(実際に存在するイメージです)。
以前にダウンロードしたことがあれば、イメージはキャッシュとしてあなたのパソコンに保存されているのでそれが使われます。イメージが無ければ、Docker Hubからダウンロードすることになります。

redisイメージをダウンロードしてコンテナを起動する

データベースであるredisイメージをダウンロードしてコンテナを起動する。

docker run -it redis

これでredisを起動する。

-itオプションはコンソールに結果を出力するという意味です。

Dockerをいろいろと試してみる

実際にいろいろと試してみてDockerの挙動を確認してみます。

docker run busybox echo hi there
hi there
busyboxというイメージから複製されたコンテナ上でecho hi thereが実行されています。
単純に"hi there"と表示する。
 
busyboxというイメージから複製されたコンテナの中身を確認してみます。
docker run busybox ls
bin
dev
etc
home
proc
root
sys
tmp
usr
var
とlinuxのrootのように様々なディレクトリがあることがわかります。
 

ところで、docker run って一体何?

dockerは常にイメージからコンテナを複製して何かを行います。

docker runは docker create とdocker startを組み合わせたものです。

docker run = docker create + docker start

docker createでイメージからコンテナを複製し、docker startでコンテナを起動します。

ですので何らかの理由で停止したdocker コンテナを再起動することができます。

dockerコンテナを再度実行する時

docker start -a [container id]

dockerの現在の状況を確認するにはdoker psを使う

稼働中のコンテナを確認する

docker ps

停止中のコンテナも含めて確認する

docker ps --all

稼働中でない全てのDockerコンテナ・イメージ・キャッシュを削除してスッキリしたい時

稼働中でない全てのDockerコンテナ・イメージ・キャッシュを削除します。

環境をスッキリきれいにしたい時に使います。

何度もdocker buildしてdocker runしていると不要なイメージやイメージのキャッシュ、コンテナなどを削除します。

docker system prune
  • 全ての停止(stopped)しているコンテナ
  • 使われていない全てのネットワーク
  • 不要なイメージ
  • 全てのキャッシュ

が削除されます。

docker logs

docker startで実行しているコンテナの標準出力を読み込みます。

docker logs [container id]
コンテナのIDは docker ps --allで確認できます。

dockerコンテナを停止する

docker stop [container id]

SIGTERMがプロセスに送られる。

dockerコンテナをkillする

docker kill [container id]

SIGKILLがプロセスに送られる。

docker exec

コンテナ内でコマンドを実行するためには docker exec -itを使用します。-itは -i -tの2つのフラッグを一つにくっつけた物で、

コンテナの標準入出力をターミナルに接続し操作できるようにしたものです。

docker exec -it [コンテナのID] redis-cli

とすると、ターミナルでコンテナ内のredis-cliを実行することができるようになります。

docker exec -it [コンテナのID] sh

シェルモードを終了するには
Control + Dもしくは exitとタイプします。

docker run でも当然同様のことができて、busyboxイメージを立ち上げてshを実行します。

docker run -it busybox sh

「busyboxというイメージからコンテナを立ち上げて、その中でシェルモードを実行する」という意味です。

Docker ファイルを作成する

redisが動作するイメージを自分で作成してみましょう。

mkdir redis-image
cd redis-image

Dockerfileを作成します。

Dockerfileというファイルを作成した場所で、

docker build .

Successfully built [ID]

と出るのでこのIDを使って

docker run [ID]

として実行します。

Dockerfileがやっていることとは?

OSの入っていない新品のPCがあったとしてこれにChromeブラウザをインストールしといてと指示するようなものと覚えておけばOKです!

Dockerを学習するならエンジニアの中で人気のあるUdemy(ユーデミー)の講座がオススメ

プログラミングや周辺技術を学習するならUdemy(ユーデミー)というオンライン学習プラットフォームがわかりやすくてオススメです。

Udemyは新しい技術をサックと学習するのに最適で、エンジニアの間で密かに人気が高まってきています。

Udemyだとセール期間を狙えば1300円ぐらいで様々な講座を購入できます。

プログラミング等の専門書を購入するより安くて学習効果は高いです。

分かりやすくてオススメな講座は英語の物が多いですが、中には日本語の物もあります。

英語もそれほど難しくないですし、英語字幕を表示することができますので、ちょっと英語ができる方には英語の講座もオススメです。

コメント