Dockerとは
オープンソースのコンテナ管理ソフトウェアのこと。
仮想化とはなんぞやを知らなければ掴みにくいと思いますので次に説明します。
まず、仮想化とは?
1台のサーバー上に、複数のサーバーとして利用できる仕組みを構築する方法のこと。
仮想化とは以下の3種類があります。
####・ホスト型仮想化
ホストOS上で動作する仮想化ソフトウェアを利用してVM(※①)を管理する方式。オーバーヘッド(※②)が大きい。
####・ハイパーバイザ型仮想化
ハードウェア上のハイパーバイザ(※③)を利用してVM(※①)を管理する方式。ホストOS無しでハードウェアを直接制御する。
オーバーヘッド(※②)が大きい。
####・コンテナ型仮想化(= Docker)
ホストOS上でコンテナと呼ばれるVM(※①)と似たような振る舞いをする仮想的な区画を用意して管理する方式。
通常、1コンテナ1プロセスで使用するためのWebサーバーコンテナとかDBサーバーコンテナとかログ管理コンテナとか複数のコンテナを立てる構成となる。
Dockerと特徴
1.処理が速い
・VM毎にCPUやメモリやストレージなどを割り当てるような処理が必要がなくオーバヘッドが少ない。
・ゲストOSが無いため消費するリソースが少ない。
・ゲストOSが無いためアプリケーションまでのパケット転送処理(コンテキストスイッチなど)が少ない。
2.起動が速い
・ゲストOSを立ち上げるわけではないため。
3.可搬性が高い
・Dockerエンジンさえあれば基本どこでも動く。
・Dockerfileやdocker-compose.ymlによるインフラのコード化。
4.イメージが軽い
・Dockerイメージはレイヤで管理しているため。
5.Dockerイメージを簡単に共有できる仕組みが整っている
・特に、公式Dockerイメージが用意されている場合(JenkinsやWordPressなど)はデプロイが楽。
・ECRなどプロジェクトに閉じているかつフルマネージドな環境が整っている。
Dockerの用途
1.開発を共有化する作業
2.複数のOSでの動作チェック
3.バージョン管理システム
4.本番環境での利用
インストール方法
1.パッケージの最新化
$ sudo yum check-update
2.Dockerの最新版のダウンロードとインストール
$ sudo curl -fsSL https://get.docker.com/ | sh
3.Docker起動
$ sudo systemctl start docker
4.Docker自動起動設定(サーバーの再起動時にも自動で立ち上がるようにする)
$ sudo systemctl enable docker
Dockerイメージの取得
####・イメージの検索
Docker Hubにあるイメージを検索する場合には、コマンドdocker searchのあとに、探しているイメージのキーワードを入力します。例えばCentOSのイメージの場合は下記により、候補が表示されます。通常は複数出てきます。
公式のイメージの場合は、OFFICIAL欄にOKと表示されます。これはDocker Hubには誰でもイメージを登録することができるため、公式とそうでないものと区分けしています。
$ sudo docker search centos
####・イメージのダウンロード
利用したいイメージが見つかったら、コマンドdocker pullのあとに、検索したイメージ名を入力してダウンロードします。
$ sudo docker pull centos
####・イメージの実行
ダウンロードしたイメージを実行する場合には、docker runのあとに、実行したいイメージ名を入力します。
$ sudo docker run centos
####・ダウンロードしたイメージの確認
下記のコマンドを入力することにより、これまでダウンロードしたイメージの一覧が表示されます。
$ sudo docker images
よく使う基本コマンド
###実行(docker run)
指定したDockerイメージを実行します。
例: Hello Worldの実行
$ docker run hello-world
例: Ubuntuの実行
$ docker run -i -t ubuntu /bin/bash
例: Nginxの実行(8080番で実行)
$ docker run -p 8080:80 nginx
###コンテナの一覧(docker ps)
実行中のコンテナ一覧を表示します。(-aで停止しているコンテナも表示します)
$ docker ps
###終了(docker kill)
指定したDockerイメージを終了します。(削除はされません)
$ docker kill [コンテナID/名前]
###削除(docker rm)
コンテナを削除します。
$ docker rm [コンテナID/名前]
用語集
①仮想マシンのこと。
②余計なコストのこと。
③コンピュータを仮想化するためのソフトウェアのこと。
参考記事