LoginSignup
1

More than 3 years have passed since last update.

Docker コンパクトマニュアル(1:初歩・基本コマンド)

Last updated at Posted at 2020-10-29

記事のきっかけ

開発では当たり前のように使っている Docker
ただ使っているコマンドも限られているし、Dockerの仕組みと対応すべき事項が
分かっているようで分かっていない。

一度Dockerについて学習内容を項目毎にまとめ
Docker作業時のコンパクトマニュアル
として残しておきたいと思った次第です。

投稿番号 サブタイトル及びアクセス先
1 初歩・基本コマンド (*本記事)
2 マウントとデータ永続化
3 docker-compose
4 カスタムイメージを作成する

間違いやお気づきの点が御座いましたらご指摘を頂けますと助かります。
少しでも参考になりましたら LGTM 頂けると感激です。

この記事の目的

本記事ではDockerとは何か?から基本の操作までをまとめます。

Dockerとは? メリット・デメリットは?

そもそもDockerとは何か考えます。
当たり前ですが、コンテナを実現するソフトの代表格がDockerです。
色々な技術書や資料に記載されている事項はありますが、
一言で無理やり言えば

「コンテナ技術を使って互いに影響しない隔離された実行環境を提供するもの」

だと言えると思います。

Dockerのメリット

  • 環境が隔離されている為、それぞれのコンテナで開発が可能
  • コンテナをコピーして別のサーバーでの稼働が容易(ポータビリティ性が高い)
  • Docker EngineをインストールしたPCさえあれば同じ環境(コンテナ)を構築できる

Dockerのデメリット

あまり無いですがデメリットも対比で検証します。

  1. Linuxシステムでしか動かない
  2. 完全分離ではない。 CPU利用率やメモリー消費量を制限し他のコンテナに影響されないように仕組みをしているが 完全ではなく仮想サーバと違いエミュレートしているわけではないので、Docker Engineに セキュリティホールがあれば隔離した部分に抜けが生じる危険性は原理としては残っている。

Docker構成

コンテナ環境を実現させるソフトの代表がDockerです。
DockerLinux上で動くソフトです。
Linux上にDocker EngineをインストールするとDockerコンテナを実行できるようになります。
MacやWindowsではDocker Desktopというソフトをインストールする事で実行が可能となります。
Docker DesktopをインストールするとLinux サブシステムをインストールし利用できるようになります。

Dockerコンテナ

Dockerコンテナはコンテナの元となるDocker image(*以下イメージで表現する事もあります) を
Docker Hubなどのレジストリから入手するか、Dockerfileを使用して
作業用のディレクトリ下に必要なデータを入れ、自分でカスタマイズしたイメージを作成して
Dockerコンテナを作成するかの2通りが主な方法となります。


それでは操作についてまとめていきます。

Dockerの基本操作

コンテナ起動から終了までの流れ
(Docker Hub活用 Apacheイメージでのサンプル作成)

スクリーンショット 2020-09-22 11.30.32.png

手順
1. docker pull httpd (DockerリポジトリであるDocker Hubよりイメージを取得する)
下記サイトの内容です。
  Apache / httpd
2. docker create (コンテナ作成)
3. docker start (コンテナを稼働させる)
4. docker stop (コンテナ停止)
5. docker rm (コンテナ削除)
6. docker image rm (イメージの削除)

これらが一連の流れですが、docker runでイメージ取得から稼働まで一気に実行するのが一般的です。
ですので以下説明はdocker runを使う前提で説明をして行きます。

Dockerコンテナの作成と起動オプション

docker run コンテナを作成する場合よく使う起動オプションがあります。

オプション名 内容
-d デタッチモード。コンテナ端末と切り離したバックグラウンド実行
-i インタラクティブモード。標準入出力及び標準エラー出力をコンテナ連結
-t 疑似端末(pseudo-tty)を割り当てる。
カーソル移動や文字の削除、Ctrl等の文字入力をサポートする端末。
--name コンテナの名前をつける。指定しないとランダムのコンテナ名になる
-p ポート番号をマッピングする
(ホストのポート番号:コンテナのポート番号)
-v volume:volumeとは永続化できるデータの事を指します。
コンテナデータのボリュームをマウントする
(ホストのディレクトリ:コンテナのディレクトリ)
-rm 実行完了後にコンテナを破棄するオプション
試験動作するコンテナに設定すると便利です。
-dit, -it の指定及びアタッチとデタッチ
  • -itだとDockerコンテナに接続された状態(コンテナ内のプログラムを実行)
  • -ditだとDockerホストのプログラムを実行(コンテナは裏で動いています。)
  • アタッチはDockerコンテナ接続
  • デタッチはDockerホストのプログラム(シェル)などの接続でDockerコンテナとは接続していない
  • -it接続時に[CTRL]+[P],[CTRL]+[Q]を順に押すとデタッチに切替できる。
nameを付けなかった場合(ランダムなコンテナ名となり管理しにくい)

スクリーンショット 2020-10-27 0.02.21.png

-pオプションの動作

ブラウザからのリクエストを受付し、Hostの8080番が開き、コンテナの80番を経由して
Apacheの公開設定にたどり着きます。
スクリーンショット 2020-09-22 12.09.37.png

-vオプションの動作

ホストのカレントディレクトリをコンテナにマウントさせています。
(*マウントについてはマニュアル2で再度説明したいと思います。
バックアップのイメージです。)

その際には環境変数として $PWD で指定する事ができます。
例:-v "$PWD":/usr/local/apache2/htdocs

スクリーンショット 2020-09-22 12.30.06.png

つまり上記の説明を加味したコマンドは下記となります。

docker run --name my-apache-app -dit -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

コンテナのメンテナンス

コンテナに接続してメンテナンスを行うのは下記の2種類のコマンドで実行が可能です。

コマンド コンテナ状態 シェル終了時の状態 コマンド例
docker run 停止中 コンテナ終了 docker run --name my-apache-app -it httpd:2.4 /bin/bash
docker exec 稼働時 稼働のまま docker exec -it my-appache-app /bin/bash

ほとんどの場合はdocker exec を使えばいいと思います。
上記のコマンドを実行した場合は下記でbashに入れますね。

docker exec -it my-apache-app bash
❯ docker exec -it my-apache-app bash
root@8c72c18e9169:/usr/local/apache2# ls -a
.  ..  bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules

本記事はここまでです。読了ありがとうございました。

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
1