この記事は?
Dockerの勉強を始めて1週間、Hyper-Vしか知らない同僚にDocker教えてくれと言われたので書きました。
せっかく勉強したのでQiitaで公開してみます。
誤り指摘やアドバイスがあれば、コメントをお願いします。
環境
- Windows10 version.1709
- Docker version 17.12.0-ce, build c97c6d6
用語説明
-
Dockerイメージ
仮想ディスク(=.vhdx)。後述するDockerレジストリでDockerイメージを共有することができる。
Dockerを使って何か作業する時のベースとなる。 -
Dockerコンテナ
Dockerイメージから差分ディスクを作って起動した仮想PC。
1つのイメージから複数のDockerコンテナを作ることができ、それぞれの同時実行も可能。 -
Dockerレジストリ
仮想ディスクを共有するための共有フォルダ。
Docker Hubという公式レジストリもあり、公式イメージとして、CentOSやUbuntuといったLinuxディストリビューションやNginxやHttpd、redisといったアプリケーション単位のイメージがある。
自分で作ったイメージをアップロードすることもできる。
オンプレミスなサーバとしても立てることができるらしい。 -
Dockerfile
Dockerイメージを作るためのソースコード。
無理やりHyper-Vでいうと仮想PC作成後に実行するためのスクリプトファイルみたいもの。
Hyper-Vで例えると、イメージから仮想ディスクを複製→VM起動→スクリプト実行→シャットダウンまでを一括で行って、新しい仮想ディスク(=Dockerイメージ)を作ることができる。
FAQ
-
要するにDockerって仮想PCみたいなもの?
→仮想PCのようにも使えますが、どちらかというとアプリケーション単位でコンテナを作るほうが良いようです。
そういう意味では、OSの機能まで含めてサイドバイサイドでアプリケーションを実行できるプラットフォームと呼ぶべきでしょうか。 -
Windows on Dockerは?
→できるようですが、まずはDocker入門としてここでは扱いません。
タスクバーのDockerアイコンを右クリックすると「Switch to Windows Containers」というメニューがありますので、あとは自分でググってください。
個人的にはWindows on Dockerはもう少し様子見です。
コマンド体系
他にあるけど、基本ということで。
使ってみる
事前準備
- Windows10を用意します。
- Hyper-Vを有効化します。
-
Docker for Windowsをインストールします。
(Chocolateyパッケージもあったけど、インストール失敗しました(2018-02-13現在)。) - Dockerのアカウント作成とログイン・・・は不要だったはず。
CentOSでbashを起動して、後始末まで
できるだけゴミを残さないようにがんばってみる。
1.公式イメージをダウンロードする
Docker HubからCentOSのDockerイメージをダウンロードします。
C:\Users\user> docker pull centos
Using default tag: latest
latest: Pulling from library/centos
af4b0a2388c6: Pull complete
Digest: sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
Status: Downloaded newer image for centos:latest
2. ローカルのイメージの一覧
ローカルに保存済みのイメージ一覧を表示させます。
先ほどPullしたcentosがあります。
C:\Users\user>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 5 weeks ago 207MB
3.コンテナを作って起動
pullしたイメージをベースにコンテナを作って起動します。
起動するプロセス(/bin/bash)も引数に指定します。
-it はインタラクティブに操作する場合に指定します。
C:\Users\user> docker run -it centos /bin/bash
4. 適当に触る
bashが起動するので、適当に触ります。
ほぼ空のCentOSなので本当に基本的なコマンドしか使えませんが。
終了は、コンテナが終了しちゃいますが、exitで抜けます。
「Ctrl+p」→「Ctrl+q」で終了せずに抜けることもできます。
[root@051c55f61ce6 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@051c55f61ce6 /]# ping -c 2 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.024 ms
--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1033ms
rtt min/avg/max/mdev = 0.020/0.022/0.024/0.002 ms
[root@051c55f61ce6 /]# exit
exit
5. コンテナ一覧
ローカルにあるコンテナ一覧を表示します。
先ほど起動したcentosのbashがあります。
-aをつけると終了済みのコンテナも表示、無しだと稼働中コンテナだけ表示されます。
CONTAINER ID (コンテナID)は重要なのではじめの数文字を覚えておきます。
C:\Users\user>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
051c55f61ce6 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago clever_leavitt
6. コンテナ削除
お試しで作っただけなのでコンテナは削除します。
引数はコンテナIDを指定しますが、他と識別できる初めの数文字で良いようです。
C:\Users\user>docker rm 05
05
C:\Users\user>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7. イメージ削除
使わずに残しておくとディスクを圧迫するので、不要なイメージは削除します。
後で使うなら削除しなくても良いですが。
C:\Users\user>docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
Deleted: sha256:ff426288ea903fcf8d91aca97460c613348f7a27195606b45f19ae91776ca23d
Deleted: sha256:e15afa4858b655f8a5da4c4a41e05b908229f6fab8543434db79207478511ff7
C:\Users\user>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
Dockerコンテナをサービスとして使う
上の例では、インタラクティブに操作していて、仮想PCのように使っていますが、
Dockerコンテナはサービスとしてバックエンドで起動するほうが一般的なようです。
ポイントは、「docker run -it 」ではなく「docker run -d」を使用します。
チュートリアル的に何か書こうと思いましたが、良い記事があったので、こちらを参考にしてください。