DOCKER
ゼロから始めるDocker(操作編)
初めまして
【氏名】 :小田島 靖
【所属】 :システムソリューション(インフラ)
【業務】 :VDI(仮想デスクトップ)設計・構築
:運用自動化プロジェクト設計・構築
:オンプレミスからクラウドへの移行
【今回やる事】
コンテナ技術を基本からソフトウェアのインストールとコンテナの起動及び操作
までをデモを含めてやります
概要
コンテナを知るところから・・・
そもそもコンテナって何?
H/W
OS
コンテナエンジン
Container Container
App App
【コンテナ型仮想化】
⇒OSではないため早い、軽い
H/W
OS
App
仮想化SW
H/W
仮想化レイヤー
OSOS
APP APP
OS
APP
OS
APP
OS
APP
OS
APP
【ホスト型仮想化】
⇒スペックを他のappと共有
【ハイパーバイザー型仮想化】
⇒仮想化で占有
重いけど簡単に作れる 早い!簡単!
このメッセージに気づいた
あなたは呪われます
重くはないが物理サーバ等
用意する必要がある
■ Check!! ■
コンテナは仮想化の一種。特徴は早くて簡単です!
コンテナはどうやって通信して
いるのか?
【外部端末からコンテナへの通信例】
IP:172.10.0.1
IP:192.168.1.1
■コンテナエンジン
インストール時
■ Check!! ■
インストール時にホストOSにコンテナ用のIPが作成されます
【外部端末からコンテナへの通信例】
IP:172.10.0.1
IP:192.168.1.1
■イメージ作成時
■ Check!! ■
へぇ・・・・(とくになし)
【外部端末からコンテナへの通信例】
IP:172.10.0.1
IP:192.168.1.1
80
関連付け
■コンテナ起動時
IP:172.10.0.2
1111
■ Check!! ■
起動時にIPとコンテナポートとサーバ側のポートを関連付けます
【外部端末からコンテナへの通信例】
IP:172.10.0
.1
IP:192.168.1.1
80
関連付け
172.10.0.2:80
■コンテナ通信時
IP:172.10.0.2
1111
192.168.1.1:1111
変換
Check!!
■外部端末からホストOSとポートで通信を行い、内部で変換されます
【外部端末からコンテナへの通信例】
IP:172.10.0.1
IP:192.168.1.1
80
関連付け172.10.0.2:80
■コンテナ起動時
(2コンテナ)
IP:172.10.0.2
1111
1112
25
関連付け
IP:172.10.0.3
192.168.1.1:1111
192.168.1.1:1112 172.10.0.3:25
変換
■ Check!! ■
複数のコンテナを起動させた際の処理も同様となります。
コンテナエンジンのインストールから
起動まで
デモです
どんな環境を作るのか?
IP:10.x.x.x
IP:172.10.1.1
HTTP
SSH
IP:172.10.1.1
http://172.10.1.1:80
■ 目標■
・外部端末からSSHでコンテナに直接ログイン
・外部端末からブラウザでコンテナのwebにアクセス
どうやるのか?
【やる事】
DOCKERFILEを使用して自作したコンテナの起動までを行います。
【DOCKERFILE】
⇒DOCKERFILEとは、コンテナの構成要素をテキストベースにまと
めたMAKEFILEとなります。
1.パッケージインストール
2.「WEBページ」転送
3.SSH設定
Dockerfile
コード ビルド
わたくし 小田島靖は本日を
もってスロットを引退します
なぜなら今年からスロットで
3000枚以上は出ないようになる
という改悪がされており、
副収入としての価値がなくなって
しまうからです。
物は試しと思いなけなしの金を
つかんで9時に川崎某所で一斉一台
の大勝負をしましたが、一向に
出る気配がなくはしごはしごを
する始末でした。
私小田島靖は宣言します
二度と打たない。
PS.あまりのいら立ちに店のガラス
割って逃走しました
■ Check!! ■
DockerFileとはコンテナの構成を自動化させるためのMakeFile
では実行します
yum install -y docker-io
systemctl enable docker.service
systemctl start docker.service
docker pull centos
mkdir -p /doc/nginx
mkdir -p /doc/nginx/html
echo "FROM centos" >> /doc/nginx/dockerfile
echo "# SSH 設定" >> /doc/nginx/dockerfile
echo "RUN yum -y install openssh-server openssh-client sshpath" >> /doc/nginx/dockerfile
echo "RUN sed -ri ¥"s/#PermitRootLogin yes/PermitRootLogin yes/g¥" /etc/ssh/sshd_config" >>
/doc/nginx/dockerfile
echo "RUN echo p@ssw0rd | passwd --stdin root" >> /doc/nginx/dockerfile
echo "#nginx 設定" >> /doc/nginx/dockerfile
echo "RUN yum -y install epel-release" >> /doc/nginx/dockerfile
echo "RUN yum -y install nginx" >> /doc/nginx/dockerfile
echo "COPY ./html /usr/share/nginx/html" >> /doc/nginx/dockerfile
echo "#その他 設定" >> /doc/nginx/dockerfile
echo "RUN systemctl enable nginx.service" >> /doc/nginx/dockerfile
echo "RUN systemctl enable sshd.service" >> /doc/nginx/dockerfile
echo "EXPOSE 80 22" >> /doc/nginx/dockerfile
echo "koukyowohashiritaitowatanabesangaittemasita" >> /doc/nginx/html/inddex.html
cd /doc/nginx/
docker build -t connginx .
docker run -itd --privileged -p 6033:22 -p 7033:80 connginx /sbin/init
docker ps -a
Docker
インストール
DockerFile
作成
DockerFile
ビルド
コンテナ起動
解説
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
Dockerパッケージインストール
# yum install –y docker-io
Dockerサービスの有効化
# systemctl enable docker.service
# systemctl start docker.service
サンプル(CentOS)ダウンロード
# docker pull centos
単純に起動させるだけ
なら4つのコマンド
に加え、起動コマンド
を実行するだけです。
※起動コマンドは後程
Dockerパッケージインストール
# yum install –y docker-io
Dockerサービスの有効化
# systemctl enable docker.service
# systemctl start docker.service
サンプル(CentOS)ダウンロード
# docker pull centos
■ Check!! ■
とりあえず使う場合は、上記実行後、起動コマンドを実行するだけです
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
Docker格納ディレクトリの作成
# mkdir –p /doc.file/nginx
# mkdir -p /doc/nginx/html
Dockerfile作成
echo "FROM centos" >> /doc/nginx/dockerfile
<略>
echo "EXPOSE 80 22" >> /doc/nginx/dockerfile
■ Check!! ■
ディレクトリはどこでもOK。だけどファイルは固定(dockerfile)
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
コマンド 意味
FROM Dockerイメージの指定
RUN コマンド実行
COPY ディレクトリ、ファイルのコピー
Add ディレクトリ、ファイルの作成
Env 環境変数の指定
EXPOSE ポート指定
MAINTENER 作成者の情報
USER 実行ユーザの指定
WORKDIR 作業ディレクトリの指定
VOLUME ボリュームのマウント
■ Check!! ■
基本は<Dockerfileコマンド>+<Linuxコマンド>で記載
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
# 使用するOSイメージファイル
FROM centos
# SSH 設定
RUN yum -y install openssh-server openssh-client sshpath
RUN sed -ri "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
RUN echo p@ssw0rd | passwd --stdin root
#nginx 設定
RUN yum -y install epel-release
RUN yum -y install nginx
COPY ./html /usr/share/nginx/html
#その他 設定
RUN systemctl enable nginx.service
RUN systemctl enable sshd.service
EXPOSE 80 22
■ Check!! ■
インストールから設定まですべてを纏めて実行させる
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
Dockerfileをビルド
# cd <dockerfilepath>
# docker build –t <containername>.
イメージチェック
# docker images
■ Check!! ■
・この状態ではdockerfileがイメージになっただけなので起動していません
・ビルド終了後、イメージが登録されているかを確認しますが、今回は使用
していません。(覚えているしコマンド垂れ流しだから・・・)
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
Dockerプロセスのチェック
# docker ps -a
イメージの起動
# docker run -itd --privileged -p 6033:22 -p 7033:80 connginx /sbin/init
■ Check!! ■
・「p」オプションは複数指定が可能。
・「--privileged」はサービス操作を行う際に使用します。
Docker
インストール
Dockerfile
作成
Dockerfile
ビルド
Dockerfile
起動
・ブラウザで「<ホストOSのIP>:6022/inddex.html」でアクセス
・SSHクライアントで「<ホストOSのIP>:5022」でアクセス
実行後以下の内容の結果が出たら構築成功です!
コンテナにログイン!!WEBページ(inddex.html)の表示
コンテナを利用してできる環境
これまでのコンテナ技術を使用して作成可能であるシステムの一例をご紹介!
コンテナを使う事で下記のような構成の環境も1台のサーバで達成できます。
クラウドも自由自在!
https://qiita.com/yo_dazy/items/30b696bb7bf60daa2854
※やり方乗っけてます(Azure環境へのアクセスまで)
1111 22
2222
3333
【 JenkinsとAnsibleを利用したクラウド構築環境】
ポートバインド
普通の接続 Playbook
JOB
SSH
HTTP
8080 22
※各コンテナにはDocker以外の技術も使用しております。コンテナ技術だけでできません!!!!
※各コンテナにはDocker以外の技術も使用しております。
⇒コンテナ技術だけではできません!!!!!!!!!
最後に
これまでご紹介した以外にも組み合わせ次第で様々な環境構築ができ、イ
メージファイルの共有も可能である「コンテナ技術」はもはや外せない技術の
一つではないかと思います。
今現在企業でも実導入が増えつつある「コンテナ技術」これを機にやってみて
はどうでしょうか?
ご清聴どうもありがとうございました。
THE END

