DockerでUbuntu16:04イメージをベースにコンテナを作成する

# 目的
Dockerfile で Ubuntu16:04 イメージをベースにコンテナを作成する際の基本手順の備忘録です。

# 前提
Dockerをインストール済である事が前提

# Dockerfileの作成とコンテナの起動

docker imageが何も起動していない状態から開始

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

Dockerfileを用意

```dockerfile:Dockerfile
#利用するUbuntuのイメージ
FROM ubuntu:16.04　

RUN apt-get update
```

Dockerfileを格納しているディレクトリで、docker buildしてイメージを作成

```
（例）"ubuntu1604-test"の名前のイメージをbuild
$ docker build -t ubuntu1604-test .
Sending build context to Docker daemon  6.144kB
Step 1/2 : FROM ubuntu:16.04
16.04: Pulling from library/ubuntu
...
Successfully built 059ae10b126a
Successfully tagged ubuntu1604-test:latest
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ubuntu1604-test     latest              059ae10b126a        About a minute ago   151MB
ubuntu              16.04               005d2078bdfa        3 weeks ago          125MB
```

作成したイメージをベースにコンテナを起動

```
（例）ubuntu1604-testという名前でコンテナを起動する
$ docker run -it -d --name ubuntu1604-test ubuntu1604-test:latest
d9d1cb8606bc0a2ddb798bc19ab6de746eced6b19f933de335be986d8c955296
 docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS               NAMES
d9d1cb8606bc        ubuntu1604-test:latest   "/bin/bash"         13 seconds ago      Up 12 seconds                           ubuntu1604-test
```

起動が成功すればOK
コンテナ内に入って色々試してみる

```
$ docker exec -it ubuntu1604-test /bin/bash
root@d9d1cb8606bc:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@d9d1cb8606bc:/# exit # コンテナから出る
```

不要になればコンテナを削除

```
$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS               NAMES
d9d1cb8606bc        ubuntu1604-test:latest   "/bin/bash"         2 minutes ago       Up 2 minutes                            ubuntu1604-test
$ docker stop d9d1cb8606bc
d9d1cb8606bc
$ docker rm d9d1cb8606bc
d9d1cb8606bc
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

不要になればイメージも削除

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu1604-test     latest              059ae10b126a        5 minutes ago       151MB
ubuntu              16.04               005d2078bdfa        3 weeks ago         125MB
$ docker rmi ubuntu1604-test
Untagged: ubuntu1604-test:latest
Deleted: sha256:059ae10b126a33c0a1383be2de2e164ba34459bc2671e05f1d3368511a59070c
Deleted: sha256:f5de470b93ff6d77d6ec1d3b43e963aee80fefee1226520cafa65b8762b81307
$ docker rmi ubuntu:16.04
Untagged: ubuntu:16.04
Untagged: ubuntu@sha256:db6697a61d5679b7ca69dbde3dad6be0d17064d5b6b0e9f7be8d456ebb337209
Deleted: sha256:005d2078bdfab5066ae941cea93f644f5fd25521849c870f4e1496f4526d1d5b
Deleted: sha256:a83c92a7c7a0f4a52fc74fa38496be9a5e6b738bc5fd5d60e54768fed238c173
Deleted: sha256:c6a36d55655e576fc8166a32fd05e281d03bedc26b1118902e92e7ba421dfa72
Deleted: sha256:d1c997f15060e07ff557383387d6839e0377873837025fc843fa5d94bea2c4e5
Deleted: sha256:b592b5433bbffb04389a0e6349cdba6af8d006779bbb93beb69aa77d59133be4
(base) seigonoMacBook-puro-1320:appjs seigo$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
```

# docker run の代わりに docker-compose.ymlを使う場合

以下のようにdocker-compose.ymlを用意する

```dockerfile:docker-compose.yml
version: '3.3'
services:
    test:
        container_name: ubuntu1604-test
        image: 'ubuntu1604-test:latest'
        stdin_open: true
```

docker run の代わりにdocker-compose でコンテナ起動する

```
$ docker-compose up -d
Creating ubuntu1604-test ... done
(base) seigonoMacBook-puro-1320:appjs seigo$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS               NAMES
d2276b9cd3f0        ubuntu1604-test:latest   "/bin/bash"         2 seconds ago       Up 1 second                             ubuntu1604-test
```

# docker build の代わりに docker-compose.ymlを使う場合

以下のようにdocker-compose.ymlを用意する

```dockerfile:docker-compose.yml
version: '3.3'
services:
    test:
        build:
          context: .
          dockerfile: Dockerfile
        container_name: ubuntu1604-test
        image: 'ubuntu1604-test:latest'
        stdin_open: true
```

docker build/run の代わりにdocker-compose でコンテナ起動する

```
$ docker-compose build
$ docker-compose up -d
$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS               NAMES
7af849677b8c        ubuntu1604-test:latest   "/bin/bash"         3 seconds ago       Up 2 seconds                            ubuntu1604-test
```

# その他
作成したコンテナを利用して、以下を参考にROSインストールを行い、turtlesimが動かせる事を確認済(2020/5/15)→別記事にする予定
[ROS Kinetic の Ubuntu へのインストール](http://wiki.ros.org/ja/kinetic/Installation/Ubuntu)
[ROSトピックの理解](http://wiki.ros.org/ja/ROS/Tutorials/UnderstandingTopics)
[Docker for MacでROSの亀さんと戯れた](https://qiita.com/ryo_21/items/4e0006adcb300173acda)

# 参考
[Dockerfile リファレンス](http://docs.docker.jp/engine/reference/builder.html#from)
[超基礎からの 速習 Docker (1)](https://qiita.com/Gucchiy/items/16045193baabf3dfa176)
[Docker for MacでROSの亀さんと戯れた](https://qiita.com/ryo_21/items/4e0006adcb300173acda)
[Docker run/createコマンド](http://www.tohoho-web.com/docker/docker_run.html)
[DockerでUbuntu 16.04 LTSのイメージを利用してみよう](https://weblabo.oscasierra.net/docker-ubuntu1604/)
[Dockerによる開発環境構築(Rails & Postgres)において exited with code 0 でコンテナが終了してしまった時の対処法](https://qiita.com/rebi/items/580fad9553cd49a07a28)
[ROS Kinetic の Ubuntu へのインストール](http://wiki.ros.org/ja/kinetic/Installation/Ubuntu)
[ROSトピックの理解](http://wiki.ros.org/ja/ROS/Tutorials/UnderstandingTopics)
[ROS Kinetic の Ubuntu へのインストール](http://wiki.ros.org/ja/kinetic/Installation/Ubuntu)
[ROSトピックの理解](http://wiki.ros.org/ja/ROS/Tutorials/UnderstandingTopics)
[Docker for MacでROSの亀さんと戯れた](https://qiita.com/ryo_21/items/4e0006adcb300173acda)