- 1年にも満たないエンジニア生活のため、雲の上の存在だと思っていて距離を取っていた「Docker」の習得を目指す記事第一弾。
- 「身分をわきまえる感情」が大きく欠落した私は、「自分にはまだ早いかな」という概念を持たず、すかさず飛びつき、気分に深く酔いしれる生活。
- 今回は、仮想環境化技術の「Docker」の概要から各サーバーの起動までをしっかり抑えて、長い道のりの基盤作りをすることにしよう。
今回の目的やゴール
- 概要や特徴を把握する。
- 導入手順を把握する。
- Hello World環境の作成と起動
- ubuntu環境とNginx環境とMySQL環境の作成と起動
- コンテナ内容確認や削除の基礎的なやり方
- Doker fileやDocker Composeの概要把握
- 今回はDocker fileやDocker composeを利用した環境作成は行わない。
概要
- シンプルで軽量なコンテナ環境のことであり、Linux上で動作している。
- コンテナとは、仮想OS環境のこと。
- コンテナを使うことで、一台のコンピュータに、複数の環境を作成することができる。
- コンテナ以外の仮想環境として、下記のような仮想マシンがある。
- VMware
- Virtual Box
- Xen
- KVM
- コンテナと仮想マシンの違いは、下記。
- 独立性重視の
仮想マシン
- 軽量性重視の
コンテナ
- 独立性重視の
- 各環境毎の構成は下記。
- 左が物理マシン型環境
- 真ん中が仮想マシン型環境
- 右がコンテナ型環境
- 具体的な構成は下記。
- 物理マシン : 1つのOSが動作して、その上で複数のプロセスが動作している。CPUやメモリなどのリソースを共有。
- 仮想マシン : ハードウェアを分割後、複数の仮想コンピュータを作成する。CPU・メモリなどは、各仮想マシン独自のものとして認識。
- コンテナ : 論理的に分割後、仮想Linuxを作成する。CPU・メモリなどは、コンテナから見ると各コンテナ独自のものとして認識。
- コンテナと仮想マシンの違いは下記。
コンテナ | 仮想マシン | |
---|---|---|
起動速度 | 高速 | 低速 |
構築 | シンプル | 複雑 |
リソース消費 | 少ない | 多い |
OS | Linux | 自由 |
特徴
各マシン間のコンテナ稼働
- アプリケーションや依存ファイルを1つのイメージにまとめることができるため、実行環境が同じであることが保証される。
最適な自動化
- イメージの構築をコードとして記述することができるため、自動的にデプロイやビルドが可能。
バージョン管理
- バージョン管理機能を提供していて、履歴や差分の更新等が可能。
再利用
- イメージは、手動または設定ファイルからの自動作成で気軽に再利用できる
- ベース環境を1個用意できたら、それを元にした別のアプリケーション環境の複数構築が可能。
共有
- Docker Hubというクラウド上のサービスで、様々なイメージを提供しているため、コンテナ環境の共有が容易。
- また、自分で作成したイメージをアップロードすることもできる。
インストール
Mac
Docker for Mac
- こちらのサイトにいき、「Download」をクリックして、インストール。
- ※インストール時は、Docker Hubアカウントでのログインが求められるため、登録をする。
Windows
- [こちらのサイト]https://hub.docker.com/editions/community/docker-ce-desktop-windows)にいき、「Download」をクリックして、インストール。
- ※インストール時は、Docker Hubアカウントでのログインが求められるため、登録をする。
Linux
- ubuntuやcentOS等の各ディストリビューションごとに異なる。
- 各インストール方法はこちらのサイトを参考。
チュートリアル
バージョン確認
- ターミナル(コマンドプロンプト)を起動。
- 下記のコマンドをうち、Dockerのバージョンを確認。
$ docker version
Client:
Version: XXXX
API version: XXXX
# 簡易的なバージョン確認の場合はこちら
$ docker -v
Docker version XXXX,build XXXX
Hello World環境作成
- ターミナル(コマンドプロンプト)を起動
- 下記のコマンドをうち、Hello World環境を作成。
$ docker run hello-world
-------------------
Hello from Docker.
- 実行後のメッセージで、「Hello from Docker」が表示されれば、完了。
- 「
docker run
」の動作の仕組みは下記。-
-
docker pull
: 該当イメージが、ローカルにあるか確認して、なければリモート(Docker Hub)からダウンロード。
-
-
-
docker create
: 該当のコンテナ環境を作成
-
-
-
docker start
: 該当のコンテナ環境を実行
-
-
ubuntu起動
- 下記のコマンドをうち、ubuntu環境を作成して、そのコンテナ環境にはいる。
$ docker run -i -t ubuntu /bin/bash
----------------------
root@XXXXX :/#
- 下記のコマンドをうち、ubuntu起動を確認。
root@XXX :/# cat /etc/lsb-release
--------------------
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=XX.XX
- テストフォルダとファイルの作成
root@XXX :/# mkdir test
root@XXX :/# ll
---------
test
---------
root@XXX :/# echo hello > test/hello.txt
root@XXX :/# cat test/hello.txt
---------
hello
-
「Ctrl + D」でコンテナ終了
-
下記のコマンドで、再度コンテナ起動。
$ docker run -i -t ubuntu /bin/bash
root@XXX :/# ll
------------
-
testフォルダがなくなっていればOK。
-
再度「Ctrl + D」でコンテナ終了。
Nginxの起動
- 下記のコマンドをうち、Nginxイメージでの起動。
$ docker run -p 8080:80 nginx
-
ブラウザを起動して、
localhost:8080
にアクセス。 -
ページ内に「Welcome to nginx」と表示されていれば、完了。
-
「Ctrl + C」でWebサーバーの終了をする。
MySQLの起動
- 下記のコマンドをうち、データベースサーバーを動かす。
# eオプションは、環境変数の指定。MUSQL_ROOT_PASSWORDを指定
# name オプションは、コンテナ名の指定。例では「db」と指定。
# dオプションは、コンテナのバックグラウンド動作指定。
$ docker run -d -e MYSQL_ROOT_PASSWORD=password --name db mysql
- 下記のコマンドをうち、動作確認。
$ docker ps
- コンテナIDや名前が設定されていれば、完了。
コンテナ内容確認や削除等の基礎
コンテナ状態確認
- 下記のコマンドをうち、コンテナの状態を確認する。
# 起動コンテナの確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
XXXXXXXXX
# 終了コンテナも含めた全コンテナの確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
XXXXXXXXX
コンテナの終了
- 下記のコマンドをうち、コンテナを終了する。
# 該当のコンテナの終了
$ docker kill コンテナID
# 全てのコンテナの終了
docker kill $(docker ps -a)
コンテナの削除
- 下記のコマンドをうち、コンテナを削除する。
# 該当のコンテナを削除する
$ docker rm コンテナID
# 該当の複数コンテナを削除する
$ docker rm コンテナID コンテナID
# 全ての終了コンテナを削除する
$ docker rm $(docker ps -a -q)
Docker file
概要
- コンテナーの構成や手順を記述することができるテキスト形式のファイル
- このファイルをビルド(変換)して、自動的に環境を作成することができる。
- コンテナ内で環境構築の作業をする必要がなくなる。
- このファイルを作成しておけば、誰でも簡単に共有して、同じ環境を作成することができる。
docker-compose
概要
- 複数のDockerコンテナを連携させて動作させるためのツール。
- 設定ファイルをコードで記述することで、ウェブサーバーやデータベースサーバなど複数のコンテナを動作、連携して、ウェブアプリケーション環境などを簡単に構築・実行できる。
まとめ
- 今回はDockerの概要や基礎の学習ということで、「サーバー技術に触れた優越感」にこの上なく浸りながら、記事を書く。
- 「たくさん作っても大丈夫」という文言が、様々なサイトや文献に載っていたため、盲信して100個作成するという従順行為。
- それでも軽量に動作する環境に、驚愕の感情よりも先に、作成数倍増をたくらむ、お構いなし行為。
- 次回は、「Dockerfileを利用した環境作成」「docker-composeを利用した環境作成」を学習することにしよう。
参考サイト
-
http://docs.docker.jp/index.html
→こちらの日本語ドキュメントを参考にしました。大変お世話になりました。 -
https://paiza.hatenablog.com/entry/docker_intro
→こちらの記事を参考にしました。大変お世話になりました。
参考テキスト
-
Docker実戦活用ガイド
→こちらのテキストで学習しました。大変お世話になりました。