Início
Conheça mais
Enviar pesquisa
Carregar
Entrar
Cadastre-se
Anúncio
Check these out next
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Masahito Zembutsu
オトナのDocker入門
Tsukasa Kato
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Docker volume基礎/Project Longhorn紹介
Masahito Zembutsu
Dockerを支える技術
Etsuji Nakai
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
DockerでWordPressサイトを開発してみよう
mookjp
1
de
111
Top clipped slide
そろそろ知っておきたい!!コンテナ技術とDockerのキホン
26 de May de 2015
•
0 gostou
115 gostaram
×
Seja o primeiro a gostar disto
mostrar mais
•
18,157 visualizações
visualizações
×
Vistos totais
0
No Slideshare
0
De incorporações
0
Número de incorporações
0
Baixar agora
Baixar para ler offline
Denunciar
Tecnologia
NTT-AT社内で定期的に実施している勉強会(CORETECH技術講習会)で発表した資料です。
Naoki Nagazumi
Seguir
Software Developer em NTT Advanced Technology
Anúncio
Anúncio
Anúncio
Recomendados
Dockerクイックツアー
Etsuji Nakai
53.4K visualizações
•
38 slides
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
68.5K visualizações
•
63 slides
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
82K visualizações
•
182 slides
Docker 基本のおさらい
Naoki Nagazumi
94.4K visualizações
•
40 slides
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
15.8K visualizações
•
62 slides
Docker Compose 徹底解説
Masahito Zembutsu
60.5K visualizações
•
123 slides
Mais conteúdo relacionado
Apresentações para você
(20)
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Masahito Zembutsu
•
16.6K visualizações
オトナのDocker入門
Tsukasa Kato
•
2.8K visualizações
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
•
23K visualizações
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
•
62.6K visualizações
Docker volume基礎/Project Longhorn紹介
Masahito Zembutsu
•
3.2K visualizações
Dockerを支える技術
Etsuji Nakai
•
81.9K visualizações
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
•
28.7K visualizações
DockerでWordPressサイトを開発してみよう
mookjp
•
47K visualizações
Windowsコンテナ入門
Kyohei Mizumoto
•
2.5K visualizações
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
•
82.6K visualizações
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
•
613 visualizações
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
•
138.9K visualizações
BuildKitの概要と最近の機能
Kohei Tokunaga
•
3.7K visualizações
Docker道場オンライン#1 Docker基礎概念と用語の理解
Masahito Zembutsu
•
3.2K visualizações
Dockerからcontainerdへの移行
Akihiro Suda
•
5.8K visualizações
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
•
25.2K visualizações
CentOS Linux 8 の EOL と対応策の検討
Masahito Zembutsu
•
11.9K visualizações
Dockerからcontainerdへの移行
Kohei Tokunaga
•
15.3K visualizações
Redisの特徴と活用方法について
Yuji Otani
•
98.6K visualizações
DockerとPodmanの比較
Akihiro Suda
•
42.4K visualizações
Destaque
(9)
コンテナ技術と普及がシステム・インテグレータに与える影響
Masahito Zembutsu
•
7.7K visualizações
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
雄哉 吉田
•
1.9K visualizações
マイクロサービスとOSSのおいしい関係
Fumiya Shinozuka
•
1.8K visualizações
Dockerイメージ管理の内部構造
Etsuji Nakai
•
35.7K visualizações
神奈川Ruby会議の会場係だけが知る密かな危機の話
Naoki Nagazumi
•
1.4K visualizações
マイクロサービスで、 一歩先行くImmutable Infrastructureを目指そう
Takashi Abe
•
7.1K visualizações
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
Etsuji Nakai
•
38.6K visualizações
マイクロサービスアーキテクチャとは何か
Yusuke Suzuki
•
65.8K visualizações
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
Kazuhito Miura
•
25.1K visualizações
Anúncio
Similar a そろそろ知っておきたい!!コンテナ技術とDockerのキホン
(20)
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Masahito Zembutsu
•
4.6K visualizações
DockerとDocker Hubの操作と概念
Masahito Zembutsu
•
27.9K visualizações
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
•
3.1K visualizações
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
•
32.9K visualizações
Dockerハンズオン
Kazuyuki Mori
•
2.3K visualizações
Docker Swarm モード にゅうもん
Masahito Zembutsu
•
7.1K visualizações
Docker for Windows & Web Apps for Containers 実践活用技法
Microsoft Corporation
•
4.3K visualizações
Docker超入門
VirtualTech Japan Inc.
•
8.7K visualizações
Docker実践入門
hiro nemu
•
7.4K visualizações
Dockerことはじめ的なはなし
pinmarch_t Tada
•
627 visualizações
20230128.pptx
ssuserdad311
•
312 visualizações
ゆるふわなDockerの使い方
Kento Aoyama
•
1.2K visualizações
Docker入門
Keita Midorikawa
•
315 visualizações
Dockerハンズオン
Kon Yuichi
•
2K visualizações
Docker講習会資料
teruyaono1
•
107 visualizações
Docker v14
靖 小田島
•
122 visualizações
ラズパイ2で動く Docker PaaS
npsg
•
3.9K visualizações
Docker Tokyo
cyberblack28 Ichikawa
•
21.9K visualizações
捕鯨!詳解docker
雄哉 吉田
•
21.7K visualizações
Webアプリケーション開発者のためのDockerハンズオン
虎の穴 開発室
•
102 visualizações
Último
(20)
JSTQB_テストマネジメントとレビュープロセス.pdf
akipii Oga
•
214 visualizações
OIDC(OpenID Connect)について解説③
iPride Co., Ltd.
•
25 visualizações
JSTQB_テストプロセスの概念モデル.pdf
akipii Oga
•
242 visualizações
【DL輪読会】大量API・ツールの扱いに特化したLLM
Deep Learning JP
•
93 visualizações
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
Kazumi IWANAGA
•
6 visualizações
通信プロトコルについて
iPride Co., Ltd.
•
7 visualizações
3Dプリンタって いいね
infinite_loop
•
59 visualizações
AIEXPO_CDLE名古屋紹介
KotaMiyano
•
4 visualizações
Voyager: An Open-Ended Embodied Agent with Large Language Models
harmonylab
•
5 visualizações
20230601_Visual_IoTLT_vol14_kitazaki_v1.pdf
Ayachika Kitazaki
•
71 visualizações
SoftwareControl.pdf
ssusercd9928
•
15 visualizações
ChatGPT触ってみた
infinite_loop
•
58 visualizações
統計学の攻略_正規分布ファミリーの全体像.pdf
akipii Oga
•
239 visualizações
20230523_IoTLT_vol99_kitazaki_v1.pdf
Ayachika Kitazaki
•
112 visualizações
初学者のためのプロンプトエンジニアリング実践.pptx
Akifumi Niida
•
469 visualizações
Üslup ve tercüme.pdf
1Hmmtks
•
2 visualizações
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
•
137 visualizações
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
Deep Learning JP
•
101 visualizações
HTTPの仕組みについて
iPride Co., Ltd.
•
9 visualizações
JSONEncoderで詰まった話
とん とんぼ
•
144 visualizações
Anúncio
そろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!! コンテナ技術と Dockerのキホン NTTアドバンステクノロジ株式会社 アプリケーションソリューション事業本部 長住 直樹
自己紹介 長住 直樹(ながずみ
なおき)/ Twitter @nk_ngzm NTTアドバンステクノロジ株式会社 アプリケーションソリューション事業本部 社内で技術者育成活動(通称:CORETECH)を推進しています。
Linux Container Linuxカーネルが持つ機能を 使って実現するコンテナ。 略して、LXCと表記することもある。
ここで、VMのおさらい VMは、コンピュータの上で動くOSやVMを実現するためのハイパーバイザの上で、実際 のハードウェアをエミュレートするVMが動きます。つまり実際の物理的なコンピュータ と同じようなものがソフトウェアによって実現されているので、このVMを使うにはOS が必要になります。つまり、物理的なコンピュータ上で動くOSの上でさらにOSが動き ます。 引用: http://gihyo.jp/admin/serial/01/linux_containers/0002
対してコンテナの原理 起動する全てのプロセスはコンピュータ上にインストールされたOS(ホストOS)上で 直接起動します。通常のプロセスの動作と異なるのは、そのプロセスの一部をグループ 化し、他のグループやグループに属していないプロセスから隔離した空間で動作させる 点です。貨物輸送のコンテナのように、隔離された空間にプロセスが入っているので、 この空間を『コンテナ』と呼ぶわけです。実際のコンテナのように、あるコンテナの内 部から他のコンテナの内部を見ることはできません。 引用: http://gihyo.jp/admin/serial/01/linux_containers/0002
コンテナを実現するカーネル機能 名前空間とも呼ばれ、マウント、ホスト・ドメイン名、プロセス空間、ソケットや メッセージキューの空間、ユーザ・グループ、ネットワークなどの名前空間ごとに 識別・隠蔽できる機能。例えば、マウント名前空間を使うと、名前空間内で行った マウント操作を他の名前空間には反映させないといったことができる。すなわち, コンテナ内でマウント操作を行った場合、そのマウントはホストOSや他のコンテ ナからは見ない。 名前空間の名前 隔離されるリソース 実装されたカーネル バージョン マウント名前空間 マウントの集合,操作
2.4.19 UTS名前空間 ホスト名,ドメイン名 2.6.19 PID名前空間 プロセスID(PID) 2.6.24 IPC名前空間 SysV IPCオブジェクト,POSIXメッセージキュー 2.6.19 ユーザ名前空間 UID,GID 3.8 ネットワーク名前空間 ネットワークデバイス,アドレス,ポート,ルーティ ングテーブル,フィルタなど 2.6.26
コンテナを実現するカーネル機能 「Control Group」の略。プロセスをグループ化して,そのグループ内に存在する プロセスに対して、たとえば、CPUやメモリなどのリソースに制限を行うなど、グ ループ単位のリソース管理が行える機能。 サブシステム 機能 blkio
ブロックデバイスの入出力アクセスを制御 (Read <= N bytes/sec) cpu スケジューラにより CPU のアクセスを制御 cpuset マルチコアの場合に利用する CPU, メモリノードを制御 devices デバイスへのアクセス制御 freezer 処理の一時停止, 再開 memory メモリリソースの制御 hugetlb N byteまでとかの制限 net_cls Linux トラフィックコントローラ (tc) がパケットを識別できるよう, クラス識別子 (classid) によりネットワークパケットにタグをつける net_prio NIC 別にトラフィックのプライオリティを設定する
コンテナを実現するカーネル機能 ルートディレクトリを、任意の特定のディレクトリに変更できる機能。 chroot 内で起動されるプロセスは、設定された任意の場所をルートディレクトリ として動作するため、その範囲外のディレクトリやファイルへは一切アクセスでき なくなる。 / libbin usr
homeetc bin lib chroot → / etc usr
コンテナを実現するカーネル機能 netns(Linux Network Namespace)は、ホストサーバ内に、仮想的ブリッジ 「br0」と、「veth」と呼ばれる直結した仮想NICのペアからなる仮想ネットワー クを構築する。コンテナ毎に独立した
veth が生成され、その片側をコンテナ内部 のイーサネット「eth0」として割り当てる。 引用 : http://www.school.ctc-g.co.jp/columns/nakai/nakai41.html
デモ(その1) chroot を使ったルートファイルシステムの隔離
chroot / libbin usr demoetc bin
lib chroot → / etc usr
chroot 新たな ルートディレクトリの作成
bashの動作に最低限必要な環境を新たな ルートディレ クトリ配下にコピー 新たなルートディレクトリでbashを動かす $ sudo mkdir -p /demo/chroot $ sudo cp -pr /bin /lib /lib64 /usr /etc /demo/chroot/ $ sudo chroot /demo/chroot /bin/bash
LXC Linuxカーネルの機能のみを用いてコンテナの操作 を行うソフトウェアとして、2008年ごろから linuxcontainers.orgで 開発されている。 Linuxカーネルにパッチを当てたりすることなく、 カーネルに実装されているコンテナに関する機能 を前提にして簡単にコンテナの操作が行える。
Container と LXC LXCという用語は以下の2つの意味で使われることがある。 I.
Linuxカーネルが持つ機能を使って実現するコンテナ という一般的な意味で使う場合 II. linuxcontainers.org で開発されているコンテナを扱 うためのソフトウェアという狭い意味 本講習会では、前者の意味では「Container/コンテナ」、 後者の意味では「LXC」と区別して説明する。
ちなみに、LXC以外には? LXC以外の代表的なコンテナ方面のソフトウェア。 Linuxカーネルにコンテナ関連の技術が充分に実装されていない頃から、カーネルにパッチを当 ててコンテナを実現してきた本分野のパイオニア的ソフトウェア。現在Linuxカーネルに実装さ れているコンテナ機能にはOpenVZ由来のものが数多くある。なお、これをベースとした商用 ソフト「Virtuozzo」は、現在でも、世界中のホスティングサービスで広く使われている。 Cloud Foundry というPaaSを構築できるソフトウェアで、その心臓部といえるコンテナ機能 を提供するコンポーネント。 主に、Linux
kvm サーバ仮想化環境を管理するツールであるが、Linuxコンテナにも対応して いる。
デモ(その2) LXCを使用したコンテナの利用
LXCの利用条件 LXCのインストールには、ubuntu OSがお勧め、 出来る限り ubuntu14.04
以降のバージョンを使 用すること。 centos など RedHat系OSにもインストールでき るようであるが、ubunutに比べて環境設定が激し く面倒くさい。(インストーラでいろいろやってくれない) LXCは、root ユーザで操作する必要がある。
デモ環境 ホスト ubuntu 14.0.4
trusty / 64bit Kernel 3.13.0-48-generic lxc version 1.0.7-0ubuntu0.1
LXC インストール ubuntuの場合、以下のコマンド一発でインストールが 終わる。
ubuntu01という名前でubuntuベースのコンテナ作成 ※ 社内ネットワークを経由する場合は、別途Proxy設定が必要。 $ sudo apt install lxc $ sudo lxc-create -t ubuntu -n ubuntu01
LXCでコンテナ作成 LXCコンテナは、仮想マシンのようにDVDなどのISOイ メージからインストールすることはできない。 従って、LXCには、コンテナを作成するためのスクリプト としてテンプレートが付属しており、テンプレートを使っ て、コンテナイメージを作成する。 また、 lxc-downloadという名前のテンプレートが付属し ており、あらかじめ構築されたコンテナイメージをLXCの サイトからダウンロードしてコンテナを作成することも可 能である。
コンテナ起動と停止 ubuntu01 という名前のコンテナを起動
起動したコンテナに接続(その1) 起動したコンテナに接続(その2) 起動したコンテナを停止 $ sudo lxc-start -n ubuntu01 -d $ sudo lxc-attach -n ubuntu01 $ sudo lxc-stop -n ubuntu01 $ sudo lxc-console -n ubuntu01
その他の基本操作 作成したコンテナの一覧を見る ubuntu01
という名前のコンテナの情報を見る $ sudo lxc-ls ubuntu01 $ sudo lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART --------------------------------------------- ubuntu01 RUNNING 10.0.3.18 - NO $ sudo lxc-info -n ubuntu01 Name: ubuntu01 State: RUNNING PID: 26948 ... ...
その他の基本操作 ubuntu01コンテナをubuntu02という名前でクローン ubuntu02
という名前のコンテナを削除 その他、メモリやCPU、ディスクなどのコンテナ・リソー スを制御するコマンド(lxc-cgroup)などがある。 $ sudo lxc-clone -o ubuntu01 -n ubuntu02 $ sudo lxc-destroy -n ubuntu02
入門編
Docker 「Docker」は、米国 Docker社(旧dotCloud)が開 発するオープンソースのコンテナ管理ソフトウェ アのひとつ。Go言語で実装されている。 軽量な仮想化環境であるコンテナを提供し、アプ リケーション実行環境をそのまま Dockerイメー ジとして保存できる。
Docker 仮想サーバではなくアプリケーションに最適化さ れているため、原則的に、ひとつのコンテナに、 ひとつのアプリケーションが実行する構成となる。 さらに、Dockerは、ネットワーク、ストレージ、 ロギング、ディストリビューションなどマシン特 有の設定を抽象化しているため、どんなマシンへ も、どんな構成でも実行でき、ポータブルデプロ イを実現できる。
LXCとDocker もともとDockerは、 LXCを経由してLinuxコ ンテナ機能を利用して いた。 Docker Ver0.9 より、 libcontainer
という独 自のライブラリを経由 するように改良。 現在でもオプションで LXCを選択することが可 能。 引用 : https://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/
AUFS AUFS(Another Union FS)とは、レイヤ構造の ファイルシステムである。 親のファイルシステムをリード・オンリーとし、 その上にライタブルなレイヤを重ねていく。 こうして複数のレイヤを積み重ね、レイヤを通じ て、ひとつのファイルシステムのように扱う。 親コンテナからの差分管理ができるため、コンテ ナイメージの容量を軽量化できる。
AUFS 親コンテナか らの差分管理 ができるため、 コンテナイ メージの容量 を軽量化でき る。 引用 : http://gesellix.github.io/gradle-summit-2014/
DockerイメージとDockerコンテナ Dockerイメージとは、Docker コ ンテナ生成のベースとなるひな形。 代表的な例として ubuntu
や centos 等のディストリビュー ションがイメージ化されている。 Dockerコンテナとは、ある Dockerイメージをベースにして 個別アプリケーションの環境を セットアップして作成するコンテ ナ実行環境。 Docker コンテナ Docker イメージ Docker イメージ docker run docker commit
Docker Hub Docker社は、Docker Hub
というクラウド上のリポジトリ を提供しており、様々な団体や個人が作成した Dockerイ メージを利用したり、自分で作成したイメージを共有する ことが可能。 https://hub.docker.com/ Docker コンテナ Docker イメージ Docker イメージ docker run docker commit docker pull docker push
デモ(その3) Dockerの基礎的な利用方法
Docker の利用条件 Docker をインストールできる環境は、
Red Hat 系 OS もしくは ubuntu系 OS であること、およ び 64bitマシン+OS であること。 カーネルが古いとうまく動作しないので、インス トール前に 最新バージョンにアップ・トゥ・デー トしておくこと Dockerは、root ユーザ で操作する必要がある。
デモ環境 ホスト cnetos 6.6 /
64bit Kernel 2.6.32-504.el6.x86_64 docker version 1.4.1, build 5bc2ff8/1.4.1
Docker インストール centos
6.6 へインストール centos 6.6 で自動起動設定(必要に応じて) ※ 社内ネットワークを経由する場合は、別途Proxy設定が必要。 $ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 $ sudo yum -y install ¥ http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo yum install docker-io $ sudo chkconfig docker on
Docker インストール centos
7系 へインストール centos 7系 で自動起動設定(必要に応じて) ※ 社内ネットワークを経由する場合は、別途Proxy設定が必要。 $ sudo yum install docker $ sudo systemctl enable docker.service
Docker インストール ubuntu
14.04 LTS へインストール ubuntu 14.04 LTS で自動起動設定(必要に応じて) ※ 社内ネットワークを経由する場合は、別途Proxy設定が必要。 $ sudo apt install docker.io $ sudo update-rc.d docker.io defaults
Docker イメージ取得 centos
最新版のDockerイメージをDL ubuntu 最新版のDockerイメージをDL ubuntu 12.04 DockerイメージをDL $ sudo docker pull ubuntu:latest $ sudo docker pull ubuntu:12.04 $ sudo docker pull centos:latest ※社内ネットワークを経由する場合は、別途 DNSサーバの設定と Proxy設定が必要。
Docker イメージ管理 Dockerイメージの一覧表示
DLした ubuntu 12.04 イメージを削除 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos latest 214a4932132a 40 hours ago 229.6 MB ubuntu latest d0955f21bf24 3 weeks ago 192.7 MB ubuntu 12.04 9c5e4be642b7 3 weeks ago 132.1 MB $ sudo docker rmi ubuntu:12.04 $ sudo docker rmi [IMAGE ID で指定することも可能]
Docker コンテナ生成+起動 centos
最新版イメージから centos01という名 前でコンテナを作成、そして、アプリケーショ ンに bash を指定して実行する Dockerコンテナ centos の bash に入る Dockerコンテナの bash を exit するとコンテナ自体も終了する $ sudo docker run -i -t --name centos01 centos:latest /bin/bash [コンテナ内のbashでいろいろ操作] ... ... # exit (bash を exit)
Docker コンテナ生成+起動 ubuntu
最新版イメージから ubuntu01 という 名前でコンテナを作成、同じくアプリケーショ ンに bash を指定して実行 Dockerコンテナ ubuntu の bash に入る コンテナの bash を exit するとコンテナも終了する $ sudo docker run -it --name ubuntu01 ubuntu /bin/bash
Docker コンテナ生成+起動 docker
run コマンド書式 # docker run ¥ [オプション] ¥ [--name コンテナ名] ¥ イメージ名 [:タグ名] ¥ [コンテナで実行するコマンドとその引数]
Docker コンテナ生成+起動 docker
run の主なオプション option 説 明 -d コンテナをバックグラウンドで実行する。 WebサーバやDBサーバなど、デーモン系のプロセスを常時実行す るコンテナの場合に指定する。 -i コンテナの標準入力を開く。 /bin/bashなどでコンテナを対話で操作する場合に指定する。 -t 端末デバイス(tty)を確保する。-iと同時に使用することが多い。 /bin/bashなどでコンテナを対話で操作する場合に指定する。 -p "-p ホスト側ポート:コンテナ側ポート" で、Dockerサーバとホス トサーバ間のポートマッピングを構成する
Docker コンテナ生成+起動 Docker は、仮想サーバではなくアプリケーションに最適化されているため、 原則的に、ひとつのコンテナに、ひとつのアプリケーションが実行する構成と なる。 すなわち、Dockerは、docker
run で作成 したコンテナ内で、同コマンドで指定する ひとつの アプリケーションを実行する。 指定したアプリケーションが exit すると同 時にそのDockerコンテナも 停止 する。
デタッチ/アタッチ centos02コンテナを作成してbashを起動 Dockerコンテナをデタッチ
Dockerコンテナにアタッチ 再び、Dockerコンテナに入る bash を exit でコンテナを終了 $ sudo docker run -it --name centos02 centos:latest /bin/bash コンテナ内で [Ctrl] + [p] → [Ctrl] + [q] キーを押下 $ sudo docker attach centos02
Docker コンテナ管理 既存コンテナ
centos02 を再起動 docker start コマンド書式 $ sudo docker start –i centos02 # docker start [-i] {コンテナ名|コンテナID} option 説 明 -i コンテナの標準入力を開く。 /bin/bashなどでコンテナを対話で操作する場合に指定する。
Docker コンテナ管理 Docker
コンテナ一覧(動いているものだけ)表示 止まってるものを含め全部の一覧 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e9b0b2759ec centos:latest "/bin/bash" 4 minutes ago Up 50 seconds centos02 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e9b0b2759ec centos:latest "/bin/bash" 6 minutes ago Up 3 minutes centos02 1352f3ef1c8b ubuntu:latest "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago ubuntu01 cc8c0601370d centos:latest "/bin/bash" 13 minutes ago Exited (0) 12 minutes ago centos01
Docker コンテナ管理 起動中の
centos02コンテナを停止 Docker コンテナの削除 $ sudo docker stop centos02 $ sudo docker stop [container ID で指定することも可能] $ sudo docker rm centos02 $ sudo docker rm [container ID で指定することも可能]
カスタム Docker イメージ作成 Docker コンテナ Docker イメージ Docker イメージ docker
run docker commit Docker コンテナ docker run httpd install httpd 起動 with httpd
カスタム Docker イメージ作成
centos03 コンテナを作成して bashで起動 Dockerコンテナのシェルに入る centos03コンテナに httpd をインストール Ctrl+p+q で Dockerコンテナをデタッチ [コンテナ内のbashで操作] # yum install -y httpd $ sudo docker run -it --name centos03 centos:latest /bin/bash ※社内ネットワークを経由する場合は、コンテナ内部のサーバに対する Proxy設定が必要。
カスタム Docker イメージ作成
centos03 コンテナを停止 Apache をインストールした centos03 コンテ ナから「hoge/httpd」という名前の新たな Dockerイメージを作成 $ sudo docker stop centos03 $ sudo docker commit centos03 hoge/httpd
カスタム Docker イメージ作成
docker commit コマンド書式 # docker commit ¥ {コンテナ名|コンテナID} ¥ [ユーザ名/]イメージ名
カスタム Docker イメージ作成
docker imagesで、作成したイメージを確認 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hoge/httpd latest 140390d72115 13 seconds ago 311.2 MB centos latest 0114405f9ff1 6 hours ago 229.6 MB ubuntu latest d0955f21bf24 3 weeks ago 192.7 MB
カスタム Docker イメージ作成
作成した hoge/httpd イメージを元に、web01 というコンテナを作成、バックグラウンドモー ドで起動する docker ps で起動確認 ホストの8080ポートにアクセスしてテスト! $ curl localhost:8080 $ sudo docker run -d -p 8080:80 --name web01 ¥ hoge/httpd /usr/sbin/httpd -D FOREGROUND
Docker コンテナ管理 バックグラウンドで起動中の
web01コンテナに接続 バックグラウンドで起動中の web01コンテナを停止 $ sudo docker exec -it web01 /bin/bash $ sudo docker stop web01 $ sudo docker stop [container ID で指定することも可能]
Docker Hub でイメージ共有
Docker Hub のアカウントを作成 Docker Hubにログイン Docker Hub に先ほど作成した「hoge/httpd」 イメージをPUSH $ sudo docker login $ sudo docker push hoge/httpd https://www.docker.com/
実践編
Dockerfile Dockerには、Dockerコンテナ の構成情報をテキスト形式で記 述できる「Dockerfile」という 仕様がある。 そして、Dockerfile を解釈し Dockerイメージを作成する 「docker build」コマンドが用 意されている。 Dockerfile docker build Docker イメージ
Dockerfile FROM ubuntu MAINTAINER hoge<hoge@sample.net> RUN
apt-get install -y httpd EXPOSE 80 CMD ["httpd", "-D" "FOREGROUND"] ① ubuntu(latest)をベースとする ② 管理者はhoge <hoge@sample.net> ③ httpdをインストール ④ ポート80番をオープン ⑤ httpdサーバをフォアグランドに起動(上書き可能) 以上の手順が実行された Docker イメージを作成
Dockerfile コマンド 意味 FROM 元となるDockerイメージの指定 MAINTAINER
作成者の情報 RUN コマンドの実行 ADD ファイル/ディレクトリの追加 CMD コンテナーの実行コマンド 1 ENTRYPOINT コンテナーの実行コマンド 2 WORKDIR 作業ディレクトリの指定 ENV 環境変数の指定 USER 実行ユーザーの指定 EXPOSE ポートのエクスポート VOLUME ボリュームのマウント
Dockerイメージのビルド Dockerfile をビルドし
hoge/ubu:1.0 という Dockerイメージを生成 $ cd [Dockerfileがあるディレクトリ] $ sudo docker build –t hoge/app:1.0 ./ Dockerfile docker build Docker イメージ hoge/app:1.0
Dockerイメージのビルド docker build
書式 # docker build ¥ [-t ユーザ名/イメージ名[:タグ名]] ¥ Dockerfile格納ディレクトリ
引用 : http://www.slideshare.net/durdn/be-a-better-developer-with-docker Dockerイメージのビルド
Data Volume 複数のコンテナ間で永続的なデータや共有データ を扱うための特別なヴォリューム (ディレクトリ)。 Data Volume
に対する変更は直接反映され、イ メージの変更に含まれない。 Data Volume は参照するコンテナがなくなって も存続する。
Data Volume ホストとのヴォリューム共有 引用 :
http://www.slideshare.net/durdn/be-a-better-developer-with-docker
Data Volume ホストの
/opt/test-app/ をコンテナの /app と してマウントさせる $ sudo docker run -it -v /opt/test-app:/app ubuntu /bin/bash ホスト側 マウントされるディレクトリ コンテナ側 マウントディレクトリ
Data Volume Container コンテナ間のヴォリューム共有 引用
: http://www.slideshare.net/durdn/be-a-better-developer-with-docker -v /var/volume1 -v /var/volume2 Data Volume Container
Data Volume Container
/var/volume を共有するデータボリュームコン テナを生成+起動する 上記コンテナの /var/volume を共有するコン テナを生成+起動する $ sudo docker run -it -v /var/volume --name vol1 ubuntu /bin/bash $ sudo docker run -it --volumes-from vol1 ubuntu /bin/bash FROM ubuntu ... ... VOLUME ["/var/volume"] CMD ["/bin/bash"]
Data Volume Container ユーザデータなど、壊せない情報の格納場所とし て
Data Volume Container を利用する。 Webサーバ コンテナ APサーバ コンテナ DBサーバ コンテナ Data Volume コンテナ ログ保存先 Volume DB データ格納 Volume
ネットワークポートマッピング コンテナを起動するときに、コンテナ内部で使用 するポートを、任意のホスト側ポート番号 (49152以降推奨)に割り当てることができる。 ホスト側のポート番号は、49000 ~ 49900
の 範囲で自動的にランダムな番号を割り当てたり、 ユーザが任意の番号を指定したりすることが可能。 ホスト コンテナ IP :X PORT:X IP :Y PORT:Y ポート マッピング
ネットワークポートマッピング コンテナ内でオープンしているポートをホスト 側ランダムなポート番号にマッピング コンテナのポート22がホストのどのポートに マッピングされたか知る方法 $
sudo docker run -d -P ubuntu:latest /usr/sbin/sshd -D $ sudo docker port [コンテナID] 22 $ sudo docker run -d -p 22 ubuntu:latest /usr/sbin/sshd -D
ネットワークポートマッピング コンテナのポート22をユーザが指定するホスト 側ポート番号2222にマッピング $ sudo
docker run -d -p 2222:22 ubuntu:latest /usr/sbin/sshd -D ホスト コンテナ IP :X PORT:2222 IP :Y PORT:22 ポート マッピング ホスト側ポート コンテナ側ポート
コンテナ・リンク 複数のコンテナ間で、専用のネットワークを構築 することができる。 コンテナA (コンテナBに接続) コンテナB (リンク元)
コンテナ・リンク リンク元のコンテナA コンテナAに接続するコンテナB $
sudo docker run –d --name pg ubuntu:latest postmaster -D /usr/local/pgsql/data $ sudo docker run -d --link pg:db ubuntu:latest /someService コンテナB 環境変数 DB_PORT_5432_TCP_ADDR=172.17.0.2 DB_PORT=tcp://172.17.0.2:5432 DB_5432_TCP=tcp://172.17.0.2:5432 DB_PORT_5432_TCP_PORT=5432 /etc/hosts 172.17.0.2 db
デモ(その4) Dockerを使用した 書籍管理アプリケーション実行環境構築
デモ環境 ホスト cnetos 6.6 /
64bit Kernel 2.6.32-504.el6.x86_64 docker version 1.4.1, build 5bc2ff8/1.4.1 基本編と 同じ環境
ホストサーバ Data Volume 完成イメージ APサーバ コンテナ Tomcat DBサーバ コンテナ postgresql データベース ファイル ログ ファイル ポート フォワード 8080:8080 コンテナ リンク DB接続 利用者 簡易版書籍管理 アプリケーション
Data Volume DBサーバ構築 postgreSQL 構築用 Dockerfile docker build PostgreSQL Dockerイメージ hoge/postgres:1.0 DB初期化用 コンテナ データベースファイル PostgreSQL 実行コンテナ DBファイル 初期化
DBサーバのDockerfile DBサーバ構築 FROM centos:latest MAINTAINER
hoge <hoge@mail.jp> # postgerSQL セットアップ RUN yum -y install postgresql-server # PORT 開放 EXPOSE 5432 # コンテナ実行コマンド CMD su - postgres -c "postgres -D /var/lib/pgsql/data"
DBサーバイメージ(hoge/postgres)ビルド Data
Volume を格納するディレクトリをホスト に作成 DBサーバ構築 $ sudo docker build -t hoge/postgres:1.0 [dockerfile格納DIR] $ sudo mkdir -p /docker_mnt/pgsql/data
DBサーバ構築 Postgresql初期セットアップ用コンテナ起動 Postgresqlの初期セットアップ $
sudo docker run -it --rm ¥ -v /docker_mnt/pgsql/data:/var/lib/pgsql/data ¥ hoge/postgres:1.0 /bin/bash [コンテナ内のbashで操作] # chown -R postgres:postgres /var/lib/pgsql/data # su - postgres $ initdb --encoding=UTF8 --no-locale $ pg_ctl -D /var/lib/pgsql/data start $ psql・・ 必要に応じてDBオブジェクトを構築し当該コンテナを終了 PostgreSQL初期セットアップは、Data Volumeに格納されるデータベースファイルを作成するものである。 このため、本作業は最初に一度だけ行えば良い。
DBサーバ構築 DBサーバコンテナ生成してPostgrrSQLを起動 $ sudo
docker run -d ¥ -v /docker_mnt/pgsql/data:/var/lib/pgsql/data ¥ -p 5432:5432 --name db01 hoge/postgres:1.0 実行コマンドの指定がない場合 Dockerfile の CMD で定義した コマンドが起動する
Data Volume APサーバ構築 Tomcat 構築用 Dockerfile docker build Tomcat Dockerイメージ hoge/tomcat:1.0 ログファイル Tomat 実行コンテナ
APサーバ構築 APサーバのDockerfile FROM centos:latest MAINTAINER
hoge # Tomcat セットアップ RUN yum -y install tomcat RUN echo 'export CATALINA_BASE="/usr/share/tomcat"' >> /root/.bashrc # Tomcat 起動スクリプトをコピー ADD tomcat_start.sh /usr/bin/ RUN chmod a+x /usr/bin/tomcat_start.sh # 書籍管理アプリをデプロイ ADD bookmgr.war /usr/share/tomcat/webapps/ # PORT 開放 EXPOSE 8080 # コンテナ実行コマンド ENTRYPOINT ["/usr/bin/tomcat_start.sh"]
APサーバ構築 (参考)tomcat_start.sh #! /bin/bash export CATALINA_BASE="/usr/share/tomcat" /usr/sbin/tomcat
start trap '/usr/sbin/tomcat stop; sleep 2; exit 0' TERM while : do sleep 1 done
APサーバ構築 APサーバイメージ(hoge/tomcat)ビルド Data
Volume を格納するディレクトリをホストに作成 $ sudo docker build -t hoge/tomcat:1.0 [dockerfile格納DIR] $ sudo mkdir -p /docker_mnt/tomcat/logs $ sudo chmod a+w /docker_mnt/tomcat/logs
APサーバ構築 APサーバコンテナを生成、Tomcat を起動 $
sudo docker run -d ¥ -v /docker_mnt/tomcat/logs:/usr/share/tomcat/logs ¥ -p 8080:8080 --link db01:db ¥ --name ap01 hoge/tomcat:1.0 Dockerfile の ENTRYPOINTで定義した 起動コマンドは docker run で別のコマン ドに変更することができない。
活用のススメ
Docker の利点 コンテナなのでオーバヘッドが少なく、動作が軽い
コンテナイメージを手軽にやり取りできる コンテナは様々な環境で等しく動く 各コンテナは、いろいろなディストリビューションや バージョンで構成できる コンテナ(インフラ)をコードで表現できる
利点を生かすためには コンテナ内で動くアプリケーションは、できる だけシンプルなものであること。 複数のコンテナで動く、アプリケーションはで きるだけ疎結合に連携すること。
各アプリケーションは、ステートレスな作りで あること。 ユーザデータなどの保存先は分離できること。
マイクロ・サービス ひとつのアプリケーションを、大きな一枚岩の塊ではなく、 複数の軽量なサービスを連携させたアーキテクチャで実現 する。 各サービスはそれぞれのプロセスで動き、サービス間の メッセージは、HTTP経由でAPI呼び出しされるか、 RabbitMQやZeroMQといった軽量メッセージングシステ ムによる通信で交換される。 サービスごとに言語やデータベースなどは統一されず、個 別に適切なものが選択される。また、サービスごとにデー タを持ち、統合されていない。
どんなシステムに使えるか すでにWeb関連サービス では主流になりつつある。 2014年5月の段階で『自社のサービスは全てDocker
のようなコンテナで動い ており、旧来の仮想マシンは使用していない』と発表。 近い将来、科学技術計算、情報通信、製造、流通など 様々な分野での活用が予想されるが、うまく活用するた めには、シンプルで小さなアプリケーションであること が重要。 複雑で大きなモジュールの塊から、疎結合で自律的な小 さなアプリケーション群を連携させるマイクロサービス へ転換できるかどうかが鍵!!
商用として利用できますか? Yes! 既にWeb系のサービスはコンテナの活用 が進んでいる。
しかし、他のオープンソース同様、何か問題が あった場合は、自分たちで解決する必要がある。 製品に詳しい技術者の育成が重要。
なにから始めるか
社内 Docker リポジトリ 結合試験環境1系 結合試験環境2系 Docker活用のススメ 開発環境 (開発PC) アプリケーション コンテナイメージ ステージング環境 アプリケーション コンテナイメージ アプリケーション コンテナイメージ アプリケーション コンテナイメージ アプリケーション コンテナイメージ
社内 git/svn リポジトリ 結合試験環境1系 Docker活用のススメ 開発環境 (開発PC) アプリケーション コンテナイメージ Dockerfile Dockerfile 結合試験環境N系 アプリケーション コンテナイメージ
自動テスト環境 社内 git/svn リポジトリ 結合試験環境1系 Docker活用のススメ 開発環境 (開発PC) アプリケーション コンテナイメージ アプリケーション コンテナイメージ Dockerfile Dockerfile CIサーバ Jenkins 社内 Docker リポジトリ アプリケーション コンテナイメージ 結合試験環境N系 アプリケーション コンテナイメージ
コンテナとは、 CPUやメモリ、プロセス空 間、ディスク、ネットワークなどを隠蔽す るOS(Linuxカーネル)が持つ機能を使っ て実現している。 コンテナを簡単に使えるようにしたツール のひとつにLXCがある。
Docker は、LXCを拡張してコンテナを更に 簡単に扱えるようにしたツール。 Docker Hubというリポジトリを経由すると、 インターネットを介して、コンテナをポー タブルにできる。 Dockerfile
という形式で、サーバインフラ をコード化することができる。
Docker をうまく活用するには、それなりの アーキテクチャを検討する必要がある。 つまり、疎結合で自律的な小さなアプリ ケーション群を連携させるマイクロサービ ス型アーキテクチャであることが重要。
Docker は、主要なベンダを巻き込みながら、 非常に影響力の大きなエコシステムを構築 しており、今後ますます発展することが見 込まれる。 まずは、開発業務や検証業務での活用をお 勧め。
ぜひ自分でも Docker を インストールしてさわっ て見て下さい!!
これを機会に、複数 の Docker使い が誕 生することを期待し ています
期待しています
おしまい ご静聴ありがとう ございました
Anúncio