42
37

More than 1 year has passed since last update.

ゼロから始めるDocker入門

Last updated at Posted at 2021-08-21

はじめに

実務でDockerの使用をしていますが

  • 「雰囲気で使用してしまっている」
  • 「言語化できていない」

ところがあったので基礎を学習し直しました。

実際に使用してみると自分の理解できていない部分が見えてくると思うので
私の記事を読んでいただけた方は自分の環境でも試してみると
内容が理解しやすいかもしれません。

記事のボリュームが大きくなりすぎてしまうため
記事を三部構成にしました。(途中から読んでも理解できる構成にしています。)

  1. ゼロから始めるDocker入門  ←今回はここ
  2. はじめてのDockerfile
  3. はじめてのDocker compose

以上のような形で執筆いたします。

対象読者

  • Dockerを使ってみたいけどどのように使えば良いかわからない方
  • 実務でなんとなく使っている方
  • 短時間で主要部分を抑えたい方

この記事から得られること

  • Dockerとは
  • Docker imageからコンテナを作成
  • Dockerの基礎になるコマンド

前提

  • Docker Desktopの導入

目次

用語

頻繁にでてくる用語を整理します。

コンテナ

コンテナとはDockerの持つ仮想化技術のことです。

Docker Image

イメージとはコンテナのベースとなるものです。
ubuntu や alpine などのOSや MySQL や Ruby のようなものまであります。

イメージは レイヤ構造 になっていて、イメージやレイヤを重ねていくことによって一つのイメージを作成し コンテナ(環境) を作成していきます。

Dockerのメリット

Docker環境を構築することは様々なメリットがありますが主なものを3点まとめました。

1. 環境構築が容易
2. 構築した環境の配布・共有することができ、誰でも同じ環境を作ることができる
3. Web業界でよく使用されている技術なので学んでおいて損がない

Dockerのワークフロー

Docker では Docker image を 使用・作成 してコンテナを作成していきます。
を Git で管理して GitHub などに push することでコンテナ(コンテナ)をチームのメンバーと共有します。
(他にも方法があると思いますが、この方法が一般的だと思いますので今回は省略します。)

簡単チュートリアル

Dockerコマンドで挙動を確認しながら以下の流れを追っていきます。

①imageを取得
②コンテナを作成

①Docker imageの取得

Docker Hub という Docker Registry から コンテナのベースとなる image を取得します。
pull コマンドを使えば取得できます。

今回は hello-world というimageを取得します。

下記リンクの左上の検索窓から色々な image があることを確認できます。

ターミナル
docker pull hello-world
ターミナル
docker images

# 以下のような形で出力されれば正常にimageを取得できています。
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   5 months ago   13.3kB

②コンテナの作成

今取得したimageを使ってコンテナを作成します。
docker images で確認できますがコンテナを作成するときは IMAGE ID を使用してコンテナを作成します。私の場合は d1165f221234 です。

ターミナル
docker run d1165f221234

# 出力結果
## hello-world imageからコンテナを実行すると以下のように出力されるようにプログラムされている。
Hello from Docker!
This message shows that your installation appears to be working correctly.

## どのような手順を行ったのか
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

## ubuntu はこちらのコマンドで実行できます。
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

## Dockerチュートリアル
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Docker client と Docker daemon

hello-world の出力結果の中に Docker daemon と Docker client という単語がでてきましたので簡単にご説明せていきます。
Docker はクライアント・サーバ型のアーキテクチャなのでクライアントとサーバがあります。
クライアントというのが Docker client サーバが Docker daemon のことです。
もっと詳しく知りたい方はドキュメントを見ると図も乗っているので理解しやすいです。

Docker client

Docker を使用している自分(ホスト)のことです。
ホストが Docker daemon に命令を出して imageコンテナ を作成します。
命令というのは Docker run などのDockerコマンドのことです。

流れとしては Docker client からサーバーにある Docker daemon に命令を出して Dockerオブジェクト を操作しています。

Docker daemon

Docker daemonDocker client からの命令(コマンド)に従って Dockerオブジェクト を操作します。

dockerコマンド

Dockerコマンドはたくさんありますが、その中でもよく使うコマンドをご紹介していきます。
docker-composeDockerfile については次回の記事以降で触れていきたいと思います。

docker run

docker run コマンドは イメージ がなければ Registry からイメージを pull してコンテナを作成実行してくれるコマンドです。

docker run -it bash

たとえば ubuntu のイメージを指定するとコンテナに入ることができます。
(※イメージにシェルが入っている必要があります。)

-it は -i-t をあわせたものです。

-i はinput(入力を可能にする)

-t はtty(表示する)

docker run --name <コンテナ名>

