20191101のLinuxに関する記事は7件です。

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秒くらいかな。
  • まずは起動したところまでです。

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 にしました。

zshrc
alias mduch='sh $HOME/dotfiles/lib/touch_mkdir.sh'

使ってみる

作成できました。簡単ですね!

❯ mduch hoge/fugo/piyo/text.txt
❯ tree .
.
└── hoge
    └── fugo
        └── piyo
            └── text.txt

3 directories, 1 file
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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=1

3. Jenkinsをインストール

$ sudo yum install -y jenkins
$ rpm -qa | grep jenkins
jenkins-2.202-1.1.noarch

4. Jenkinsを起動

$ sudo systemctl start jenkins
Starting jenkins :                          [  OK  ]

5. Jenkinsの設定

初期設定

http://(public IP address):8080にアクセスして画面に従ってまず初期設定する

$ sudo less /var/lib/jenkins/secrets/initialAdminPassword
  1. Unlock Jenkinsは初期パスワードを確認して入力する
  2. Customize JenkinsはとりあえずInstall suggested pulginsを選択
  3. Create First Admin Userで管理者ユーザーを登録
  4. Instance Configurationでhttp://(public IP address):8081/jenkins/と入力
  5. 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で接続するようにしたらうまくいったのでメモ。

参考

RedHat Linux RPM packages for Jenkins
AWSにJenkins環境を構築する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

国内利用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
※初回ログイン後にパスワード変更画面が開きますので、パスワード変更を行います。
sgl01.png

シグネチャ更新設定

ベンダーから提供されるシグネチャの更新タイミングを設定できます。
更新時にはApacheサービスの再起動が発生しますので、利用者の少ない時間帯を設定したほうがいいでしょう。但し時間指定ですと1日1回のタイミングでしか更新されません。とは言え過去のシグネチャの提供頻度をみると、1ヶ月に1回あるかどうかなので毎時ではなく1日1回の確認でいいかもしれません。
sgl02.png

ウェブ攻撃検査

有効にすることでウェブアクセスへのセキュリティチェックが始まります。
デフォルトでは無効になっていますので、有効にしないとWAFを入れた意味がありません。
sgl03.png

動作テスト

実際に攻撃を仕掛けてもいいのですがテストURLがあるので、そちらを利用します。
以下のように「WAF-TEST-SIGNATURE」をURLの後ろに入れてWEBブラウザからアクセスします。
http://hostname/WAF-TEST-SIGNATURE

WEBブラウザにブロックメッセージが表示されることを確認します。
sgl04.png

SiteGuard Liteのログを表示し該当アクセスがブロックされていることも確認します。
sgl05.png

SiteGuard Liteのトップ画面でも各種チャートにて検出された攻撃を確認できます。
sgl06.png

SiteGuard Liteのレポートからも出力されたPDFレポートから検出された攻撃を確認できます。
sgl07.png

どんな攻撃を防げるか

基本はトラステッド・シグネチャといわれるベンダー提供のシグネチャを使い、WEBに特化したパターンマッチングを行います。ですのでトラステッド・シグネチャに定義されているものが防御対象となります。
トラステッド・シグネチャを見てみると

クロスサイトスクリプティング関連
※これが半数ほどありました
sgl08.png

SQLインジェクション関連
※2割程度占めています
sgl09.png

OSコマンドインジェクション関連
※1割程度占めています
sgl10.png

他にも以下の脆弱性に対応しています。

ディレクトリトラバーサル関連
改行コードインジェクション関連
Apache Struts/Apache Struts2脆弱性
WordPress関連

2017年5月31日現在で444件のシグネチャ

まとめ

トラステッド・シグネチャを使って防御するという用途であれば比較的簡単に導入できました。
Webサーバ台数が少ない構成にWAFを導入するならホスト型のSiteGuard Liteは安価に導入できるのでオススメです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.fc6

ServerProtect インストール

インストール環境に合ったインストーラーをダウンロードし、インストールを開始します。
以下、CentOS 5.x の例

ダウンロード
# wget http://files.trendmicro.com/jp/ucmodule/splx/30/singlepack/splx30_lin_singlepack.tar.gz

展開
# tar zxvf splx30_lin_singlepack.tar.gz

CentOS用のディレクトリへ移動
# 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=20

# wget http://files.trendmicro.com/products/kernel/splx_kernel_module-3.0.1.0012.CentOS5_2.6.18-398.el5.x86_64.tar.gz

SPLXモジュール用ディレクトリへコピー
# 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.md5

MD5チェック
# 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

ウイルスを検知・削除してもダウンロード時にエラーは表示されませんが、ファイルは存在しません。
# ls

WEBコンソールからの設定・確認

接続

管理端末から
http://<ホスト名>:14942/
または
https://<ホスト名>:14943/
へ接続します。
iptablesなどのファイアウォールが有効になっている場合はこれらのポートを許可する必要があります。
デフォルトパスワードは無しです。
※Patch7環境からデフォルトでhttpsサイトへリダイレクトされるようです。

