MacOSXでDockerに入門してみた

今年のお盆休みはなんやかんやでDockerを触っていました
備忘用に設定メモを残しておく

Docker Community Edition for Macをインストールする

まずはDockerをインストールしないと始まらない
Docker Community Edition for Macのページにアクセスして、ダウンロードして、インストールする

  • サイトにアクセスする
    サイトにアクセスする

  • ダウンロードするためにはログインしておく必要がある
    ダウンロードするためにはログインしておく必要がある

  • おはじめの方はユーザー登録が必要らしい
    おはじめの方はユーザー登録が必要らしい

  • 届いたメールでアカウントを有効化する
    届いたメールでアカウントを有効化する

  • ログインしたらダウンロードする
    ログインしたらダウンロードする

  • インストールはコピーするだけ
    インストールはコピーするだけ

  • 「アプリケーション」フォルダの「Docker」をダブルクリックして起動する
    「アプリケーション」フォルダの「Docker」をダブルクリックして起動する
    特権アクセスを求められるのでパスワードを入力する

Dockerを使ってみる

Dockerをターミナル(黒い画面)で操作する

インストールされたバージョンを確認する

$ docker version
Client:
 Version:           18.06.0-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        0ffa825
 Built:             Wed Jul 18 19:05:26 2018
 OS/Arch:           darwin/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.0-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       0ffa825
  Built:            Wed Jul 18 19:13:46 2018
  OS/Arch:          linux/amd64
  Experimental:     true

動作確認をする

hello-worldコンテナを動かしてみる

$  sudo docker run --rm hello-world
Password:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

コンテナの取り扱い方のまとめ

コンテナのリスト

$ docker ps -a

動作しているコンテナのみのリスト

$ docker ps

動作しているコンテナを停止する

$ docker stop [CONTAINER ID]

停止しているコンテナを動かす

$ docker start [CONTAINER ID]

動作しているコンテナに入ってコマンドを実行する

$ docker exec -it [CONTAINER ID] /bin/bash

コンテナを削除する

$ docker rm [CONTAINER ID]

ローカルに保持しているイメージのリスト

$ docker images

イメージを削除する

$ docker rmi [IMAGE ID]

流れを一通り体験してみる

コンテナのイメージを取ってきて動かしてみる

$ docker run -it ubuntu:18.04 /bin/bash
Unable to find image 'ubuntu:18.04' locally
18.04: Pulling from library/ubuntu
c64513b74145: Pull complete
01b8b12bad90: Pull complete
c5d85cf7a05f: Pull complete
b6b268720157: Pull complete
e12192999ff1: Pull complete
Digest: sha256:3f119dc0737f57f704ebecac8a6d8477b0f6ca1ca0332c7ee1395ed2c6a82be7
Status: Downloaded newer image for ubuntu:18.04
root@0e7310f4998e:/#

ローカルにイメージを持っていなければ取ってきてから実行してくれる
最後の行のroot@0e7310f4998e:/#はコンテナの中のシェル

コンテナの中でなんかやってみる

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"

# apt update
# apt -y install nano
# nano test.txt

コンテナの中から抜ける

# exit

抜けたコンテナの中に入る

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0e7310f4998e        ubuntu:18.04        "/bin/bash"         8 minutes ago       Exited (0) 20 seconds ago                       condescending_brown

$ docker start 0e7310f4998e
$ docker exec -it 0e7310f4998e /bin/bash
# nano test.txt
# exit

コンテナの中でやったことをなかったことに(新しいコンテナで作業をする)

$ docker run -it ubuntu:18.04 /bin/bash
# nano text.txt
bash: nano: command not found
# exit

今のコンテナの状態をイメージにしておく

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0e7310f4998e        ubuntu:18.04        "/bin/bash"         8 minutes ago       Exited (0) 11 minutes ago                       condescending_brown

$ docker commit 0e7310f4998e ubuntu:customized
sha256:4c23165459870ace880c583e1c4d2593f9bf48bfee3de225d797c2acd1e190e3

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              customized          4c2316545987        18 seconds ago      126MB
ubuntu              18.04               735f80812f90        2 weeks ago         83.5MB

作成したコンテナイメージを使う

$ docker run -it ubuntu:customized /bin/bash
# nano test.txt
# exit

いらなくなったコンテナの後始末

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                       PORTS               NAMES
7dc49d0b4170        ubuntu:customized   "/bin/bash"         About a minute ago   Exited (0) 7 seconds ago                         distracted_poincare

$ docker rm 7dc49d0b4170

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                       PORTS               NAMES

いらなくなったコンテナイメージの後始末

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              customized          4c2316545987        4 minutes ago       126MB
ubuntu              18.04               735f80812f90        2 weeks ago         83.5MB

$ docker rmi 4c2316545987
Untagged: ubuntu:customized
Deleted: sha256:4c23165459870ace880c583e1c4d2593f9bf48bfee3de225d797c2acd1e190e3
Deleted: sha256:35beba4702b177f96142c46b19dadd22ec96b4bd05b6f42e21101b296d3e7031

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               735f80812f90        2 weeks ago         83.5MB

まとめ

  • Dockerを使いこなすといろいろなことができそう
  • Dockerfileを書くところまで行かなくてもDockerの恩恵は受けられそう