当講座の流れ起業家、スタートアップのデベロッパーのためのLinux講座
2
• 初⽇
• 起業家やデベロッパーにとってのLinuxの位置付け
• Linuxの学習
• Linuxをビジネスに活かすためのコンテナ技術の学習
• 2⽇⽬
• サンプルアプリケーションを作成してクラウドにデプロイ
当講座で得られるスキル以下のようなスキルが習得可能
3
• 初⽇(難易度 易)• オープンソースの技術がわかる• Linuxの基礎概要がわかる• Linuxの基本操作ができる• コンテナ技術の基礎概要がわかる• コンテナ技術の基本操作ができる
• 2⽇⽬(難易度 普通)
• Linux上にDockerを稼働させアプリケーションの作成ができる• Docker技術を利⽤してクラウドにデプロイができる
準備するもの以下のツールを事前にインストールすることを前提
4
• 前提環境
• Docker• Dockerの公式サイトからインストール( https://docs.docker.com/)
• Bluemix(クラウド環境)*2⽇⽬に使う可能性あり• アカウントの取得(https://bluemix.net)
• Bluemix CLIのインストール( https://clis.ng.bluemix.net/ui/home.html)
• Cloud Foundry CLIのインストール(https://github.com/cloudfoundry/cli/releases)
Linuxを学ぶ意味Linuxを学ぶことすなわち、世界を変えるエンジニアと同じプロトコルを理解すること
6
• Linuxはオープン・ソースを学ぶ⼀歩となる
• オープン・ソースが業界の歴史を塗り替えた事実を知ることになる
• 歴史から紐解きテクノロジーの流れをつかむことにつながる
Linuxはオープンソースであるソフトウェア業界でおきている⾰命
7
• オープンソースが世界を変える鍵• スピード• コスト削減• ⾰新
• クラウド上で動いているWebサービスはほとんどがオープンソース
オープンソースの歴史1998年に提唱されたマーケティング⽤語
8
• ソフトウェアのソースコードを無償で公開• 誰でも⾃由に閲覧・改良および再配布できる
1960 年代 1970 年代 1980 年代 1990 年代
1964年 SYSTEM/360
1971年 UNIX
1983年 MS-DOS
1984年 Macintosh
1995年 Windows95
1994年 4.4BSD-lite, BSD
1985年 FSF設⽴
1998年 オープンソース提唱
1991年 Linux0.1
プロプライエタリソフトウェア
オープンソースソフトウェア
あわせて読みたいものレイモンド⽒の当時のオープンソースの活動や論⽂
10
• ハッカーの復讐
• http://cruel.org/freeware/revenge_of/
• 伽藍(がらん)とバザール
• http://cruel.org/freeware/cathedral.html
• フリーソフトウェアの定義• 使⽤、学習、コピー、改変、再配布を⾃由に⾏えるソフトウェア• GNU General Public LicenseでライセンスをFSF(The Free Software Foundation)が管
理
• GNUプロジェクトの⽣みの親リチャード・ストールマンが提唱• GNU is not UNIXの略• UNIXと同等か代替となる環境を意味する
• GNUとUNIX⽂化• UNIXはAT&Tで開発されたOSでオープンソースの⾛りと⾔われる• 研究や教育⽤途として開放し⼈気を集めた
フリーソフトウェアという概念⾃由なハッカー⽂化からソフトウェアを奪い去ろうとする状況に反発した
11
Linuxの登場GNU OSのカーネル部分としてLinuxが誕⽣した
12
• LinuxはGNUのOS• そのカーネル部分がLinux• リーナス・トーバルズがMinixに刺激を受けて開発• 正式名はGNU/Linuxと⾔われる所以• カーネルはリソースへのアクセス管理および調整をする
オープンソースはソフトウェアからハードの時代へOpenPOWER FoundationによるCPUのオープンソース化
13
• GoogleはOpenPOWER(IBMがオープン化) プロセッサを使ったハードウェア開発へ
• Linux向けのCPUをオープン・ソース化• GoogleとIBMはIntelとの対案を⽬指す
ムーアの法則を突破するにはバザール⽅式ムーアの法則を超える数学的な関数は、組み合わせ爆発と呼ばれる
15
数え上げおねえさん
• スタートからゴールまで何通りの⾏き⽅を数える• 2×2で12通り / 3×3で184通り / 4×4で8512 / ・・・/10×10で・・・
• バザール⽅式はテクノロジーの進化についていくための⼿段• 今後のサービスをオープンソースで開発できるかが鍵になる
オープンソースでいこう先⼈の積み重ねた発⾒に基づいて何かを発⾒することが⼤切
16
「私がかなたを⾒渡せたのだとしたら、それはひとえに巨⼈の肩の上に乗っていたからです。」アイザック・ニュートンが万有引⼒を発⾒した時に、ある科学者に宛てた⼿紙の⼀説。
リーナス・トーバルズがMSの当時の上級副社⻑クレイグ・マンディに⾮難されたときの返し。
Linuxの学習の全体像起業家を⽬指す⽅向けのLinux
19
ホストOS
ホストマシン
アプリ アプリ
ホストOS(mac/Win)
ホストマシン
仮想マシン 仮想マシン
ゲストOS ゲストOS
アプリ アプリ アプリ アプリ
ホストOS(mac/Win)
ホストマシン
コンテナ
アプリ アプリ アプリ アプリ
コンテナ
• クイックにサービスをリリースすること、すなわちアプリ層が⼤事• スタートアップ向けにコンテナ技術と共にLinuxを学ぶ
Linux LinuxLinux
PaaS
IaaS
アプリ アプリ アプリ アプリ
コンテナ技術オープンソースで作られたコンテナ技術はDockerが有名
20
• 主な機能• コンピュータリソースの隔離および制限• 他のホスト、他のコンテナーとのネットワーク構成• ファイル/ディレクトリの世代と差分の管理• コマンドラインおよびREST APIで⼿軽かつ効率良くコンテナー管理ができる
• メリット• アプリケーションを少ないリソースで効率よく実⾏可能• Immutable Infrastructureの実装(アプリの実⾏環境の使い捨てし管理しやすくする)• Infrastructure as Codeの実践(構成がDockerfileというテキストファイルに記述可能)• 開発環境が簡単に⽤意でき、本番環境と共通化可能• アプリ実⾏環境を⾼速にデプロイ可能
Docker Hubからイメージを保存・再利⽤可能
21
imageimageimage
DockerHubクラウドホスト
imageimageimage
Dockerイメージ
App ServerDB Server
Web ServerコンテナDocker
サーバー
Dockerコマンド
DockerGUI
Dockerツール
Dockerクライアント
Dockerに慣れてみるDockerを⽴ち上げてみよう
23
$ docker run hello-world
1. DockerでHello-worldローカルのイメージライブラリにhello-worldがないのでpullしにいく
docker
Dockerコマンド
run
コンテナを作成し稼働させるサブコマンド
hello-world
ロードするイメージ
$ docker ps -a
2. コンテナの状態を⾒るdocker ps ‒a でコンテナの状態がみれる
STATSUのExitedは停⽌状態という意味
Docker Hubにも慣れてみるDocker Hubの使い⽅になれてみる
24
$ docker run docker/whalesay cowsay boo
3. Docker Hubでwhalesayを探してみるDocker Hubのイメージライブラリを検索してdocker/whalesayイメージを探す
$ docker images
5. イメージを確認docker images でローカルのイメージが確認可能
4. docker/whalesayを起動docker/whalesayイメージをrunコマンドで稼働させる
$ docker run docker/whalesay cowsay boo-boo
6. クジラともっと遊ぶbooと泣かせていたものを適当にいじって遊ぶ
Linuxをコンテナで準備するDockerを⽴ち上げてDocker HubからLinuxのイメージをpullする
26
$ docker -v
1. Dockerの起動状況の確認バージョンの確認を⾏う
$ docker search centos
2.コンテナイメージの検索CentOSのコンテナイメージの検索を⾏う
3.コンテナイメージのダウンロード今回はhttps://hub.docker.com/_/centos/にある公式のcentosのイメージを使⽤してセットアップする$ docker pull centos:centos7:centos7のようにタグを付けることも可能
LinuxにログインDockerを⽴ち上げてLinuxにログイン
27
$ docker run -it centos:centos7 /bin/bash
4. コンテナを起動-itを指定することでコンテナを起動してコンテナ内で続けて実⾏(ログイン)
[root@1367644d7130 /]#Rootでログインしているのがわかる。Centos7のコンテナ内のコンソール
root権限であることを⽰すユーザー名
ネットワーク上のホスト名
Linuxのディレクトリ構造
28
/ ルートディレクトリ| ----------------------------------------------------------------├ /bin ⼀般ユーザー向けの基本コマンド|├ /boot 起動に必要なファイル|├ /dev デバイスファイル|├ /etc 設定ファイル|├ /home ユーザーのホームディレクトリ|├ /lib 共有ライブラリ|├ /mnt ファイルシステムの⼀時的なマウントポイント⽤ディレクトリ|├ /media CD-ROMなどのリムーバブル媒体(media)のマウントポイント|├ /opt 実⾏時に書き換えられないアプリケーションソフトウェアパッケージ|├ /proc カーネルやプロセスに関する情報をテキストで表⽰する仮想ファイルシステム
├ /root root⽤ホームディレクトリ|├ /sbin システム管理⽤コマンド|├ /tmp ファイルなどを⼀時的に保管するディレクトリ|├ /srv システムに提供されたサイト固有のデータ|├ /usr プログラムやカーネルソース|├ /var システムログなどの動的に変化するファイル
Linuxのユーザー
root ユーザー名x シャドウパス0 ユーザーID0 グループIDroot コメント/root ホームディレクトリ
/bin/bash ログインシェル
29
1. /etc/passwd ファイルと⾒⽅ユーザー情報は/etc/passwdファイルで確認可能
中⾝の結果
[root@1367644d7130 /]# cat /etc/passwd
[root@1367644d7130 /]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin・・・・・・
⾒⽅
Linuxのユーザー
30
2. ユーザーのデフォルト値の確認useraddコマンドで作成可能。「-D」オプション指定でユーザーのどフォルト値を確認
結果
[root@1367644d7130 /]# useradd -D
[root@a06015944e27 /]# useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skel
[root@1367644d7130 /]# useradd hogehoge
Linuxのユーザー
31
3. ユーザーの追加useraddコマンドで作成[root@a06015944e27 /]# useradd hogehoge ←ユーザーhogehoge[root@a06015944e27 /]# id -a hogehoge ←ユーザーhogehoge IDの確認uid=500(hogehoge) gid=500(hogehoge) groups=500(hogehoge)[root@a06015944e27 /]# ls -ld /home/hogehoge ←homeディレクトリの確認drwx------ 2 hogehoge hogehoge 4096 Jan 23 19:27 /home/hogehoge
ファイルディレクトリの操作
32
1. ファイル・ディレクトリの詳細情報表⽰lsコマンドに「-l」⼩⽂字のLをつけると所有者、所有グループ、パーミッションが確認できる[root@1367644d7130 /]# ls -l
[root@1367644d7130 /]# ls –ldr-xr-xr-x 2 root root 4096 Nov 2 12:53 bindrwxr-xr-x 5 root root 360 Jan 23 18:32 devdrwxr-xr-x 42 root root 4096 Jan 23 19:27 etcdrwxr-xr-x 3 root root 4096 Jan 23 19:27 homedr-xr-xr-x 7 root root 4096 Nov 2 12:53 libdr-xr-xr-x 5 root root 4096 Nov 2 12:53 lib64・・・・
結果
ファイルディレクトリの操作
33
2. カレント・ディレクトリの移動階層構造になっているためディレクトリの移動は「cd」コマンドを利⽤する[root@1367644d7130 /]# cd / ← ルートディレクトリへ移動[root@1367644d7130 /]# cd home ← ホームディレクトリへ移動[root@1367644d7130 /]# cd .. ← 1つ上のディレクトリへ移動
3. 現在のディレクトリカレントディレクトリを確認する[root@1367644d7130 /]# cd home[root@1367644d7130 /]# pwd/home
ファイルディレクトリの操作
34
4. ディレクトリの作成homeディレクトリのhogehogeフォルダ配下にmkdirコマンドでディレクトリを作成[root@1367644d7130 /]# cd /home/hogehoge ← hogehogeホームへ移動[root@1367644d7130 /]# mkdir testdir ← ディレクトリを作成[root@1367644d7130 /]# ls -lrt ← カレントの詳細表⽰
結果drwxr-xr-x 2 root root 4096 Jan 23 22:22 testdir
テキストファイルの作成
35
1. viエディタでテキストファイルの編集が可能階層構造になっているためディレクトリの移動は「cd」コマンドを利⽤する[root@1367644d7130 /]# cd testdir ← testdirへ移動[root@1367644d7130 /]# vi test.txt ← ホームディレクトリへ移動
~~~~~~~~~~~"test.txt" [New File]
テキストファイルの作成
36
2. viエディタを操作コマンドモードと⼊⼒モードに切り替えて使⽤する• i (インサート) :カーソルの⼀から⼊⼒に⼊る• Esc :コマンドモード• :q! :保存せずに終了• :wq :保存して終了• x :1⽂字削除• dd :1⾏削除• yy :1⾏コピー• p :ペースト
[root@1367644d7130 /]# ls -lr ← カレントの詳細表⽰-rw-r--r-- 1 root root 33 Jan 23 22:41 test.txt
3. viエディタでファイルを編集して保存:wqで保存をしviを抜ける。ls ‒lr でファイルを確認しよう
ファイル・ディレクトリの複製・移動・削除
37
[root@1367644d7130 /]# cp test.txt ../ ← 1つ上のディレクトリにコピー[root@1367644d7130 /]# cp ../ ← 1つ上のディレクトリに移動[root@1367644d7130 /]# ls -lrt ← ディレクトリの詳細表⽰drwxr-xr-x 2 root root 4096 Jan 23 22:41 testdir-rw-r--r-- 1 root root 33 Jan 23 22:49 test.txt
1. ファイルのコピーcp ファイル名 コピー先 を指定するとコピーされる
[root@1367644d7130 /]# cp –r testdir testdir2 ← カレントディレクトリにコピー[root@1367644d7130 /]# ls –lrdrwxr-xr-x 2 root root 4096 Jan 23 22:54 testdir2drwxr-xr-x 2 root root 4096 Jan 23 22:41 testdir-rw-r--r-- 1 root root 33 Jan 23 22:49 test.txt
2. フォルダのコピーcp ‒r フォルダ名 フォルダ名 でコピーされる
ファイル・ディレクトリの複製・移動・削除
38
[root@1367644d7130 /]# cd testdir2 ← testdir2に移動[root@1367644d7130 /]# ls –lr-rw-r--r-- 1 root root 33 Jan 23 22:49 test.txt
3. フォルダの中⾝の確認cp ‒r フォルダ名 フォルダ名 でコピーされる
[root@a06015944e27 testdir2]# rm test.txtrm: remove regular file `test.txt‘? y ←yと答える[root@a06015944e27 testdir2]# ls lls: cannot access l: No such file or directory
4. ファイルの削除rm ファイル名 で削除される
ファイル・ディレクトリの複製・移動・削除
39
[root@1367644d7130 /]# cd ../[root@a06015944e27 hogehoge]# rm -r testdir2rm: remove directory `testdir2'? y[root@a06015944e27 hogehoge]# ls -l-rw-r--r-- 1 root root 33 Jan 23 22:49 test.txtdrwxr-xr-x 2 root root 4096 Jan 23 22:41 testdir
5. フォルダの削除rm ‒r フォルダ名 で再帰的に削除される
パーミッション
40
1. アクセス件と数値の関係権限は以下のように数値に置き換えることが可能
記号 数値• r → 4 :読み込み可能• w → 2 :書き込み可能• x → 1 :実⾏可能• - → 0 :権限なし
2. アクセス件を数値で表現権限は以下のように数値に置き換えることが可能
所有者 所有グループ その他• rwx r-x r--• 4+2+1=7 4+0+1=5 4+0+0
rwxr-xr--は「754」と表現できる
パーミッション
41
3. アクセス件の変更パーミッションはchmodで変更する[root@a06015944e27 hogehoge]# ls -l-rw-r--r-- 1 root root 33 Jan 23 22:49 test.txtdrwxr-xr-x 2 root root 4096 Jan 23 22:41 testdir[root@a06015944e27 hogehoge]# chmod 754 test.txt[root@a06015944e27 hogehoge]# ls -lrdrwxr-xr-x 2 root root 4096 Jan 23 22:41 testdir-rwxr-xr-- 1 root root 33 Jan 23 22:49 test.txt[root@a06015944e27 hogehoge]#
4. オーナーの変更オーナーはchownで変更する[root@a06015944e27 hogehoge]# chown hogehoge:hogehoge test.txt[root@a06015944e27 hogehoge]# ls –lrtdrwxr-xr-x 2 root root 4096 Jan 23 22:41 testdir-rwxr-xr-- 1 hogehoge hogehoge 33 Jan 23 22:49 test.txt