パスワード変更

必要に応じて以下の手順でパスワード変更を行います。
Administration -> Password から現在のパスワード、新パスワードを入力します。
※Bypass passwrod のチェックを付けるとパスワードを問われずログインできるようになります。
sp01.png

アップデートスケジュール設定

デフォルトで各パターンファイルとエンジンを2時間ごとにアップデートチェックするようスケジュールされています。必要に応じて調整を行います。
sp02.png

リアルタイム・スキャン設定

KHMがインストールされた環境ではデフォルトで有効になっています。
デフォルトで受信ファイルが対象、全てのディレクトリが対象、全てのファイルタイプが対象、最大ファイルサイズは30MBとなっています。必要に応じて設定を調整します。
sp03.png

スケジュール・スキャン設定

デフォルトで無効になっています。
必要に応じて設定を調整します。
sp04.png

マニュアル・スキャン設定

対象ディレクトリは/home、全てのファイルタイプが対象、最大ファイルサイズは60MBとなっています。必要に応じて設定を調整します。
sp05.png

除外設定

リアルタイム、スケジュール、マニュアル・スキャン毎に設定が可能です。
除外するディレクトリ、ファイル、拡張子を指定することが可能です。デフォルトでLinuxシステム関連のディレクトリが除外対象となっています。必要に応じて設定を調整します。
sp06.png

ログ確認

表示させる日時を指定します。
sp07.png

検知されたウイルスが表示されます。
sp08.png

パッチ適用

トレンドマイクロのWEBサイトより最新パッチをダウンロードします。
http://downloadcenter.trendmicro.com/index.php?regs=jp&clk=latest&clkval=3388&lang_loc=13

インストール方法は付属ドキュメントを参照下さい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【図解】「Docker(コンテナ)でUbuntuを構築する」ってどういう意味?

独学でちょろちょろDocker(コンテナ)を勉強していましたが、不明点がたまる一方...。
そんな中、Dockerの研修に行ける機会があり、不明点を解消してきたので備忘録としてまとめます。

いくつか解消できたのですが、すっきり度合い高めな2つだけピックアップ。

解消点

  • 「DockerでUbuntuを構築する」ってどういう意味?
  • 「Docker for Mac」の正体って何者?

Dockerとは

記事をさくっとまとめるためにDockerの詳しい解説は省きます。
すでに素晴らしい解説をしてくれている方が多数います。
自身が駄文で解説するよりも、遥かに参考になると思います。

【図解】Dockerの全体像を理解する -前編-
Dockerを体系的に学び直してみた(概要編)
【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い

「DockerでUbuntuを構築する」ってどういう意味?

 仮想マシンとコンテナの違い

度々比較される仮想マシンとコンテナ。
当初の自分のイメージではこんな感じ。
vm_container.png
この絵で言いたいことは、
仮想マシンは新たにOSも用意して仮想化しよう
コンテナでは各コンテナで1つのOS(ホストOS)を共有しよう
ということです。

# docker run ubuntu

参加した研修ではCentOSにDockerを導入していました。
そして遭遇するこのコマンド。

#  docker run ubuntu

コマンド自体は書いてある通りで、「DockerでUbuntuを構築してね」というものです。
しかし、独学で勉強した際にも、ここでつまりました。

「コンテナってOSは入れないんじゃないの?」
CentOSが入ってるのにUbuntuもいれるの?」

では不明点を解消していきます。

OSの構成要素

まずはOS周りについてまとめます。
OSとはみんな知ってるWindowsとかのことですね。
OSは大まかに以下の構成となっています。
os.png
おそらくこの図で納得しない方も多いと思いますが、自分はこの図がわかりやすかったので、これでいきます。

ここで色分けされているカーネルが今回大事になる部分です。
カーネルとはOSの中核です。

Linuxディストリビューション

次にLinuxディストリビューションについてまとめます。
上記ででてきたCentOSやUbuntuが有名ですね。
これらは大まかに以下の構成となっています。
linux.png
ここで大事なことは、
ディストリビューションが違っても、カーネルは同じLinuxカーネルということです。
差があるのはシェルとかその他の部分です。

厳密にはディストリビューションにはカーネルは入らないのかな...?
ここではざっくり理解できればいいということで。

上記知識を念頭に不明点を解消

いろいろと話が出てきましたが、まとめていきます。
自分が勘違いしていたのは以下の点です。

  • コンテナはホストOSを共用している
  • ディストリビューションが違えば、全く違うOS

まず1点目の「コンテナはホストOSを共用している」ですが、
これは「コンテナはホストOSのカーネルを共用している」が正しい表現です。

次に2点目の「ディストリビューションが違えば、全く違うOS」ですが、
これは「ディストリビューションが違ってもカーネルは同じ」が正しい表現です。

上記2点を元に「DockerでUbuntuを構築する」を絵で描いてみます。

container_kernel.PNG

