Docker覚書

#はじめに
これはDocker初心者でDockerに遊ばれている僕が、「Dockerでrstudioを動かすため」（ここ重要）の「Dockerを動かす」部分のメモ書きである。コピペの部分も多いが、メモ書きなので目をつぶっていただけると有難い。
他の人が役に立つかどうかは知らないが，まあ役に立つならそれで良いかなあと。取り敢えず自己満足で書いているので、そこんとこ宜しく。

#参考にしたサイト

@fist0 氏の[docker images を全削除する](https://qiita.com/fist0/items/2fb1c7f894b5bdff79f4)

@kooohei 氏の[Dockerコンテナの作成、起動〜停止まで](https://qiita.com/kooohei/items/0e788a2ce8c30f9dba53)

@butada氏 [(初心者向け)Dockerの使い方](https://qiita.com/butada/items/3e6cd338cb703eef64b4)


####Nov/12/20追記分


Imamachi-n氏の[Dockerコンテナ上でNGSのソフトウェアを実行してみる（Windows10・MacOSXローカル環境編）](http://imamachi-n.hatenablog.com/entry/2018/03/18/142327)


@YumaInaura氏の[Docker — docker コンテナの中で vim が使えない場合](https://qiita.com/YumaInaura/items/3432cc3f8a8553e05a6e)

infoScoop社の[DockerFileでDockerイメージを作成してみる](https://www.infoscoop.org/blogjp/2014/12/20/create-docker-image-by-dockerfile/)

かべぎわ氏の[任意の名前のDockerfileでdocker buildする](https://www.kabegiwablog.com/entry/2018/08/01/120000)

sagantaf氏の[Docker実践〜稼働中のDockerコンテナをバックアップとしてイメージ化して保存しておく]
(https://sagantaf.hatenablog.com/entry/2018/09/04/190801)
##用語

@butada [(初心者向け)Dockerの使い方](https://qiita.com/butada/items/3e6cd338cb703eef64b4)によると

「イメージ：コンテナが動作するためにベースとなるファイル群。コンテナによってイメージが変更されることはなく不変のもの。Docker Hubから取得可能。CentOSイメージが汎用的なので初心者には使いやすいと思う。
コンテナ：イメージから作成されたインスタンスのようなもの。コンテナが動作することで生成されたファイルは、イメージではなくコンテナに紐づいて管理される。ざっくり言うと、コンテナ＝イメージ＋差分ファイル。厳密に言えばコンテナには起動中のプロセスも含まれる。」
らしい。
ふむふむ
##Dockerコマンドの基本
取得可能なイメージは[DockerHub](https://hub.docker.com/search?q=&type=image)で確認する。

```{bash}
docker pull images #イメージをローカルにダウンロードする
```
ダウンロード出来たら、以下のコマンドで確認。

```{bash}
docker images
#以下のように出てくる
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
```
##基本動作

###イメージを確認

```{bash}
docker images
```

###コンテナの一覧を確認

```{bash}
#デフォルトは稼働中のコンテナを表示
docker ps
#全てのコンテナを表示
docker ps -a
```

##作成
###イメージからコンテナの作成

```{bash}
docker run -it images
```

##自作のDockerfileの起動(Nov/12/20)

```{bash}
docker run -it -p Dockerfile名 /bin/bash
```


###ログイン状態を抜ける(dettachする)
ログインを抜けるためには```{Ctr+P}```,```{Ctr+Q}```を順番に押す(これを「dettach(デタッチ)」と呼ぶ)。
dettachしたコンテナを確認する方法は

```{bash}
docker ps
```
である。

###再度ログインする(attachする)
そして、dettachしたコンテナに再度ログインする状態ことを「attach」と呼び、以下のコマンドを叩く。
```docker attach <CONTAINER IDまたはNAME>```を入力する

```{bash}
docker attach container-ID
```
あるいは

```{bash}
docker attach container-NAME
```
となる。

###コンテナの中でdockerを終了する

```
exit
```

###コンテナを起動する

```{bash}
docker start container-ID
```
または

```{bash}
docker start container-Name
```
###コンテナを終了する
ターミナルの中でコンテナを終了する。

```{bash}
docker stop container-ID
```
または

```{bash}
docker stop container-name
```

##docker images を削除する
###コンテナ削除

```{bash}
docker rm
```

###イメージ削除

```{bash}
docker rmi -f
```

###全削除
コンテナが動いているとイメージを削除できないので, 本当に全削除したいときはコンテナから全削除する。

####コンテナを削除する
```{bash}
docker ps -aq | xargs docker rm
```
####イメージを削除する
```{bash}
docker images -aq | xargs docker rmi
```



なんかあれば、また追記する。

##Dockerfileの作り方(Nov/12/20)

これ(http://imamachi-n.hatenablog.com/entry/2018/03/18/142327) を参考にDockerfileを作った（というかほぼまんまコピペした・・・）。

```{Docker}
# Base image
FROM debian:9-slim

# Install Miniconda3 & Bioconda
RUN apt-get -qq update && apt-get -qq -y install curl bzip2 \
  && apt-get -qq -y install vim \ #デフォルトではvimが入っていない。
  && curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
  && bash /tmp/miniconda.sh -bfp /usr/local \
  && rm -rf /tmp/miniconda.sh \
  && conda install -y python=3 \
  && conda update conda \
  && conda config --add channels r \
  && conda config --add channels defaults \
  && conda config --add channels conda-forge \
  && conda config --add channels bioconda \
  && apt-get -qq -y remove curl bzip2 \
  && apt-get -qq -y autoremove \
  && apt-get autoclean \
  && rm -rf /var/lib/apt/lists/* /var/log/dpkg.log \
  && conda clean --all --yes

ENV PATH /opt/conda/bin:$PATH

```

これを拡張子をつけずにDockerfileで保存するか、自分の保存したい名前で保存する。


そして以下のようにしてbuildする。

```{bash}
#Dockerfileで保存した場合
docker build -t myimage:1.0 .

#自分の保存したい名前で保存した場合
docker build -t myimage:1.0 -f docker_test.txt .

```

自分がよく使いそうなオプションだけ書く。

Options|名前
---|---
-t, --tag list| 名前とタグをつけることが出来る 例　name:tag
|
-f,--file string |Dockerファイルの名前を指定できる (Default is 'PATH/Dockerfile')

例
以下のDockerfileをdemo2と名付けてdocker buildした。


```{docker:demo2}
# Build from base image
FROM ubuntu:20.04
# Update base images with latest patches
RUN apt-get update && apt-get upgrade -y
# Install dependencies and pdftotext
RUN apt-get -y install poppler-utils \
  && apt-get -y install python3-pip  # python-pip

# Install tool
RUN pip3 install wordcloud
```

```{bash}
docker build -t name:tag dockerfile_dir/dockerfile docker file_dir

docker build -t demo2:1.0 -f demo2 .

```

詳しくは

```{bash}
docker build --help
```
で確認すること。


##dockerimageの保存
　他のターミナルを開き、ターミナル状況を確認する。そして、

```{bash}
docker commit コンテナのIDもしくはNAME  イメージ名
```
というようにして保存する。


##Dockerimageのファイル化

バックアップしたイメージはsaveコマンドでファイル化して、Docker環境の無いサーバやNASに保存しておくことができる。現在いるディレクトリに作成される。

```{bash}
docker save イメージ名 -o ファイル名
```


##Dockerimageのファイルから復旧

```
docker load test_file.tar
docker images
```