Dockerのインストールから簡単なコンテナ作成まで

# はじめに
幾つかの環境に対して、実験的なことしたいので、はやり？？(だいぶ遅いですが)のDockerを勉強して使いこなすまでの過程を日記的に書けたらと思います。
いろいろ躓いたところなどを残して、解決方法等を共有できたらと思います。
記事は勉強が進み次第更新していきたいです、、、

# 環境
OS : Windows11
メモリ : 16GB

# 目次
<a href="#1-インストール">1. インストール</a>
<a href="#2-dockerを実行してみた">2. Dockerを実行してみた</a>
<a href="#3-コンテナの作り方">3. コンテナの作り方</a>
<a href="#4-dockerfileの作成からコンテナのbuildまで">(new)4. Dockerfileの作成からコンテナのbuildまで('23/07/23更新)</a>
    <a href="#4-1-dockerfileの作成">　4-1. Dockerfileの作成</a>
        <a href="#4-1-1-dockerfileとは">　　4-1-1. Dockerfileとは</a>
        <a href="#4-1-2-dockerfileの書式">　　4-1-2. Dockerfileの書式</a>
     <a href="#4-2-dockerfileからimageの作成">　4-2. Dockerfileからimageの作成</a>
     <a href="#4-3-imageからcontainerの作成">　4-3. imageからcontainerの作成</a>



<a href="#更新日">更新日</a>




# 1. インストール

公式サイト

https://www.docker.com/


インストール手順
まずは、公式サイトからインストールを行います。　インストールしたファイルを実行すると以下のような画面が立ちあがります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/fd2020b5-1abb-3783-5366-1e9642239c46.png)
このままOKでインストールが始まりす。

>・Use WSL2 instead of Hyper-V(reccoomend)
(日訳) WSL2をHyper-Vの代わりに使う(推奨)
 ・Add shortcut to desktop
(日訳) デスクトップにショートカットを作成する

その後、なんやかんやインストールが実行されて、終了したらrestartボタンが表示されるので、押して再起動を行います。

再起動が完了したらデスクトップにDocekrのショートカットが作成されているのと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/6337be41-0a98-88ba-bc01-e9006dfee246.png)
エクスプローラの左のタブの下にLinuxが追加されているはず、、


# 2. Dockerを実行してみた

一旦Dockerを立ち上げてみましたが、うーん　どうしたらよいものか、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/8d8cbf5a-399d-0bb2-ec6b-ebd111768b87.png)

(解) wslカーネルが入っていないとどうやらダメ見たいです。
以下のページから**x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ**をクリックしてインストール

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

カーネルを入れてみて立ち上げなおしたら以下のような画面になりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/2e63aeef-b26a-bcf3-8b5c-ae713547c46f.png)





# 3. コンテナの作り方
Docker起動時に表示される**What is a container**から始めたほうが効率的かもですが**今回は違った方法でDockerの使い方を解読していこうと思います**
コマンドから見るContainerの作り方
<table>
  
  <thead>
    <tr>
      <th>コマンド</th> 
      <th>説明</th>
      <th>日本語訳</th>
    </tr>
  </thead>
  <tr>
    <td> run </td> <td>Create and run a new container from an image</td><td>新しいコンテナをイメージから作成・実行する</td>
  </tr>
  <tr>
    <td> build </td> <td>Build an image from a Dockerfile</td><td>イメージをDockerfileから作成する</td>
  </tr>
</table>

【コンテナ作成までの手順】
1．Dockerファイルの作成　-> 2. DockerファイルからImageの作成 -> 3. Imageファイルかcontainerを作成


# 4. Dockerfileの作成からコンテナのbuildまで
「３．コンテナの作り方」で解説したように、コンテナを作成するには、
<ol>
    <li>Dockerfileの作成</li>
    <li>Dockerfileからimageの作成</li>
    <li>imageからcontainerの作成</li>
</ol>
の手順行います。

## 4-1. Dockerfileの作成
<div>参考記事</div>
・<a href="https://docs.docker.jp/engine/reference/builder.html">Docker日本語リファレンス>>Dockerリファレンス</a>

### 4-1-1. Dockerfileとは
Dockerファイルとはコンテナを作成するために必要なイメージを自動的に作成するもの。
どのようなイメージを作成するかを記述するテキストファイル

### 4-1-2. Dockerfileの書式
Dockerfileは原則```FROM```関数から始めます。
例外としてFROM関数に必要な引数として```ARG```関数を```FROM```の前に記述できます

```Dockerfile:書式
# 命令　引数
# FROM関数:ベースとなるイメージを指定
FROM ubunts
#FROM scratch
```
FROM関数の引数に指定できるイメージは適切なものであればなんでもよいみたいです。
<a href="https://hub.docker.com/u/library">Docker Official Images</a>にあるイメージを使うと簡単に始められるようです
|命令|概要|
|:---:|:---:|
|FROM|image構築時に元となるイメージ(親イメージ)を指定する。<br>引数として```scratch```を指定すると親イメージを持たない**ベースイメージ**を作成することが出来る|

## 4-2. Dockerfileからimageの作成
今回は以下のようなDockerfileを作成します
pythonを親イメージとし、コンテナ作成時に<code>ls</code>コマンドでファイルの一覧を出力します。


```Dockerfile:dir/Dockerfile
FROM python   
CMD ls
```
Dockerfileからimageを作成するにはターミナル上で以下のコマンドを入力します。
```terminal:Dockerfileからimageの作成
$ docker build -t python-img . 
```
以下の画像のようなものが出力されるとimageの作成がうまくいっています。

>imageの作成にはターミナル上で 
>$ <code>docker build . </code>
>を行います。　<code>.</code> はカレントディレクトリのファイル情報を使用してbuildを行うという意味になります。
> また、今後作成したimageを操作しやすいようにimageに <code>-t</code> で名前を付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/dabd4a5f-9382-faa8-6f1c-155c5b0bee50.png)

また、以下のコマンドを入力すると作成したimageの一覧を出力できます。
```terminal:image一覧の取得
$ docker images
```


## 4-3. imageからcontainerの作成
<code>docker images</code>を入力すると一覧の中に以下のイメージがあると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/9e9df847-4ad1-c1d7-d1c9-453840e0b474.png)

imageからcontainerを作成するには以下のコマンドをターミナルに入力します。
```terminal:imageからcontaienrの作成
$ docker run --name python-container python-img
```
>container作成には
> $ docker run --name [containerに付ける名前] [基にするimage]の形式で入力します。

ターミナル上に以下のよう出力されるとコンテナが作成がうまくいっている。という判断でよいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492783/112f81fd-3163-ed32-e9eb-b28613769fba.png)



# おわり
Dockerのインストールから簡単なコンテナ作成までの流れをまとめてみました。
今後は、もう少し複雑な環境のコンテナの構築方法を上げていけたらと思っています。