##1 前書き
qiita初めての投稿です
dockerを一から勉強する際の備忘録及びマークダウンの書き方の練習を兼ねて残していきます。
##2 コンテナ技術
ホストOS上に論理的なコンテナを作り必要なライブラリやアプリケーションをまとめて一つの塊として扱う技術
######2.1ホスト型サーバー仮想化
virtualboxやVMwareはメモリやCPUリソースの無駄が大きい(dockerのubuntu等はGUIが付随しない最小限のパッケージ)
ホストOSの上にゲストOSが乗っかる
######2.2ハイパーバイザー型サーバー仮想化
MicrosoftのハイパーV等
ハードウェアを直接制御するのでホスト型よりリソースの効率が良い
##3 コンテナの構成要素から分かるDockerのメリット
1.インフラの環境設定
2.ライブラリ
3.実行するプログラム本体
4.ミドルウェア
特にdockerのメリットが出るのはインフラの環境設定の部分と持ち運びの容易さ。
ハードウェア・OS・ミドルウェア等が異なるとプログラムは同じようには動かない。dockerとdocker imageさえあれば再現可能(但しホストとコンテナの環境変数を合わせる必要がある場合等はimageからコンテナを作った後も環境構築の必要性があるために絶対じゃない)
dockerとdocker imageだけで実行可能なので持ち運びに便利
#####3.1 学習に使える
Dockerコンテナが簡単に作れるということは簡単に壊せることも意味する
virtual boxでは初心者は設定ファイルをいじったりするのには勇気がいる(わからなくなったら最悪再インストール)
試行錯誤が簡単にできるのでlinuxコマンド等に触れるのに便利
##4 Docker3大機能
1.Build
2.共有
3.RUN
####4.1 Build
インフラの構成情報や実行ファイルを記述したDockerfile(後述)からdocker imageを構築します。 例えばCentOSイメージ Apacheイメージ 実行ファイル(アプリ)イメージ をひとまとめにしたファイル。
Dockerfileはlinux上での動きを1つずつ順番に記述していくような形になるために作成にはlinuxコマンドの知識が必要です。(もう少し詳しく後述予定)
####4.2 共有
作成したDocker imageはDocker hubで共有・配布することができます。
git hubと連携することでgithubでDockerfileを管理してDockerhubで自動的にイメージ作成なども可能です。(後述予定)
####4.3 RUN
作成したコンテナの実行です。ターミナル/コマンドプロンプトから簡単に実行・停止が可能です。
コンテナの実行はLinuxカーネルを用いて行われる別々のコンテナでもカーネル自体は一つのものを共有
複数のマシンから分散環境での実行も可能(これは試したことがないです)
##5 Dockerの通信構成とポート
##6 コンテナのライフサイクル
##7 Dockerでよく使うコマンド集 (追加中)
以下のコマンドだけでなくイメージやコンテナの識別子が必要です
コマンド | 内容 | よく使うオプション | 備考 |
---|---|---|---|
container run | コンテナの実行 | bin/bash | コンテナの作成から実行まで行ってくれる bin/bashでコンテナのシェルを動かして操作できる |
-d | サーバーとしてバックグラウンで実行させるのに使う | ||
container ls | 稼働中のコンテナの確認 | -a | -aで停止中含めて全てのコンテナを表示 |
container exec | 稼働しているコンテナで新しいプロセスの実行 | -d | -dコマンドでバックグラウンドで実行する |
container commit | コンテナからのイメージ作成 | -a | -aで作成者の名前(Author)がつけられる |
container diff | コンテナでの操作の変更点を確認 | コンテナ内では何をしたか自分でわからなくなることが多い |