【コマンド集】Dockerで使用する基本的なコマンド【14選】

<br>
これからDockerを使う人のために、dockerの基本的なコマンドをまとめてみました。良ければご活用ください。
<br>
<br>

## Dockerについて
「そもそもDockerって何？」

結論、構築した環境を複数人で使いまわせるツールの事です。

例えば企業などで、複数人で開発を進める時に、エンジニアごとに開発環境やバージョンが異なると、思わぬエラーに遭遇する可能性があります。

しかし、同じ開発環境でそれぞれのエンジニアが開発を進めることによって、上記のような問題は大幅に回避する事ができます。それを簡単にできるようにするのが、Dockerの役割です。

ここでは、詳しい内容は省略して、基本的なコマンドを列挙していきます。もしPCにDockerが入っていない場合は、公式サイトでインストールから初めてください。

公式サイト：https://www.docker.com/
<br>
<br>
<br>

## version
まずPCにDockerがインストールされているかどうか、確認しましょう。
コマンドはこちら。

```html
$ docker --version
```
<br>

正しくインストールされていれば、このような表示になります。

```html
Docker version 19.03.13
```
もしここで表示が異なる場合は、まだパソコンにDockerがインストールされていない可能性が高いので、公式サイトよりインストールを行いましょう。
<br>
<br>

## login
Dockerを利用するには、まずログインが必要です。コマンドはこちら。

```html
$ docker login
```
このコマンドを実行すると、Dockerの公式サイトで登録したログインIDと、パスワードの入力を求められます。ログインに成功したら、下記のような表示になります。

```html
login succeeded
```
<br>
<br>

## images
次に `docker image` の一覧を取得するコマンドはこちら。

```html
$ docker images
```
<br>
<br>

## ps
次に `コンテナ` の一覧を取得するコマンドはこちら。

```html
<!-- Up状態のコンテナ一覧を取得 -->
$ docker ps

<!-- 全てのコンテナ一覧を取得 -->
$ docker ps -a
```
個人的によく使うのは、２つ目のコマンドですね。`Up` 、 `Exited` など関係なく、コンテナを表示してくれます。
<br>

また、コンテナごとに詳細情報を確認する方法はこちら

```html
<!-- ハッシュ値で指定したコンテナの詳細情報を表示 -->
$ docker inspect 113289ac4d92
```
こちらは `grepコマンド` などと組み合わせて、コンテナのCPUやMemoryを確認するのに便利です。
<br>
<br>

## pull
次に `DockerHub` からリポジトリを取得するコマンドはこちら。

```html
$ docker pull hello-world
```
上記の場合、`hello-world` のリポジトリを `docker image` として取り込みます。
<br>
<br>

## push
今度は逆に `DockerHub` に手元の `docker image` をアップするコマンドです。

```html
$ docker push example/first-repo
```
<br>
<br>

## build
次はホストにある `Dockerfile` を `docker image` にする方法です。
コマンドはこちら。

```html
<!-- . はカレントディレクトリを示しています。 -->

<!-- docker imageを作成(名前はnone) -->
$ docker build .

<!-- 名前を指定してdocker imageを作成 -->
$ docker build -t new-ubuntu:latest .

<!-- Dockerfile名が異なる場合のコマンド -->
$ docker build -f Dockerfile.dev .
```
作成された `docker image` は、上記で紹介した `$ docker images` で確認できるので、作成したら正常に作られているか確認するようにしましょう。
<br>
<br>
<br>

## create
次は `docker image` から `コンテナ` を作成する方法です。
コマンドはこちら。

```html
$ docker create hello-world
```
作成する際は、予め `$ docker images` で名前かハッシュIDを確認しておきましょう。(hello-worldの部分はハッシュIDでも可能です。)

また作成したら、正常に作成されているか、`$ docker ps -a` で確認しましょう。
<br>
<br>

## start
次は作成した(created状態の) `コンテナ` を起動させる方法です。
コマンドはこちら。

```html
<!-- ハッシュIDで指定したコンテナを起動(即Exited) -->
$ docker start 113289ac4d92

<!-- ハッシュIDで指定したコンテナを起動(継続してUp) -->
$ docker start -a 113289ac4d92
```
<br>

またすでに一度起動を行い、`Exited状態のコンテナ` を起動するコマンドはこちら。

```html
<!-- Exited状態のコンテナを再起動する -->
$ docker restart 113289ac4d92
```
<br>
<br>

## stop
次は `Up状態のコンテナ` を`Exitde状態` にする方法です。
コマンドはこちら。

```html
$ docker stop 113289ac4d92
```
<br>
<br>

## run
次に上記で紹介した`createコマンド` と `startコマンド` を、一気に実行する方法です。
コマンドはこちら。

```html
<!-- コンテナを作成し起動(名前はnone) -->
$ docker run hello-world

<!-- コンテナを作成し起動後、bashでコマンド入力できる状態(名前はnone) -->
$ docker run -it ubuntu bash

<!-- 名前をつけてコンテナを作成し起動 -->
$ docker run --name sample ubuntu
```
紹介しておいてあれですが、個人的には `createコマンド` と `startコマンド` はほどんど使用しておらず、ほぼ `runコマンド` で済ませています。

便利なので、実務でも使用する際は、こちらがメインになると思われます。

>runコマンドを理解する上で、createコマンドとstartコマンドも、知っておいた方がいいと思ったので、先に記述させていただきました。

<br>
<br>


## exec
次に `Up状態のコンテナ` でシェル(bashなど)を実行できるようにします。
コマンドはこちら。

```html
<!-- 起動状態のコンテナにbashで操作できるようにする -->
$ docker exec -it 113289ac4d92 bash
```
ちなみに、`Exited状態のコンテナ` の場合は、エラーになってしまうので注意が必要です。
<br>

また、コンテナの操作から元の操作に戻すには、`$ exit` か、`「ctrl」+「p」+「q」` になります。違いは、Up状態を継続するかどうかです。(後者が継続)
<br>
<br>

## rm
次に `Exited状態のコンテナ` を削除する方法です。
コマンドはこちら。

```html
$ docker rm 113289ac4d92
```
実行したら、正常にコンテナが削除されているか、`$ docker ps -a` で確認しましょう。
<br>

また、一括削除をしたい場合のコマンドはこちら。

```html
$ docker system prune
```
途中、本当に削除するかどうかを聞かれますので、`y` で削除が完了します。
<br>
<br>

## rmi
次に `コンテナで使用されていないdocker image` を削除する方法です。
コマンドはこちら。

```html
$ docker rmi hello-world
```
実行したら、正常にdocker imageが削除されているか、`$ docker images` で確認しましょう。
<br>
<br>

## まとめ
以上が `Docker` を扱う上で必要な、基本的なコマンドになります。 `Docker` は利用している企業も多いと思いますので、習得しておいて損はないかと。

最後までご覧いただき、ありがとうございました！
<br>
<br>
<br>

筆者：yuki｜学習10日目で初案件獲得→現在はフルスタックエンジニア転職に向けて学習中
Qiita：https://qiita.com/yuki4839
Twitter：https://twitter.com/yuki35522891