Mac上でUbuntuを使用する時の【超基本】Dockerコマンド手順書

#はじめに
「普段Macを使ってるんだけど、用途や目的に応じてUbuntuも使いたいんだよなー…」と思って、デュアルブートやらVirtualBoxやらをトライしてきたんですが、まず手軽にMac上でUbuntuを使うのであれば、Dockerを使うのが良いという結論に至りました！
これまでDockerという名前は聞いたことあるけど、意外とDockerをちゃんと使ったこと無い…というエンジニアは、実は多いんじゃないかと思います！
僕は過去に仕事でDockerを使ったことがあるんですが、割と入社してすぐだったということもあり、Dockerについてよく分からないまま数年経ってしまいました…
ということで今回を機に、【超基本】Dockerコマンド手順書を作って、「Dockerの基本はマスターできた！」と言える状態にしたいと思います！

#1. Dockerイメージの検索
まず始めに、Docker HubにあるOSイメージを検索します。
Docker Hubとは、ユーザーが作成したDockerコンテナを公開したり共有することができるサービスです。

```terminal
$ docker search ubuntu
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   10214               [OK]                
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   366                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   236                                     [OK]
consol/ubuntu-xfce-vnc                                    Ubuntu container with "headless" VNC session…   197                                     [OK]
...
```

#2.Dockerイメージのダウンロード
Docker Hubで公開されているDockerコンテナは、自由にダウンロードして、自分のサーバーにDockerイメージを保存することができます。 

```terminal
$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete 
c1bbdc448b72: Pull complete 
8c3b70e39044: Pull complete 
45d437916d57: Pull complete 
Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
```

#3.保存済みDockerイメージのチェック
自分のサーバーに保存されているDockerイメージを確認します。

```terminal
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               775349758637        4 weeks ago         64.2MB
```

#4.Dockerコンテナのデプロイ
保存済みのDockerイメージを用いて、Dockerコンテナを立ち上げます。
Dockerコンテナをデプロイする際、様々なオプションがあります。
オプションについて詳しく調べたい場合は、下記URLをご参照下さい。
https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/
私が頻繁に使用するオプションは、`--name`、`-v`、`-it`の3つです。
`--name`ではコンテナ名を指定することができます。
`-v`ではホストOSのディレクトリをゲストOSにマウントすることができます。
つまり、Dockerコンテナから、Mac上で使用している既存フォルダにアクセスできます。
最後に、`-it`により、Dockerコンテナに対して擬似端末(pseudo terminal)を割り当てることができます。
Dockerコンテナ上でBashを使用することができるため、これは必須です。

```terminal
$ docker run --name ubuntu_test1 -v ~/ws:/home/ -it ubuntu:18.04
root@c75e4e2811e0:/# 
```

#5.パッケージのインストール
Linuxでパッケージをインストールする際は、まずアップデートして、その後必要なパッケージをインストールしていきます。

```terminal
root@c75e4e2811e0:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
...
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [2496 B]
Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [4235 B]
Fetched 17.3 MB in 6s (2837 kB/s)                                                                                                                                                                                  
Reading package lists... Done
```

私はテキストエディタとしてVimを使用するので、下記コマンドでVimを使えるようにしておきます。
同様な手順で、パッケージをインストールしていきます。

```terminal
root@c75e4e2811e0:/# apt-get install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
...
```

#6.Dockerコンテナの終了
Dockerコンテナを終了して、ホストOSに戻る場合は、`exit`コマンドを使用します。

```terminal
root@c75e4e2811e0:/# exit
exit
```

#7.Dockerコンテナの状態チェック
Dockerコンテナの状態を確認する場合は、下記コマンドを使用します。
STATUSより、Dockerコンテナが終了していることも分かります。

```terminal
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
c75e4e2811e0        ubuntu:18.04        "/bin/bash"         About a minute ago   Exited (0) 13 seconds ago                       ubuntu_test1
```

#8.Dockerコンテナの再開
終了したDockerコンテナを再開する場合は、`docker start`、`docker attach`コマンドを使用します。
デプロイの際に使用したコンテナ名を指定します。
以上の手順に従えば、環境構築済みのDockerコンテナを用いて継続的に開発を行うことができます。

```terminal
$ docker start ubuntu_test1
ubuntu_test1
$ docker attach ubuntu_test1
root@c75e4e2811e0:/# 
```

#おわりに
【超基本】のDockerコマンド手順書を作成しました。
Dockerの存在は知ってるけど、実際に使ったこと無い！使い方が実はよく分かってない！僕みたいなエンジニアにとって、役立つ記事になるんじゃないかと思ってます！
次はDockerfileの作成、運用方法についてもまとめてみようと思ってます！