絵心がないので、絵はこれが限界です。
要は、「ホスト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を導入する仮想マシンと考えて!」

つまり絵にするとこんな感じ。

docker4mac.png

実は、Docker for MacはLinuxOSを導入するための仮想マシンの役割をしていました。
(もちろん他にもいろいろしています)
これであればコンテナから見たホストOSはLinuxOSとなり、Ubuntuも難なく構成できそうです。

実際にDocker for Macを導入するとLinuxOSが動作しているのを確認できます。
DockerをMacにインストールする

少し補足すると、
Dockerは元々ホストOSがLinuxであること前提に作られたものです。
それをMac上で動かすために、まずはLinuxを入れようね、という感じみたいです。

 おわりに

個人的な備忘録も兼ねてまとめてみましたが、
文章&絵に起こすとわかりづらいですね...。

とりあえずプロトタイプとして残しておいて、わかりづらいところは加筆していきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「Docker(コンテナ)でUbuntuを構築する」ってどういう意味?

独学でちょろちょろDocker(コンテナ)を勉強していましたが、不明点がたまる一方...。
そんな中、Dockerの研修に行ける機会があり、不明点を解消してきたので備忘録としてまとめます。

いくつか解消できたのですが、すっきり度合い高めな2つだけピックアップ。

解消点

  • 「DockerでUbuntuを構築する」ってどういう意味?
  • 「Docker for Mac」の正体って何者なの?

Dockerとは

記事をさくっとまとめるためにDockerの詳しい解説は省きます。
すでに素晴らしい解説をしてくれている方が多数います。
自身が駄文で解説するよりも、遥かに参考になると思います。

【図解】Dockerの全体像を理解する -前編-
Dockerを体系的に学び直してみた(概要編)
【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い

「DockerでUbuntuを構築する」ってどういう意味?

 仮想マシンとコンテナの違い

度々比較される仮想マシンとコンテナ。
当初の自分のイメージではこんな感じ。
vm_container.png
この絵で言いたいことは、
仮想マシンは新たにOSも用意して仮想化しよう
コンテナでは各コンテナで1つのOS(ホストOS)を共有しよう
ということです。

$ docker run ubuntu

参加した研修ではCentOSにDockerを導入していました。
そして遭遇するこのコマンド。

#  docker run ubuntu

コマンド自体は書いてある通りで、「DockerでUbuntuを構築してね」というものです。
しかし、独学で勉強した際にも、ここでつまりました。

「コンテナってOSは入れないんじゃないの?」
CentOSが入ってるのにUbuntuもいれるの?」

では不明点を解消していきます。

OSの構成要素

まずはOS周りについてまとめます。
OSとはみんな知ってるWindowsとかのことですね。
OSは大まかに以下の構成となっています。
os.png
おそらくこの図で納得しない方も多いと思いますが、自分はこの図がわかりやすかったので、これでいきます。

ここで色分けされているカーネルが今回大事になる部分です。
カーネルとはOSの中核です。

Linuxディストリビューション

次にLinuxディストリビューションについてまとめます。
上記ででてきたCentOSやUbuntuが有名ですね。
これらは大まかに以下の構成となっています。
linux.png
ここで大事なことは、
ディストリビューションが違っても、カーネルは同じLinuxカーネルということです。
差があるのはシェルとかその他の部分です。

厳密にはディストリビューションにはカーネルは入らないのかな...?
ここではざっくり理解できればいいということで。

上記知識を念頭に不明点を解消

いろいろと話が出てきましたが、まとめていきます。
自分が勘違いしていたのは以下の点です。

  • コンテナはホストOSを共用している
  • ディストリビューションが違えば、全く違うOS

まず1点目の「コンテナはホストOSを共用している」ですが、
これは「コンテナはホストOSのカーネルを共用している」が正しい表現です。

次に2点目の「ディストリビューションが違えば、全く違うOS」ですが、
これは「ディストリビューションが違ってもカーネルは同じ」が正しい表現です。

上記2点を元に「DockerでUbuntuを構築する」を絵で描いてみます。

container_kernel.PNG

絵心がないので、絵はこれが限界です。
要は、「ホスト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を導入する仮想マシンと考えて!」

つまり絵にするとこんな感じ。

docker4mac.png

実は、Docker for MacはLinuxOSを導入するための仮想マシンの役割をしていました。
(もちろん他にもいろいろしています)
これであればコンテナから見たホストOSはLinuxOSとなり、Ubuntuも難なく構成できそうです。

実際にDocker for Macを導入するとLinuxOSが動作しているのを確認できます。
DockerをMacにインストールする

少し補足すると、Dockerは元々ホストOSがLinuxであること前提に作られたものです。
それをMac上で動かすために、まずはLinuxを入れようね、という感じみたいです。

 おわりに

個人的な備忘録も兼ねてまとめてみましたが、
文章&絵に起こすとわかりづらいですね...。

とりあえずプロトタイプとして残しておいて、わかりづらいところは加筆していきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む