docker run をしてコンテナをたてた場合コンテナ名は適当なものが勝手につけられてしまいます。
なにかと区別したい場合、管理したい場合は --name オプションでコンテナ名をつけてコンテナを作成することができます。

docker run --rm

docker run を実行して作成されたコマンドは消えません。
コンテナを実行して終了したとき同時にコンテナの削除をしたいときは --rm フラグをつけると
コンテナが削除されます。一時的にコンテナを立てたい時などに便利です。

--rm はリムーブの略です。

docker run -v <ホスト側パス>:<コンテナ側パス>

ファイルを共有することができます。
具体的にいうとホスト側のファイルをコンテナ側にマウントするということです。

マウントをすることで、コンテナからホストのファイルやフォルダを操作することができます。

docker run -p <ホスト側ポート>:<コンテナ側ポート>

コンテナで指定したポートをホスト側で公開することができます。

-ppublish の略で 公開 という意味があります。

たとえば docker run -it -p 8000:80 nginx と指定すれば

ホストの port8000番にアクセスすることでコンテナの80番ポートを見ることができます。

docker run -it -u $(id -u):$(id -g)

docker run をして立てたコンテナに入るとデフォルトだと
rootユーザー であることがわかります。
ユーザーを変更したい場合は -u オプションをつけ
userIdgroupId を渡すことでそのユーザーでコンテナを起動することができます。

イメージ

docker images

作成したイメージの一覧を見ることができます。

イメージの一覧なので images です。複数形なことに注意します。

docker rmi

作成したイメージを削除したいときに使うコマンドです。
消したいイメージのIDを指定して rmi をつけることでイメージの削除をすることができます。

rm はリムーブ(削除する) と i image(イメージ) という意味です。

rm と非常に似ているので注意します。

docker rmi -f

-f フラグは強制的にという意味合いがあります。
どうしても削除したときは使用しましょう。
(削除できないときは立てたコンテナで使用しているイメージだったりとなんらかの原因があるはずなので多用はしないほうが良いかもです。)

-f はforce(強制的)という意味です。

docker tag <変更後のimage名> <変更前のimage名>

docker imageは基本的に作成したときは latest というタグがつけられます。
これを変更したいときは tag コマンドで任意のイメージ名(リポジトリ名とタグ名)をつけることができます。

docker image prune

使用していない全ての image の削除をすることができます。
イメージ一覧が綺麗になるので整理したいときに使えます。

prune を直訳すると

「透かす, 刈り込む, 刈る, 切り落とす, 切り払う, 切り下げる, 切り調える」

という意味です。(強そうですね、なんとなく理解できます。)

更に詳しく見たい方はドキュメントがわかりやすくまとめられています。

コンテナ

docker ps

実行中のコンテナ一覧をみることができます。

docker ps -a

-a オプションをつけることで終了しているコンテナを含め全てのコンテナを確認できます。

docker rm

コンテナを指定して削除することができます。

docker rm -f

強制的に削除するときに -f オプションをつけます。

docker system prune

使用していない全ての コンテナ の削除をすることができます。

docker exec -it

実行中のコンテナでコマンドを実行することができます。
exec は execute(実行) の略です。

その他

docker network ls

ユーザーが作成した全てのネットワーク一覧を確認することができる。

docker network rm

指定したネットワークを削除することができる。

docker inspect

inspect のあとにコンテナIDやイメージIDを指定し、指定したものの情報を確認することができる。

コマンド早見表

コマンド オプション・フラグ・引数 意味
docker run -it, --name, --rm, -v, -p, -u, <イメージID> コンテナを作成、実行する
docker images  イメージ一覧 
docker rmi <イメージId> イメージ削除
docker tag <変更後のイメージ名> <変更前のイメージ名> イメージ名(リポジトリ・タグ)名の命名
docker image prune 使用していないイメージの一括削除
docker ps -a コンテナ一覧
docker rm <コンテナ名・ID> コンテナの削除
docker system prune 使用していないコンテナの一括削除
docker exec <コンテナ名・ID> コマンドを実行する
docker network ls ネットワークの一覧
docker network rm <ネットワーク名・ID> ネットワークの削除
docker inspect <コンテナID, イメージID> 詳細の確認

おわりに

Docker コマンドやそれに付随する オプションフラグ は他にもたくさんあります。
全部を覚えることは難しいのでよく使うものから順番に使えるようにしていきます。

とはいえ、後に執筆予定の docker-compose を使用すれば上であげたような
コマンドを省略して使用できる場合もあります。ただ、上であげたようなコマンドが土台となっていることが多いので抑えておくと理解が捗るかもしれません。

参考文献

おすすめ教材

どちらのサイトも、ものすごくわかりやすかったのでおすすめです!
※個人的な意見なので購入する際は自己判断でお願いします。(入門 Dockerは無料)

42
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
37