＊Docker入門＊Ubuntuの環境を構築する

## はじめに

こんにちは。今回は、Dockerの基本的な操作を学びながら、以下のようなUbuntuコンテナを作成することを目指します。

1. 最も単純な、rootユーザで操作できる`Ubuntu（Linux）`環境作成
2. `Dockerfile`を活用し、一般ユーザで操作できる`Ubuntu（Linux）`環境作成

## Dockerのインストール

WindowsやMacにDockerをインストールする場合、`Docker Desktop`を使用します。Macについては以下を参考にしてください。
- [Docker Desktopのインストール方法(Mac) -チグサウェブ-](https://chigusa-web.com/blog/docker-desktop-mac/)

Windowsについては以下を参考にしてください。
- [Docker Desktopのインストール方法(Windows) -チグサウェブ-](https://chigusa-web.com/blog/windows%E3%81%ABdocker%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6python%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89/)

## Dockerの動作確認

Dockerを使用するには、`Docker Desktop`を起動しておく必要があります。Docker Desktopを起動した状態で、Windowsなら`PowerShell`、Macならターミナルを開き、以下のコマンドを実行します。コマンドを実行してバージョンが表示されれば、Dockerの動作確認は完了です。

```docker
docker --version
```
## Dockerイメージの取得

Dockerでは、コンテナを作成して、コンテナの中で開発を行います。Dockerやコンテナの基本的な知識がわからない方は、以下を参考にしてください。

- [【図解】Dockerの全体像を理解する -Qiita-](https://qiita.com/etaroid/items/b1024c7d200a75b992fc)

では、早速コンテナを作っていきます。コンテナを作るには、その元となるイメージが必要です。イメージは、コンテナの元となるテンプレートの事です。

`pull`コマンドを使うことで、`Docker Hub`というDockerが持つクラウドのリポジトリから、イメージをダウンロードできます。ここでは、[Ubuntuイメージ](https://hub.docker.com/_/ubuntu)をダウンロードします。以下のコマンドを実行することで、Ubuntuイメージをダウンロードできます。

```docker
docker pull ubuntu
```
次に、ダウンロードしたdockerイメージの一覧を表示するために、以下のコマンドを実行します。Ubuntuイメージが表示されることを確認します。

```docker
docker images
```
## Dockerコンテナの作成

次に、Dockerコンテナを作成します。`run`コマンドを実行することで、新たなコンテナを作成し、起動することができます。runコマンドで指定するオプションについては、Webで多くの解説記事があるので、そちらを参照してください。

```docker
docker run -it -d --name my-ubuntu ubuntu
```
## コンテナ内に入る・出る

起動したコンテナに入るには、以下のコマンドを実行します。ここでは、Ubuntuのコンテナ内にあるbashを実行しています。これにより、コンテナ内でbashを使用したコマンド操作が可能になり、自由にUbuntuの環境として使用することができます。以上の方法でUbuntuコンテナを作成した場合、rootユーザで操作できる事がわかります。一般ユーザを使用したい場合のコンテナ作成方法は、本記事の後半で説明します。

```docker
docker exec -it my-ubuntu bash
```
コンテナから出るには、以下のコマンドを使用します。

```docker
exit
```

## コンテナ一覧表示

実行中のコンテナ一覧を表示するには以下のコマンドを使用します。コンテナから出ただけでは、コンテナは停止しないため、`ps`コマンドで表示されるはずです。

```docker
docker ps
```
起動・停止に関わらず、コンテナ一覧を表示するには以下のコマンドを使用します。コンテナを停止してから、`ps`コマンドと`ps -a`コマンドを比較すると違いがわかるので試してみましょう。

```docker
docker ps -a
```

## コンテナの停止

コンテナを停止するには、以下のコマンドを使用します。

```docker
docker stop my-ubuntu
```
## 既存のコンテナの起動・操作

`run`コマンドで既に作成済みのコンテナが停止していた場合に起動するには、以下のコマンドを使用します。

```docker
docker start my-ubuntu
```
起動したコンテナに入るには以下のコマンドを実行します。

```docker
docker exec -it my-ubuntu bash
```
コンテナから出るには、以下のコマンドを実行します。

```docker
exit
```

コンテナを停止するには、以下のコマンドを実行します。

```docker
docker stop my-ubuntu
```
## コンテナの削除

コンテナを削除するには、以下のコマンドを実行します。

```docker
docker rm my-ubuntu
```
## イメージの削除

イメージを削除するには、以下のコマンドを実行します。

```docker
docker image rm ubuntu
```

以上で、Ubuntuのコンテナの作成・起動・停止・削除まで行いました。ここまでが、Dockerの基本的な使い方になります。ここからは少し応用で、`Dockerfile`というものを用いて、一般ユーザで操作できるUbuntuのコンテナを作成してみます。

## Dockerfileの作成

ローカルのPCの`/Users/ユーザ名/Documents/CustomImage`フォルダに、`Dockerfile`を作成します。`CustomImage`フォルダ内には、`Dockerfile`、`作成するイメージに含めたいファイル`のみを置いておく必要があります。また、Dockerfileは通常、`Dockerfile`というファイル名で作成します。以下のような内容のDockerfileを作成してみましょう。

```dockerfile:Dockerfile
# M1 MacのみFROMの記述が必要
FROM --platform=linux/amd64 ubuntu:latest

# RUNコマンドは、コンテナ作成時に自動で実行するコマンドを指定
RUN apt update -y
RUN apt install -y sudo git make curl ssh vim emacs
# fogeというユーザを作成、fogefogeというPWを設定
RUN useradd -m -s /bin/bash foge
RUN echo "foge:fogefoge" | chpasswd
# sudoでroot権限のコマンドを実行できるように指定
RUN gpasswd -a foge sudo

# コンテナを指定したユーザで実行（rootユーザ以外で実行したい）
USER foge

# ワークディレクトリを設定
WORKDIR /home/foge/
```

次に、イメージを作成するためにbuildします。Dockerfileを置いたディレクトリに移動して、以下のコマンドを実行します。

```docker
docker build . -t ubuntu_image
```
イメージができていることを確認します。

```docker
docker images
```
イメージからコンテナを作成します。

```docker
docker run -it -d --name my-ubuntu ubuntu_image
```
作成したコンテナに入ります。

```docker
docker exec -it my-ubuntu bash
```
以上が、Dockerfileを使用した、一般ユーザでのUbuntuコンテナ実行方法になります。今後、Ubuntuコンテナを作成して作業する際の参考にしていただければと思います。

## おわりに

本記事では、Ubuntu（Linux）を例にして、Dockerの基本的な使い方を解説しました。今後は、Dockerの基本的な操作を確認する際に、本記事を活用して思い出していただければと思います。