Dockerを使ってMacホスト上でUbuntuのMavenビルドするまでの手順

諸事情あって、Ubuntu上でのMavenビルドを確認したくて、環境を作るため、初めてのDockerに手を出しました。その時の覚え書きです。
なお、私はUbuntuは触ってみたことがある程度で、あまり詳しくはありません。LPIC Level1は昔持ってたので(現在は期限切れ)、初歩的なコマンドはわかります。という程度です。

# 環境

ホスト側

|ツールなど|環境|
|:--|:--|
|macOS|Mojave 10.14.5|
|Docker|19.03.8|

Dockerコンテナ側

|ツールなど|環境|
|:--|:--|
|Ubuntu|18.0.4(Latest)|
|Apache Maven| 3.6.3|
|JDK|AdoptOpenJDK 11.0.6 2020-01-14|

# Dockerインストール

まずMacにDockerをインストールします。

## 1. Dockerアカウント作成

その前に、Dockerの公式サイトでアカウントを作成します。

https://www.docker.com/

## 2. Docker Desktop for Macをインストール

Docker Desktop for Macというアプリをインストールします。

https://hub.docker.com/editions/community/docker-ce-desktop-mac

インストール後、下記コマンドでバージョンが表示されればOK.

```console
$ docker --version
```

# UbuntuをDockerに構築

## 1. Ubuntuイメージをpull

```console
$ docker pull ubuntu
```

pull出来たかは以下のコマンドで確認。

```console
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              4e5021d210f6        5 days ago          64.2MB

```

## 2. Ubuntuの起動とセットアップ

### 2.1 コンテナを起動

```console
$ docker run -it -d --name ubuntuLatest ubuntu:latest
```

`--name`のあとの名称は任意です。
`ubuntu:latest`は、`docker images`コマンドで表示された、`{REPOSITORY}:{TAG}`としています。
Ubuntuのイメージが１つしかなければ、`{TAG}`の部分は不要かも。

### 2.2 コンテナに入る/抜ける

```console
$ docker exec -it ubuntuLatest /bin/bash
```

これでバッシュコマンドが打てる状態で繋がります。
抜けるときは、

```console
$ exit
```

でOK.
もう一度入るときは、

```console
$ docker exec -it ubuntuLatest bash
```

とする。

## 3. apt-getのアップデート

いろいろパッケージをインストールするのに必要なのでまずはこれから。やっておかないと何もインストールできませんでした。

```console
$ apt-get update
```

また、add-apt-repositoryなどが動くように以下を実行して、再度`apt-get update`しておく。

```console
$ apt-get install -y software-properties-common
$ apt-get update
```

## 4. vimをインストール

なにかエディタ入れておかないと何も出来ないので、vimでも入れておきます。
お好みで良いでしょう。

```console
$ apt-get install -y vim
```

## 5. SSHをインストール

Gitに繋ぐのに、SSH鍵が必要だったので、入れました。

```console
$ apt-get install -y ssh
```

# Ubuntuにビルド環境をセットアップ

## 1. AdaoptOpenJDK 11のインストール

```console
$ add-apt-repository --yes ppa:rpardini/adoptopenjdk
$ apt-get update
$ apt-get install -y adoptopenjdk-11-installer
```

1行目のコマンドで、AdoptOpenJDKのリポジトリを追加しています。
リポジトリを追加したら、`apt-get update`が必要みたいです。

JDKインストール後、`java --version`とやって以下のように出ればOKです。

```console
/# java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)
```


## 2. Maven

```console
$ apt-get install -y maven
```

インストール後に、`mvn -v`と打ってバージョンが表示されればOK。

## 3. Git

```console
$ apt-get install -y git
```

インストール後に、`git --version`と打ってバージョンが表示されればOK.
また、グローバルユーザー設定をしておく。

```console
$ git config --global user.name [任意のユーザ名]
$ git config --global user.email [任意のメールアドレス]
```

## 4. Git接続用SSH鍵生成

```console
$ cd ~
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa
```

あとは通常通りに設定を行う。

公開鍵の内容のコピーは、`cat id_rsa.pub`とやってコピーすれば良い。
Gitへの公開鍵の登録をお忘れなく。

Githubの場合、以下で接続確認ができる。

```console
$ ssh -T git@github.com
```

`yes`と打つのを忘れずに。

## 5. Gitからクローンしてビルド

任意のフォルダを作ってそこに移動してから、

```console
$ git clone [SSH用のリポジトリURL]
```

Githubなどから、SSH用のURLをコピーしてくるのを間違えないように。

クローンしてきたらプロジェクトフォルダに移動してから、任意のブランチをチェックアウト。

```console
$ cd [project dir name]
$ git checkout -b branch_name origin/branch_name
```

ビルド実行。

```console
$ mvn install
```

おめでとうございます。
Dockerコンテナ内のUbuntuでmavenビルドが出来るようになりました。

ステップ数は長いけど、結構単純なことの繰り返しなので、それほど難しくないように思います。
でも、どこかに、Mavenビルド用のイメージはいろいろ転がっていそうですよね(汗)

これを社内で共有しようと思ったら、Dockerリポジトリに公開すればいいのかしら？？

# その他のコマンド

## 1. コンテナを停止する

```console
$ docker stop ubuntuLatest
```

## 2. コンテナを再起動する

```console
$ docker start ubuntuLatest
```

## 3. Dockerのコンテナリストを確認する

起動中のコンテナ表示。

```console
$ docker ps
```

停止中のコンテナ表示。

```console
$ docker ps -a
```

## 4. コンテナを削除する

コンテナは停止していること。

```console
$ docker rm [CONTAINER ID]
```

`[CONTAINER ID]`は、`docker ps -a`で確認したもの。

## 5. イメージを削除する

```console
$ docker rmi [IMAGE ID]
```

`[IMAGE ID]`は、`docker images`で確認したもの。

# 注意

コマンドにすべて`sudo`をつけてませんが、Dockerのコンテナに普通に繋ぐと、`root`ユーザーになるからです。
通常の(Dockerでない)Ubuntuでやる場合は、`sudo`が必要かもしれません。

なお、`root`以外ユーザーを追加してそのユーザーでコンテナに入る方法は、いくつかググって試したのですが成功しませんでした。
仕方なく`root`ユーザーのままで作業しましたが、用途によってはだめでしょうね^^;

# 参考
- DockerをMacにインストールする（更新: 2019/7/13）  
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81
- Mac+Docker+ubuntu (??)  
https://qiita.com/teruru/items/073f7e8c7dba75993323
- Dockerイメージとコンテナの削除方法  
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae
- Ubuntu Linuxで、add-apt-repositoryしようとして「コマンドがない」って言われたら  
https://kazuhira-r.hatenablog.com/entry/20160116/1452933387
- Debian, Ubuntuへapt(-get)でAdoptOpenJDKをインストールする方法  
https://qiita.com/tabimoba/items/aef82dd0426ee4c32d40
- UbuntuでSSHをインストールする手順  
https://qiita.com/shimidai2100/items/bc210a3e09ee3dd0fc1a