Dockerとは?概要・頻出コマンド使い方を解説!ドキュメント有

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

これから Docker の解説記事を書いていこうと思います。
今回は Docker 概要docker コマンドについて解説します。

Docker とは? Container とは?

Docker はローカル開発環境を作るツールです。

Docker の特徴として Container (コンテナ) という機能があります。
荷物を運ぶため、船にたくさん積まれるあのコンテナのイメージです。

たとえば LAMP 環境を Container で積み上げるには

LAMP (Linux / Apache / MySQL /PHP) 環境を構築したいとしましょう。
一例ですが、以下のような Container を用意すれば実現できます。

  • CentOS に PHP と Apache が入った Container
  • MySQL が入った Container

Docker ではひとつの仮想環境に対して、
このような Container を機能別に積み上げていきます。

1 つの Container の中にすべての機能を詰め込んでもいいのですが、
管理が大変になるので Container を分けるのが一般的です。

Docker はどんな環境でも動作する

Docker とその仮想環境はどこでも動きます。
つまり他の誰かの PC ・サーバでも同じ環境を再現することが可能です。

これを冪等性 (べきとうせい) があると言います。
また、環境の立ち上がりが早いところも人気の理由です。

つまり…

PC の OS が Windows でも Mac でも Ubuntu でも Debian でも Science Linux でも、
「CentOS 6.5 上の yum でインストールした Apache を動かす」
といった環境構築を常に再現できる、ということを意味します。

Docker はそこそこ覚えることがある

  • docker コマンド
    • 及び Dockerfile の作成方法
  • docker-compose コマンド
    • 及び docker-compose.yml の作成方法

Docker はすごく便利みたいに言われますが、
上記 4 つのことができないといけないので学習コストはそこそこ高いです…

全部一度にやろうとするのは (僕的にも) 大変なので、
ここからは docker コマンドについて解説していきます。

前提条件

初心者は Linux コマンドGit コマンドを覚えるのが先です。
そもそも環境構築するのに必要な知識ですし、
これらが分かっていると Docker コマンドのイメージも湧きやすくなります。

逆にこれらが分かっていると、
docker コマンドと docker-compose コマンドはノリでなんとかなります。
その場合 Dockerfiledocker-compose.yml の書き方だけ押さえればよいでしょう。

ドキュメント

Image と Container

Docker は Image というものを使って Container と呼ばれる開発環境を作ります。

Docker を浮き輪で例えてみる

あんまり良い例えが思い浮かばなかったんですが、
とりあえず浮き輪を想像してください。

普段、浮き輪の空気は抜いた状態で持ち運んだり保管しますね。(これが Image)
海やプールで遊ぶときは浮き輪に空気を入れて膨らませますね。(これが Container)

Docker は通常 Image でやりとりします。
環境を使いたいときだけ Image から Container に実体化します。

自分で 0 から開発環境を作る必要はありません

Image は Docker Hub からダウンロードできます。

たとえば CentOS  Image をダウンロードして、
Container 化して、そこに yum install php ということもできます。

しかし PHP 入りの  CentOS Image も Docker Hub で配布されているので、
最初からこちらを使った方が簡単です。

さらに色々と追加した個人公開の Image もあるので色々と探してみるといいでしょう。

docker コマンドは Image 系と Container 系に分かれる

初心者が docker コマンドでつまづく理由のひとつは、
Image 関連と Container 関連のコマンドの区別がめんどくさいからです。

今回は頻出コマンドをこの 2 つに大別して簡単な説明を載せておきました。
詳細リンクも貼っているので、そちらでオプションなど確認してください。

コマンドでヘルプ情報を見るとき

ヘルプを見たいときは docker
オプションを知りたいときは docker コマンド --help と入力してください。

# 使える docker コマンドが表示される
docker

# docker ps コマンドが使えるオプションが表示される
# --help でも help でも OK
docker ps --help

Image 系 docker コマンド

Image 一覧

Image 取得・作成

Image 削除

