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をインストールすることができました。

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 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ブラウザをインストールしといてと指示するようなもの

 

 

コメント