Docker v14

Editor's Notes

  • #6 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #8 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #9 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #10 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #11 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #12 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #15 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #17 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #19 FROM元となるDockerイメージの指定MAINTAINER作成者の情報RUNコマンドの実行ADDファイル/ディレクトリの追加CMDコンテナーの実行コマンド 1ENTRYPOINTコンテナーの実行コマンド 2WORKDIR作業ディレクトリの指定ENV環境変数の指定USER実行ユーザーの指定EXPOSEポートのエクスポートVOLUMEボリュームのマウント
  • #21 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #22 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #23 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #24 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #25 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #26 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #27 ホスト型 : ホストOS上に[VMPlayer]等のソフトウェアをインストールしそのSWの中に仮想マシンを作成 ポイント : 手軽だが仮想マシンの持つスペックはホストOSのスペックから使う為複数起動させると重くなる ハイパーバイザー : サーバに直接「ハイパーバイザー」と呼ばれる機能をインストールしサーバの持つスペックをすべて仮想化のために使用。              他のアプリケーションと共有するホスト型よりも処理が安定。企業で使う仮想化環境はほぼこの形 コンテナ型 : ホストOSの持つカーネル情報を共有しアプリケーションはそれぞれ別に稼働させる。OSは共有しているため起動までの処理時間が他の仮想化に比べ早いがホストOSと違うOSで稼働させることは不可能
  • #28 FROM centos RUN yum install -y epel-release RUN yum install -y nginx copy ./html /usr/share/nginx/html RUN systemctl enable nginx.service EXPOSE 80 CMD ["/sbin/init"]
  • #30 FROM centos RUN yum install -y epel-release RUN yum install -y nginx copy ./html /usr/share/nginx/html RUN systemctl enable nginx.service EXPOSE 80 CMD ["/sbin/init"]
  • #31 FROM centos RUN yum install -y epel-release RUN yum install -y nginx copy ./html /usr/share/nginx/html RUN systemctl enable nginx.service EXPOSE 80 CMD ["/sbin/init"]
  • #34 FROM centos RUN yum install -y epel-release RUN yum install -y nginx copy ./html /usr/share/nginx/html RUN systemctl enable nginx.service EXPOSE 80 CMD ["/sbin/init"]