- 投稿日:2019-11-01T23:33:09+09:00
vscodeをコマンドラインから起動する(linux, snapインストール)
はじめに
Visual Studio Codeをインストールしたがコマンドラインからの起動方法がわからず、ググッてもすぐに出てこなかったのでメモします。
環境
GalliumOS on Edgar(Acer Chromebook14 CB3-431)
snapにてvscodeをインストール(オフィシャルサイトの通り)
$ sudo apt install snapd
$ sudo snap install --classic code問題点
snapにてvscodeをインストールしたが、
$ codeにてvscodeが起動しない。
ググって得た情報でもダメ。インストール方法による保存場所の違いか。解決策
$ /snap/bin/codeを実行する。
パスが通っているところにシンボリックリンクをはる。
$ sudo ln -s /snap/bin/code /usr/local/bin/code
これによって$ codeでvscode が起動してくれます。他情報
- /snap/bin/code は/usr/bin/snap へのシンボリックリンクとなっている。
- 解決策がわかる前は、
$ codeを実行しても、No such file or directory というパスが通っていないエラーとなった。- snapでインストールしてもvscodeアイコンはGUIアイコンに現れず、アイコンから起動ということができない。
- 軽量とはいえGUIアプリのためか、画面の出現までは2,3秒かかります。一方neovimは1秒くらいかな。
- まずは起動したところまでです。
以上です。
- 投稿日:2019-11-01T18:38:44+09:00
touchでディレクトリごと作成(mkdir -p)する
やりたいこと
1行で、存在しない ディレクトリごとファイルを作成したい!
要するに、以下のことをtouchコマンドのみで以下のことをやりたいということです。❯ mkdir -p hoge/fugo/piyo ❯ touch hoge/fugo/piyo/test.txt ❯ tree . . └── hoge └── fugo └── piyo └── test.txt 3 directories, 1 fileシェルの設定ファイルにエイリアスとして登録して使えるまでがゴールです。
既存のtouchコマンド
touchで 存在しない ディレクトリごとファイルを作成しようとするとディレクトリがないよと怒られます。❯ touch hoge/fugo/piyo/test.txt touch: hoge/fugo/piyo/test.txt: No such file or directoryシェルスクリプトを作成する
名前は適当ですが、一気通貫に作成するシェルスクリプトを作成します。
touch_mkdir.sh#!/bin/sh mkdir -p "$(dirname "$1")" && touch "$1"当方はzshを使用しているので、zshrcにエイリアスを登録します。
今回はmkdir + touchということでmduchにしました。zshrcalias mduch='sh $HOME/dotfiles/lib/touch_mkdir.sh'使ってみる
作成できました。簡単ですね!
❯ mduch hoge/fugo/piyo/text.txt ❯ tree . . └── hoge └── fugo └── piyo └── text.txt 3 directories, 1 file
- 投稿日:2019-11-01T13:19:03+09:00
【AWS EC2】Amazon Linux 2にJenkinsをインストールする
概要
AWS EC2(AMI: Amazon Linux 2)にJenkinsをインストールして8081番ポートでアクセスできるようにする
環境
- AWS EC2
- OS: Amazon Linux 2
- AMI ID: amzn2-ami-hvm-2.0.20190823.1-x86_64-gp2
- セキュリティグループ: SSH 22 / TCP 8080 / TCP 8081 を開けておく
- Jenkins
- version: 2.202
構築手順
1. JDK 8 をインストール
- Amazon Linux 2にはデフォルトでJavaが入っていないのでインストールする
- Jenkins 2.164(2019-02)以降はJava 8 or Java 11が必要
$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64 $ sudo alternatives --config java $ java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)2. Jenkinsのyumリポジトリを追加
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo $ sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key接続先のbaseurlがhttpだとinstallでコケるのでhttpsに変更する
$ sudo vi /etc/yum.repos.d/jenkins.repo [jenkins] name=Jenkins baseurl=https://pkg.jenkins.io/redhat gpgcheck=13. Jenkinsをインストール
$ sudo yum install -y jenkins $ rpm -qa | grep jenkins jenkins-2.202-1.1.noarch4. Jenkinsを起動
$ sudo systemctl start jenkins Starting jenkins : [ OK ]5. Jenkinsの設定
初期設定
http://(public IP address):8080にアクセスして画面に従ってまず初期設定する$ sudo less /var/lib/jenkins/secrets/initialAdminPassword
- Unlock Jenkinsは初期パスワードを確認して入力する
- Customize JenkinsはとりあえずInstall suggested pulginsを選択
- Create First Admin Userで管理者ユーザーを登録
- Instance Configurationで
http://(public IP address):8081/jenkins/と入力- Save and Finishで設定完了
URLとportの設定を変更する
初期設定の4に書いたように
http://(public IP address):8081/jenkins/で動かしたいので、設定を変更してJenkinsを再起動する$ sudo vi /etc/sysconfig/jenkins JENKINS_PORT="8081" JENKINS_ARGS="--prefix=/jenkins" $ sudo systemctl restart jenkins
http://(public IP address):8081/jenkins/にアクセスして初期設定した管理者ユーザーでログインできれば完成感想
最初はQiitaの参考記事を見ながらやってたんだけど、installのときにサイトに接続できない的なエラーが出て進まなくて。
RedHatの公式ページ見たらURLが変わってたからhttpsで接続するようにしたらうまくいったのでメモ。参考
- 投稿日:2019-11-01T12:00:22+09:00
国内利用No.1の純国産WAF「SiteGuard Lite」を使ってみる
SiteGuard Liteとは
WEBサーバーで動作するホスト型のWAFです。Apache、IIS、Nginxに対応。
プラグインモジュールとして動作するのでSSL通信も特別意識することなく対応可能。
WEBサーバーの台数が数台程度であれば価格的にゲートウェイ型WAFよりも安価。設定はエクスポート/インポート機能を利用することで複数台への展開を安易に行えます。
※本記事ではLinux環境のApacheを使用インストール
SiteGuard LiteはApacheのプラグインモジュールとして動作しますので、先にApacheをインストールしておく必要があります。
またJDK、JREなどのjava環境も必要になります。
事前の手間は少々かかるかもしれませんが、インストール自体はrpmコマンドで簡単に入ります。
詳細はマニュアルを参照下さい。インストール後の設定(CUI)
対話型のセットアップスクリプトを起動し、質問に答えていくことで設定が完了します。
カスタマイズしたい設定があれば変更できますが、ほぼEnterキー連打(デフォルト値)で進めます。# cd /opt/jp-secure/siteguardlite/ # ./setup.sh ------------------------------------------------------ SiteGuard Lite setup start... ------------------------------------------------------ please enter Apache Config File. [/etc/httpd/conf/httpd.conf] --> Apache Config File=[/etc/httpd/conf/httpd.conf] is correct? [yes]|no --> please enter Apache Binary File (httpd). [/usr/sbin/httpd] --> Apache Binary File (httpd)=[/usr/sbin/httpd] is correct? [yes]|no --> do you want to use the web administrative console? * to use the console, you will need JDK or JRE is installed. please select. [yes]|no --> please enter JDK or JRE directory. [/usr/lib/jvm/jre-1.8.0] --> JDK or JRE directory=[/usr/lib/jvm/jre-1.8.0] is correct? [yes]|no --> please enter the port number of the web console for https. please enter port number. [9443] -->9443 port number=[19443] is correct? [yes]|no --> please enter the addresses allowed to access the web console for https. ex:192.168.1. 10.0.0.0/24 please enter allowed addresses. [ALL] --> allowed addresses=[ALL] is correct? [yes]|no --> please enter the ssl certificate file (crt file) path. please enter ssl certificate file path. [/opt/jp-secure/siteguardlite/conf/ssl/server.crt] --> ssl certificate file path=[/opt/jp-secure/siteguardlite/conf/ssl/server.crt] is correct? [yes]|no --> please enter the ssl server key file (key file) path. please enter ssl server key file path. [/opt/jp-secure/siteguardlite/conf/ssl/server.key] --> ssl server key file path=[/opt/jp-secure/siteguardlite/conf/ssl/server.key] is correct? [yes]|no --> update httpd.conf done. update Makefile done. ------------------------------------------------------ Starting services... ------------------------------------------------------ Starting Tomcat(WebUI for siteguardlite): [ OK ] Starting Notify Service: [ OK ] Apache restart. Are you sure? [yes]|no --> stopping apache ... starting apache ... apache restart done. ------------------------------------------------------ finished SiteGuard Lite setup ------------------------------------------------------ Please access following URL for starting service. https://hostname:9443/ (default user:admin, default password:admin)設定が完了すると、Apacheの設定ファイルの末尾にSiteGuardの設定ファイルへのパスが追記されます。Apacheの設定ファイルを入れ替える場合は注意して下さい。
# tail -n 2 /etc/httpd/conf/httpd.conf include /opt/jp-secure/siteguardlite/conf/siteguardlite.conf include /opt/jp-secure/siteguardlite/conf/httpd.conf.siteguardlite_admin_sslインストール後の設定(GUI)
管理画面へのログイン
WEBブラウザにて前手順で設定したポートへ接続します。
https://hostname:9443/
※管理画面へのログインになりますので、Firewallや前手順での送信元IPアドレス制限を推奨します。デフォルトでパスワード3回間違えるとロックアウトされてしまいます。解除にはコマンドの投入がが必要になります。デフォルトで管理ユーザーはadmin、パスワードもadmin
※初回ログイン後にパスワード変更画面が開きますので、パスワード変更を行います。
シグネチャ更新設定
ベンダーから提供されるシグネチャの更新タイミングを設定できます。
更新時にはApacheサービスの再起動が発生しますので、利用者の少ない時間帯を設定したほうがいいでしょう。但し時間指定ですと1日1回のタイミングでしか更新されません。とは言え過去のシグネチャの提供頻度をみると、1ヶ月に1回あるかどうかなので毎時ではなく1日1回の確認でいいかもしれません。
ウェブ攻撃検査
有効にすることでウェブアクセスへのセキュリティチェックが始まります。
デフォルトでは無効になっていますので、有効にしないとWAFを入れた意味がありません。
動作テスト
実際に攻撃を仕掛けてもいいのですがテストURLがあるので、そちらを利用します。
以下のように「WAF-TEST-SIGNATURE」をURLの後ろに入れてWEBブラウザからアクセスします。
http://hostname/WAF-TEST-SIGNATUREWEBブラウザにブロックメッセージが表示されることを確認します。
SiteGuard Liteのログを表示し該当アクセスがブロックされていることも確認します。
SiteGuard Liteのトップ画面でも各種チャートにて検出された攻撃を確認できます。
SiteGuard Liteのレポートからも出力されたPDFレポートから検出された攻撃を確認できます。
どんな攻撃を防げるか
基本はトラステッド・シグネチャといわれるベンダー提供のシグネチャを使い、WEBに特化したパターンマッチングを行います。ですのでトラステッド・シグネチャに定義されているものが防御対象となります。
トラステッド・シグネチャを見てみるとクロスサイトスクリプティング関連
※これが半数ほどありました
他にも以下の脆弱性に対応しています。
ディレクトリトラバーサル関連
改行コードインジェクション関連
Apache Struts/Apache Struts2脆弱性
WordPress関連
他2017年5月31日現在で444件のシグネチャ
まとめ
トラステッド・シグネチャを使って防御するという用途であれば比較的簡単に導入できました。
Webサーバ台数が少ない構成にWAFを導入するならホスト型のSiteGuard Liteは安価に導入できるのでオススメです。
- 投稿日:2019-11-01T11:45:15+09:00
ServerProtect for Linux ver.3.0 のインストール設定
依存ライブラリの確認とインストール
LinuxコンピュータにServerProtectをインストールする前に、次の依存ライブラ
リがインストールされていることを確認します。
- compat-libstdc++-296
- gtk2
- pango
- atk
確認例# rpm -q compat-libstdc++-296 compat-libstdc++-296-2.96-138 # rpm -q gtk2.i386 gtk2-2.10.4-30.el5 # rpm -q pango.i386 pango-1.14.9-8.el5.centos.3 # rpm -q atk.i386 atk-1.12.2-1.fc6依存ライブラリが不足している場合は不足分をインストールします。
インストール例# yum install compat-libstdc++-296 # yum install gtk2.i386 gtk2-2.10.4-30.el5 # yum install pango.i386 pango-1.14.9-8.el5.centos.3 # yum install atk.i386 atk-1.12.2-1.fc6ServerProtect インストール
インストール環境に合ったインストーラーをダウンロードし、インストールを開始します。
以下、CentOS 5.x の例ダウンロード
# wget http://files.trendmicro.com/jp/ucmodule/splx/30/singlepack/splx30_lin_singlepack.tar.gz展開
# tar zxvf splx30_lin_singlepack.tar.gzCentOS用のディレクトリへ移動
# cd CentOS_Suse11/Program/インストール実行
# ./SProtectLinux-3.0.bin対話インストールDo you agree to the above license terms? (yes or no) yes ← yesで進む Installing ServerProtect for Linux: Unpacking... Installing rpm file... 準備中... ########################################### [100%] 1:SProtectLinux ########################################### [100%] Do you wish to connect this SPLX server to Trend Micro Control Manager? (y/n) [y] n ← Trend Micro Control Manager が存在しない場合はnoで進む Activate ServerProtect to continue scanning and security updates. Activation is a two-step process that you can complete during or after installation. Step 1. Register Use the Registration Key that came with your product to register online (https://olr.trendmicro.com/redirect/product_register.aspx). (Please skip this step if the product is already registered.) Step 2. Activate Type the Activation Code received after registration to activate ServerProtect. (Press [Ctrl+D] to abort activation.) Activation Code: SP-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX ← アクティベーションコードを入力します Activation successful. World Virus Tracking Program Trend Micro consolidates virus-scanning results from worldwide customers, compiles real-time statistics, and displays them on the Virus Map (http://www.trendmicro.com/map). Use this map to view virus trends for each continent and selected countries. Yes, I would like to join the World Virus Tracking Program. I understand that when a virus is detected on my system, aggregated detection information, including virus names and number of detections, will be sent to the World Virus Tracking Program. It will not send out company names, individual names, machine names, site names, IP addresses, or any other identifying information. I understand that I can disable this automatic reporting function at any time by changing the configuration to "No" within the product's management console. No, I don't want to participate. Please input your choice [Yes] : No ← Virus Tracking Program に参加しない場合はnoで進む Starting services... Starting ServerProtect for Linux: Checking configuration file: [ OK ] Starting splxcore: Starting Entity: [ OK ] Loading splx kernel module: [Not available]] Error: Kernel Hook Module (KHM) for this Linux kernel version is not available. Check if the KHM for your Linux kernel version is released on the Trend Micro website at "http://www.trendmicro.com/en/products/ file-server/sp-linux/use/kernel.htm".Or,follow the instructions in the INSTALL file in "/opt/TrendMicro/SProtectLinux/SPLX.module/src/module" to build the KHM for your Linux kernel version. Starting vsapiapp: [ OK ] ServerProtect for Linux core started. [ OK ] Starting splxhttpd: Starting splxhttpd: [ OK ] ServerProtect for Linux httpd started. [ OK ] ServerProtect for Linux started. The virus notification program is not started. This program only starts in K Desktop Environment (KDE). Start this program using the Quick Access console in KDE. ServerProtect for Linux installation completed.KHM(カーネルフックモジュール)インストール
リアルタイムスキャンをする場合は本設定も必要です。
マニュアルスキャン、スケジュールスキャンのみであれば不要となります。Linux kernel 確認
# uname -r
2.6.18-398.el5カーネルに対応したKHMをダウンロード
http://www.trendmicro.co.jp/download/kernel.asp?productid=20SPLXモジュール用ディレクトリへコピー
# cp splx_kernel_module-3.0.1.0012.CentOS5_2.6.18-398.el5.x86_64.tar.gz /opt/TrendMicro/SProtectLinux/SPLX.module/
# cd /opt/TrendMicro/SProtectLinux/SPLX.module/展開
# tar xzvf splx_kernel_module-3.0.1.0012.CentOS5_2.6.18-398.el5.x86_64.tar.gz
splxmod-2.6.18-398.el5.x86_64.o
splxmod-2.6.18-398.el5.x86_64.o.md5MD5チェック
# md5sum splxmod-2.6.18-398.el5.x86_64.o
64618f72cf8adda415b29830dcfdd3a8 splxmod-2.6.18-398.el5.x86_64.o
# cat splxmod-2.6.18-398.el5.x86_64.o.md5
64618f72cf8adda415b29830dcfdd3a8 splxmod-2.6.18-398.el5.x86_64.oサービス再起動
# /etc/init.d/splx restartウイルス検知テスト
■ウイルス検知テスト
テストウイルスをダウンロード
# wget http://www.eicar.org/download/eicar.comウイルスを検知・削除してもダウンロード時にエラーは表示されませんが、ファイルは存在しません。
# lsWEBコンソールからの設定・確認
接続
管理端末から
http://<ホスト名>:14942/
または
https://<ホスト名>:14943/
へ接続します。
iptablesなどのファイアウォールが有効になっている場合はこれらのポートを許可する必要があります。
デフォルトパスワードは無しです。
※Patch7環境からデフォルトでhttpsサイトへリダイレクトされるようです。パスワード変更
必要に応じて以下の手順でパスワード変更を行います。
Administration -> Password から現在のパスワード、新パスワードを入力します。
※Bypass passwrod のチェックを付けるとパスワードを問われずログインできるようになります。
アップデートスケジュール設定
デフォルトで各パターンファイルとエンジンを2時間ごとにアップデートチェックするようスケジュールされています。必要に応じて調整を行います。
リアルタイム・スキャン設定
KHMがインストールされた環境ではデフォルトで有効になっています。
デフォルトで受信ファイルが対象、全てのディレクトリが対象、全てのファイルタイプが対象、最大ファイルサイズは30MBとなっています。必要に応じて設定を調整します。
スケジュール・スキャン設定
デフォルトで無効になっています。
必要に応じて設定を調整します。
マニュアル・スキャン設定
対象ディレクトリは/home、全てのファイルタイプが対象、最大ファイルサイズは60MBとなっています。必要に応じて設定を調整します。
除外設定
リアルタイム、スケジュール、マニュアル・スキャン毎に設定が可能です。
除外するディレクトリ、ファイル、拡張子を指定することが可能です。デフォルトでLinuxシステム関連のディレクトリが除外対象となっています。必要に応じて設定を調整します。
ログ確認
パッチ適用
トレンドマイクロのWEBサイトより最新パッチをダウンロードします。
http://downloadcenter.trendmicro.com/index.php?regs=jp&clk=latest&clkval=3388&lang_loc=13インストール方法は付属ドキュメントを参照下さい。
- 投稿日:2019-11-01T00:14:01+09:00
【図解】「Docker(コンテナ)でUbuntuを構築する」ってどういう意味?
独学でちょろちょろDocker(コンテナ)を勉強していましたが、不明点がたまる一方...。
そんな中、Dockerの研修に行ける機会があり、不明点を解消してきたので備忘録としてまとめます。いくつか解消できたのですが、すっきり度合い高めな2つだけピックアップ。
解消点
- 「DockerでUbuntuを構築する」ってどういう意味?
- 「Docker for Mac」の正体って何者?
Dockerとは
記事をさくっとまとめるためにDockerの詳しい解説は省きます。
すでに素晴らしい解説をしてくれている方が多数います。
自身が駄文で解説するよりも、遥かに参考になると思います。【図解】Dockerの全体像を理解する -前編-
Dockerを体系的に学び直してみた(概要編)
【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い「DockerでUbuntuを構築する」ってどういう意味?
仮想マシンとコンテナの違い
度々比較される仮想マシンとコンテナ。
当初の自分のイメージではこんな感じ。
この絵で言いたいことは、
仮想マシンは新たにOSも用意して仮想化しよう
コンテナでは各コンテナで1つのOS(ホストOS)を共有しよう
ということです。# docker run ubuntu
参加した研修ではCentOSにDockerを導入していました。
そして遭遇するこのコマンド。# docker run ubuntuコマンド自体は書いてある通りで、「DockerでUbuntuを構築してね」というものです。
しかし、独学で勉強した際にも、ここでつまりました。「コンテナってOSは入れないんじゃないの?」
「CentOSが入ってるのにUbuntuもいれるの?」では不明点を解消していきます。
OSの構成要素
まずはOS周りについてまとめます。
OSとはみんな知ってるWindowsとかのことですね。
OSは大まかに以下の構成となっています。
おそらくこの図で納得しない方も多いと思いますが、自分はこの図がわかりやすかったので、これでいきます。ここで色分けされているカーネルが今回大事になる部分です。
カーネルとはOSの中核です。Linuxディストリビューション
次にLinuxディストリビューションについてまとめます。
上記ででてきたCentOSやUbuntuが有名ですね。
これらは大まかに以下の構成となっています。
ここで大事なことは、
ディストリビューションが違っても、カーネルは同じLinuxカーネルということです。
差があるのはシェルとかその他の部分です。厳密にはディストリビューションにはカーネルは入らないのかな...?
ここではざっくり理解できればいいということで。上記知識を念頭に不明点を解消
いろいろと話が出てきましたが、まとめていきます。
自分が勘違いしていたのは以下の点です。
- コンテナはホストOSを共用している
- ディストリビューションが違えば、全く違うOS
まず1点目の「コンテナはホストOSを共用している」ですが、
これは「コンテナはホストOSのカーネルを共用している」が正しい表現です。次に2点目の「ディストリビューションが違えば、全く違うOS」ですが、
これは「ディストリビューションが違ってもカーネルは同じ」が正しい表現です。上記2点を元に「DockerでUbuntuを構築する」を絵で描いてみます。
絵心がないので、絵はこれが限界です。
要は、「ホストOSにはCentOSをいれて、コンテナではUbuntuのシェルやその他を用意して、ホストOSのカーネルを使ってUbuntuを動かす」ということです。自分の中ではこれでイメージができたのですが、
同じ悩みを抱えていた同志の方々いかがでしょうか...?「Docker for Mac」の正体って何者?
Docker for MacでもUbuntuを構築
MacでDockerを扱うソフトウェアとして、「Docker for Mac」があります。
では、これを用いてMacでDockerを扱えるようにしたとして、コンテナ上にUbuntuは構築できるのでしょうか。今までの話からすると、MacとLinuxのカーネルはそれぞれ違うのものなのでできなさそうです。
ただ、これはできます。Docker for Macは仮想マシンとほぼ同義
「なんでMac上のDockerでUbuntuが構成できるの?」
と質問を投げたところ、講師の方はこのような返答でした。「Docker for MacはLinuxOSを導入する仮想マシンと考えて!」
つまり絵にするとこんな感じ。
実は、Docker for MacはLinuxOSを導入するための仮想マシンの役割をしていました。
(もちろん他にもいろいろしています)
これであればコンテナから見たホストOSはLinuxOSとなり、Ubuntuも難なく構成できそうです。実際にDocker for Macを導入するとLinuxOSが動作しているのを確認できます。
DockerをMacにインストールする少し補足すると、
Dockerは元々ホストOSがLinuxであること前提に作られたものです。
それをMac上で動かすために、まずはLinuxを入れようね、という感じみたいです。おわりに
個人的な備忘録も兼ねてまとめてみましたが、
文章&絵に起こすとわかりづらいですね...。とりあえずプロトタイプとして残しておいて、わかりづらいところは加筆していきます。
- 投稿日:2019-11-01T00:14:01+09:00
「Docker(コンテナ)でUbuntuを構築する」ってどういう意味?
独学でちょろちょろDocker(コンテナ)を勉強していましたが、不明点がたまる一方...。
そんな中、Dockerの研修に行ける機会があり、不明点を解消してきたので備忘録としてまとめます。いくつか解消できたのですが、すっきり度合い高めな2つだけピックアップ。
解消点
- 「DockerでUbuntuを構築する」ってどういう意味?
- 「Docker for Mac」の正体って何者なの?
Dockerとは
記事をさくっとまとめるためにDockerの詳しい解説は省きます。
すでに素晴らしい解説をしてくれている方が多数います。
自身が駄文で解説するよりも、遥かに参考になると思います。【図解】Dockerの全体像を理解する -前編-
Dockerを体系的に学び直してみた(概要編)
【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い「DockerでUbuntuを構築する」ってどういう意味?
仮想マシンとコンテナの違い
度々比較される仮想マシンとコンテナ。
当初の自分のイメージではこんな感じ。
この絵で言いたいことは、
仮想マシンは新たにOSも用意して仮想化しよう
コンテナでは各コンテナで1つのOS(ホストOS)を共有しよう
ということです。$ docker run ubuntu
参加した研修ではCentOSにDockerを導入していました。
そして遭遇するこのコマンド。# docker run ubuntuコマンド自体は書いてある通りで、「DockerでUbuntuを構築してね」というものです。
しかし、独学で勉強した際にも、ここでつまりました。「コンテナってOSは入れないんじゃないの?」
「CentOSが入ってるのにUbuntuもいれるの?」では不明点を解消していきます。
OSの構成要素
まずはOS周りについてまとめます。
OSとはみんな知ってるWindowsとかのことですね。
OSは大まかに以下の構成となっています。
おそらくこの図で納得しない方も多いと思いますが、自分はこの図がわかりやすかったので、これでいきます。ここで色分けされているカーネルが今回大事になる部分です。
カーネルとはOSの中核です。Linuxディストリビューション
次にLinuxディストリビューションについてまとめます。
上記ででてきたCentOSやUbuntuが有名ですね。
これらは大まかに以下の構成となっています。
ここで大事なことは、
ディストリビューションが違っても、カーネルは同じLinuxカーネルということです。
差があるのはシェルとかその他の部分です。厳密にはディストリビューションにはカーネルは入らないのかな...?
ここではざっくり理解できればいいということで。上記知識を念頭に不明点を解消
いろいろと話が出てきましたが、まとめていきます。
自分が勘違いしていたのは以下の点です。
- コンテナはホストOSを共用している
- ディストリビューションが違えば、全く違うOS
まず1点目の「コンテナはホストOSを共用している」ですが、
これは「コンテナはホストOSのカーネルを共用している」が正しい表現です。次に2点目の「ディストリビューションが違えば、全く違うOS」ですが、
これは「ディストリビューションが違ってもカーネルは同じ」が正しい表現です。上記2点を元に「DockerでUbuntuを構築する」を絵で描いてみます。
絵心がないので、絵はこれが限界です。
要は、「ホストOSにはCentOSをいれて、コンテナではUbuntuのシェルやその他を用意して、ホストOSのカーネルを使ってUbuntuを動かす」ということです。自分の中ではこれでイメージができたのですが、
同じ悩みを抱えていた同志の方々いかがでしょうか...?「Docker for Mac」の正体って何者なの?
Docker for MacでもUbuntuを構築
MacでDockerを扱うソフトウェアとして、「Docker for Mac」があります。
では、これを用いてMacでDockerを扱えるようにしたとして、コンテナ上にUbuntuは構築できるのでしょうか。今までの話からすると、MacとLinuxのカーネルはそれぞれ違うのものなのでできなさそうです。
ただ、これはできます。Docker for Macは仮想マシンとほぼ同義
「なんでMac上のDockerでUbuntuが構成できるの?」
と質問を投げたところ、講師の方はこのような返答でした。「Docker for MacはLinuxOSを導入する仮想マシンと考えて!」
つまり絵にするとこんな感じ。
実は、Docker for MacはLinuxOSを導入するための仮想マシンの役割をしていました。
(もちろん他にもいろいろしています)
これであればコンテナから見たホストOSはLinuxOSとなり、Ubuntuも難なく構成できそうです。実際にDocker for Macを導入するとLinuxOSが動作しているのを確認できます。
DockerをMacにインストールする少し補足すると、Dockerは元々ホストOSがLinuxであること前提に作られたものです。
それをMac上で動かすために、まずはLinuxを入れようね、という感じみたいです。おわりに
個人的な備忘録も兼ねてまとめてみましたが、
文章&絵に起こすとわかりづらいですね...。とりあえずプロトタイプとして残しておいて、わかりづらいところは加筆していきます。






