Image から Container を作成する

  • docker run [イメージ] --name [作成するコンテナ名]
    • Image を実行して Container を作成する
    • イメージ後に UNIX コマンドを続けると、そのコンテナ環境からコマンド実行する
      • sudo docker run centos echo "hello world"
    • docker run -d [イメージ名]
      • バックグラウンド処理としてタスク実行する
      • -d は detach の略
        • docker run -d centos free -s 3
        • バックグランド処理で 3 秒ごとにメモリ確認する例
    • http://docs.docker.jp/engine/reference/commandline/run.html

作成した Container の中にすぐ入る

  • docker run -i -t [イメージ] [シェル]
    • -i は Interactive の略
    • -t は Terminal の略。Container の中でターミナルが起動する
    • シェルは /bin/bash などを指定する
    • alpine のような軽量コンテナだと /bin/ash というシェルを使う
sudo docker run -i -t centos /bin/bash

Docker Hub リポジトリに Image を預ける

docker push することで、他のマシンは docker pull でその Image を取得できるようになります。
そして docker run であなたと同じ Container を再現することができます。

docker push するまでの流れ

Docker Hub にログインする
# Docker hub にログインする
sudo docker login
docker tag でイメージ名を変更する

Image 名は ユーザ名/イメージ名で記述されますが、docker push 時、
このユーザ名が Docker Hub 上のログインユーザと一致していないとエラーになります。

# イメージ名を確認する
sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
daike/httpd         latest              9b829cbdbabe        41 minutes ago      302MB

# ikeda/httpd に変更する
sudo docker tag 9b829cbdbabe ikeda/httpd
docker push でイメージをリモートに預ける
# プッシュ
sudo docker push ikeda/httpd

その他のコマンド

検索結果は最大 25 件しか表示されないですし、
複数キーワードで絞り込むこともできないので Docker Hub を使ったほうがいいです

Container 系 docker コマンド

Container 一覧

  • docker ps
    • 実行中の Container ID と状態を表示する
    • ここで表示される Container ID を使って、他のコマンドの Container 指定する
    • http://docs.docker.jp/engine/reference/commandline/ps.html
    • docker ps -a
      • 実行終了した Container も表示する
      • a は all の略
    • docker ps -a -n=[表示件数]
      • 件数を絞って Container を表示する

Container 削除

# コンテナ ID 確認
docker ps -a

# コンテナ ID の指定
docker rm b6206b44db6f

# 消えていれば OK
docker ps -a

Container の中に入る

Container のシェルに接続する方法は docker attachdocker exec の 2 つ

# attach でコンテナの中に入る
docker attach --sig-proxy=false コンテナ

# exec でコンテナの中に入る
docker exec -it コンテナ シェル

docker attach は Container を停止させてしまうことがあるのであまり使いません。

docker attach

  • docker attach [コンテナ]
    • コンテナの元になっているプロセスにアクセスする
      • つまりログアウトすると Container そのものが終了する
    • コンテナがシェルを実行している場合、シェルに接続する
    • コンテナが Deamon しか起動していない場合、Deamon の標準入出力に接続する
    • http://docs.docker.jp/engine/reference/commandline/attach.html
  • docker attach --sig-proxy=false [コンテナ]
    • --sig-proxy=false を付けるとログアウトしても Container は終了しない

docker exec

  • docker exec -it [コンテナ名] シェル
    • 新規プロセスを立ち上げてアクセスする
    • -it オプションをつけるとログアウトしても Container は終了しない

Container を停止する

以下のどちらでもよい。

sudo docker kill d09872c6438d
d09872c6438d

sudo docker stop d09872c6438d
d09872c6438d

# 確認
docker ps -a

停止した Container を再開する

Container ログの確認

Dockerfile 篇につづく、という話

docker コマンドを紹介しましたが、コマンドだけで何でもやりきるのは大変です。

次回の Dockerfile 篇で詳しく説明しますが、
たとえば PHP を動かす Container を作成しようと思ったら以下のコマンドを叩きます。

# コンテナ作成
docker run -d
    -p 80:80
    --name myapp
    -v $(pwd):/var/www/html
    php:7.0-apache

…毎回こんなコマンド打ってられないですよね。

自分だけならまだしも、
他の Docker ユーザにこのようなコマンドを伝えるのは面倒くさいです。

実際の業務では Dockerfile にすべて定義しておきます
なので Dockerfile の記述方法は docker コマンドを覚えるより重要です。

というわけでつづく。

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメントを残す

*