tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】plenvで"Segmentation fault: 11"とエラーが出る対処メモ

はじめに

久しぶりにperlを触りたい機会があったので、
以下を元にplenvをinstallしていました。

途中でSegmentation fault: 11というエラーが出たのでメモ

エラー

# versionは出る
$ plenv --version
plenv 2.2.0

# install -lはエラー
$ plenv install -l
Segmentation fault: 11

どうするか

perl buildbrew install perl-buildでinstallしていましたが、
tokuhiromさんところから持ってきて入れると良さそうです。

# install -lがエラー
$ plenv install -l
Segmentation fault: 11

# pluginsディレクトリがないことを確認
$ ls -al ~/.plenv/
total 0
drwxr-xr-x   4 tweeeety  tweeeety   128  5  5 00:10 .
drwxr-xr-x+ 52 tweeeety  tweeeety  1664  5  5 00:04 ..
drwxr-xr-x   2 tweeeety  tweeeety    64  5  4 22:28 shims
drwxr-xr-x   2 tweeeety  tweeeety    64  5  4 22:28 versions

# download
$ git clone git://github.com/tokuhirom/Perl-Build.git $(plenv root)/plugins/perl-build/

# pluginsにはいる
$ ls -al ~/.plenv/
total 0
drwxr-xr-x   4 tweeeety  tweeeety   128  5  5 00:10 .
drwxr-xr-x+ 52 tweeeety  tweeeety  1664  5  5 00:04 ..
drwxr-xr-x   3 tweeeety  tweeeety    96  5  5 00:12 plugins
drwxr-xr-x   2 tweeeety  tweeeety    64  5  4 22:28 shims
drwxr-xr-x   2 tweeeety  tweeeety    64  5  4 22:28 versions

# install -lが正常にうごく
$ plenv install -l
Available versions:
 5.29.10
 5.29.9
 ~ 省略 ~
 5.6.0
 5.5.670
 5.003_13

おわり

ひさしぶりのperl\(^o^)/

【シェルスクリプト】複数行のコメントアウト

はじめに

単一行のコメントは#ですが、
複数行のはよく忘れるのでメモ

どうやるか

  • << [任意の文字]でコメントアウト開始
  • [任意の文字]でコメントアウト終了

どんな感じか

#!/bin/bash

echo "hoge"

# がコメントされる
<< COMMENTOUT
echo "fuga"
echo "piyo"
COMMENTOUT

おわり

ちゃちゃっとやるばあいは
vimのコマンドで複数行の冒頭に#とやっていた\(^o^)/

【python】macにpyenvを入れて2.7を3.xに切り替えて使うメモ

はじめに

最近はManager業に専念しているため
だいぶ技術ブログの更新を怠っていました ><

と、いいながら
ふとしたことからpythonを使いたく
macにデフォルトで入っているのはPython 2.7.10

使いたかったのが3.x系だったので切り替えて使えるようにpyenvをいれたメモです。

アジェンダ

  1. XcodeやHomebrewをインストール
  2. pyenvとは?
  3. pyenvをインストール
  4. pyenvでpython3.xをインストール

1. XcodeやHomebrewをインストール

念の為に書きましたが、ここは割愛します!!
macで開発するには何にしても必要ですしね。

Homebrewとは?的な記事は置いておきます。

2. pyenvとは?

pyenvとは?ですが、参考サイトから引用させて頂きます。
rbenvやplenvもあるのでそのあたりを使ったことがあるなら名前からはわかりそうですが..

pythonのバージョンを簡単に切り替えることができるようにしてくれるツールです。2系列と3系列との切り替えに便利です。また、ディレクトリごとにpythonのバージョンを切り替えることができます。

3. pyenvをインストール

ここからが本題ですね。
まずはデフォルトのversionを確認します。

$  python --version
Python 2.7.10

おもむろにpyenvをいれます。
versionが確認できればokです。

$ brew install pyenv

$ pyenv -v
pyenv 1.2.11

次にパスを通しておきます。

# ~/.bash_profileに追記
$ vim ~/.bash_profile
-- vi追記 --
export PATH="$HOME/.pyenv/shims:$PATH"
------------

# 反映
$ source ~/.bash_profile

4. pyenvでpython3.xをインストール

インストール可能のvesionを確認してみます。
めっちゃある...

$ pyenv install -l
Available versions:
  2.1.3
  2.2.3

  ~ 省略 ~

  stackless-3.4.7
  stackless-3.5.4

pyenvを使ってpython3.7.2をインストールします

# 現在installされたversionを確認
# まだsystem pythonしかはいってない
$ pyenv versions
* system (set by /Users/tweeeety/.pyenv/version)

# 3.7.2をインストールj
$ pyenv install 3.7.2

# インストールされたことを確認
# *がついてるものが今利用しているversion
$ pyenv versions
* system (set by /Users/tweeeety/.pyenv/version)
  3.7.2

# version確認
$ python --version
Python 2.7.10

# 切り替え
$ python global 3.7.2

# 確認
$ pyenv versions
  system
* 3.7.2 (set by /Users/tweeeety/.pyenv/version)

$ python --version
Python 3.7.2

なんとなくpyenvのhelpをみてみる

$  pyenv --help
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

おわり

簡単に切り替え完了ーーー\(^o^)/

【vim】markdownを書く環境を整えてpreviewするまで

はじめに

新しいmacになったのでvimの設定なんかをやり直してます。

markdownはatomで書いていたのですが、
これを期にmarkdownもvimに移行しようと思ったのでその際の自分用メモ

アジェンダ

  1. pluginを入れる
  2. plasticboy/vim-markdownの設定する
  3. kannokanno/previmの設定する
  4. tyru/open-browser.vimの設定する
  5. .vimrcの記述

1. pluginを入れる

3つのpluginを入れます

Plugin 'plasticboy/vim-markdown'
Plugin 'kannokanno/previm'
Plugin 'tyru/open-browser.vim'

以下、簡単な説明です

  • plasticboy/vim-markdown
    • シンタックスハイライトします
    • headに応じて折りたたみもできます
  • kannokanno/previm
    • 保存したMarkdownをブラウザでプレビュー可能にします
  • tyru/open-browser.vim
    • カーソル下のurlや文字列を開いたり検索したりします

2. plasticboy/vim-markdownの設定する

let g:vim_markdown_folding_disabled = 1
let g:vim_markdown_auto_insert_bullets = 0
let g:vim_markdown_new_list_item_indent = 0

let g:vim_markdown_folding_disabled = 1

markdownなファイルを開いたときに
デフォルトで折りたたみになってしまうのでoffにします。

vim_markdown_auto_insert_bulletsは以下を参照ください。

3. kannokanno/previmの設定する

autocmd BufRead,BufNewFile *.md set filetype=markdown
let g:previm_open_cmd = 'open -a Google\ Chrome'
" ctrl pでプレビュー
nnoremap <silent> <C-p> :PrevimOpen<CR>

autocmd BufRead,BufNewFile *.md set filetype=markdown

ちゃんと調べてませんが、
このままだと.mkdのファイルに対してのハイライトらしいので
.mdもfiletype=markdownとなるようにします。

nnoremap <silent> <C-p> :PrevimOpen<CR>

基本は:PrevimOpenでプレビューが開きます。
ctrl + pというショートカットで開くようにします。

4. tyru/open-browser.vimの設定する

let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

URLや文字列の上でgxと打つことで、
URLならブラウザでURLが展開され、
文字列なら検索結果が表示されます。

以下、参考サイトです。

5. .vimrcの記述

以下、.vimrcの記述です。

"
" about markdown
"
Plugin 'plasticboy/vim-markdown'
Plugin 'kannokanno/previm'
Plugin 'tyru/open-browser.vim'

" plasticboy/vim-markdown
" 折りたたみの禁止
let g:vim_markdown_folding_disabled = 1
let g:vim_markdown_auto_insert_bullets = 0
let g:vim_markdown_new_list_item_indent = 0

" kannokanno/previm
autocmd BufRead,BufNewFile *.md set filetype=markdown
let g:previm_open_cmd = 'open -a Google\ Chrome'
" ctrl pでプレビュー
nnoremap <silent> <C-p> :PrevimOpen<CR>

" tyru/open-browser.vim
let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

おわり

昔に設定したものも、再度vimの設定しなおすとほとんど覚えてないという\(^o^)/

Bashで大文字/小文字を無視して補完 - .inputrcとreadline

はじめに

macを新しくしたので.bashrcやら.vimrcも断舎離しつつ新しくしています。

terminalを開いてコマンドラインで入力する時、
tabで補完してくれるわけですが
デフォルトでは大文字小文字を正確に打たないと補完してくれません。

$ ls -1

Fuga.txt
Hoge.txt
piyo.txt

# この状態でtabを打っても補完されない
$ cat ho

この補完に大文字/小文字を無視して補完してくれる設定です

アジェンダ

  1. 設定
  2. .inputrcって?
  3. readlineって?

1. 設定

設定は簡単で、${HOME}/.inputrcというファイルに以下の設定を書いて読み込むだけです。
ちなみになければ作成してください

# 設定
$ vim ~/.inputrc
-- vim追記 --
$if Bash
set completion-ignore-case on
$endif
------------

# 読み込み
$ source ~/.inputrc

2. .inputrcって?

ところで.bashrcはよく見かけますが.inputrcはなんでしょうか?

これはreadlineが読み込む設定ファイルです。

3. readlineって?

では、readlineってなんでしょうか?

参考サイトからの引用になりますがライブラリです。

readlineは、CUI アプリケーションにおいてユーザが行を入力する際に便利な
「行頭・行末移動」「ヒストリ機能」などを提供するライブラリである。
readline というコマンドがあるわけではない。
 
参考: コマンド readline 行入力支援ライブラリ

こちらも参考サイトからの引用ですが、
readlineが提供する機能は以下でして補完・または候補一覧を表示 (TAB)もこれに含まれます。

  • 1文字戻る (Ctrl-b)
  • 1文字進む (Ctrl-f)
  • 行頭に移動 (Ctrl-a)
  • 行末に移動 (Ctrl-e)
  • カーソル位置から行末までを削除 (Ctrl-k)
  • 1行上 (直前に入力した内容) に移動 (Ctrl-p)
  • 1行下に移動 (Ctrl-n)
  • 逆方向インクリメンタルサーチ (Ctrl-r)
  • 補完・または候補一覧を表示 (TAB)
  • エスケープシーケンスを入力 (Ctrl-q・Ctrl-v)  
    参考: コマンド readline 行入力支援ライブラリ

参考

おわり

vimの設定からでも調べると知らない事が増えるのは良いですよね\(^o^)/

【Docker】任意で作成したdriver=bridgeネットワークを設定してdocker runしてみるメモ

はじめに

ちょこちょこDockerを触っているのですがネットワーク設定まわりについての自分用メモ
以下の書籍を参考にしています。

アジェンダ

  1. やりたいこと
  2. Dockerコンテナのネットワークのプチ基礎
  3. ネットワークを作成する
  4. 複数のContainer同士で繋いでみる
  5. ネットワークを削除する

1. やりたいこと

やりたい事は以下です

  • dockerのネットワークを作成する
  • 複数のcontainerを作成した同一ネットワークに接続
  • container同士でアクセスする

2. Dockerコンテナのネットワークのプチ基礎

Dockerはデフォルトでbridge/host/noneの3つのネットワークを作成します

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b917ccb08e42        bridge              bridge              local
45c4f50ef8dd        host                host                local
e1785a610499        none                null                local

明示的にネットワークを指定せずにDockerコンテナを起動すると、
デフォルトのbridgeネットワークにDockerコンテナを起動します。

# 適当に立ち上げてみる
$ docker container run -itd --name=sample ubuntu:latest

# .NetworkSettings.Networks}}を確認するとbridgeになっている
$ docker container inspect sample --format="{{json .NetworkSettings.Networks}}"
{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"b917ccb08e42a549dd85213c3e705a3ab03295656d760340ab04781ffe8f98da","EndpointID":"9fd096a5ff16be1542c1154baeebce92bc3b5abf6723f9d05ecbc5c36a6ff7c9","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02","DriverOpts":null}}
プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化
WINGSプロジェクト 阿佐 志保
翔泳社
売り上げランキング: 4,789

3. ネットワークを作成する

ネットワークの作成は以下のコマンドで行います

docker network create [オプション] ネットワーク

オプションは以下が指定可能です。

オプション 説明
--driver, d ネットワークブリッジまたはオーバーレイ(デフォルトはbridge)
--ip-range コンテナに割り当てるIPアドレスのレンジを指定
--subnet サブネットをCIDR形式で指定
--ipv6 IPv6ネットワークを有効にするかどうか(true/false)
-label ネットワークに設定するラベル

今回は--driver=bridgeweb-networkというネットワークを作成してみます。

$ docker network create --driver=bridge web-network
fe7f79487aa87cf03e03c857fc0013d3b85656fad9fb4417f9abfb2402f17c60

# 作成したネットワークを確認
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b917ccb08e42        bridge              bridge              local
45c4f50ef8dd        host                host                local
e1785a610499        none                null                local
fe7f79487aa8        web-network         bridge              local

$ docker network ls --filter driver=bridge
NETWORK ID          NAME                DRIVER              SCOPE
b917ccb08e42        bridge              bridge              local
fe7f79487aa8        web-network         bridge              local

4. 複数のContainer同士で繋いでみる

ネットワークへの接続

ネットワークへの接続は
docker networkで接続する方法と、
docker run時に接続する方法があります。

docker networkでcontainerをネットワークに接続するには以下のコマンドを使います

docker network connect [オプション] ネットワーク名 コンテナ名

docker runで接続するには以下のコマンドを使います

docker container run オプション --name=コンテナ名 --net=ネットワーク名 コンテナイメージ

今回はdocker runのほうで試します。

1つめのcontainer

バックグラウンドでwebappという名前のcontainerを
ネットワークweb-networkにつないで立ち上げます。

また、ポートはホストOS:8001からcontainerの80につなげます。

$ docker container run -itd -p 8001:80 --name=webapp --net=web-network nginx
8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7
ブラウザでアクセスしてみる

ブラウザで確認すると当然こんな感じ

f:id:tweeeety:20180625215059p:plain

2つめのcontainer

webfrontという名前のcontainerを
ネットワークweb-networkにつないで立ち上げてbashで起動。

また、container1 -> container2から繋いでみる際は、curlでポート80で繋ぎます。

$ docker container run -it --name=webfront --net=web-network centos /bin/bash

# 1つめのcontainerにcurlしてみる
# nginxの結果が帰ってくる
[root@c1170773ec3c /]# curl webapp:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

うまくいきました!

inspectで確認

containerをinspectで確認してみると、
.NetworkSettings.Networksにてweb-networkに繋がっている事が確認できます。

$ docker container inspect webfront webapp
[
    {
        "Id": "e312f6dfd7659b82474dca68f5f991ce3135cd5ab840bb53d998149e79b0dcb2",
        "Created": "2018-06-23T22:36:49.8513111Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 8326,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-06-23T22:41:17.7127242Z",
            "FinishedAt": "2018-06-23T22:38:05.4488807Z"
        },
        "Image": "sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5",
        "ResolvConfPath": "/var/lib/docker/containers/e312f6dfd7659b82474dca68f5f991ce3135cd5ab840bb53d998149e79b0dcb2/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/e312f6dfd7659b82474dca68f5f991ce3135cd5ab840bb53d998149e79b0dcb2/hostname",
        "HostsPath": "/var/lib/docker/containers/e312f6dfd7659b82474dca68f5f991ce3135cd5ab840bb53d998149e79b0dcb2/hosts",
        "LogPath": "/var/lib/docker/containers/e312f6dfd7659b82474dca68f5f991ce3135cd5ab840bb53d998149e79b0dcb2/e312f6dfd7659b82474dca68f5f991ce3135cd5ab840bb53d998149e79b0dcb2-json.log",
        "Name": "/webfront",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "web-network",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/df845a28b18ea7627b098493ad76fadf0be29ba2c0ddd6788cf513f878fc0116-init/diff:/var/lib/docker/overlay2/1809e038beecc1e66692da14e5b8028149a73b1566a6f04597889ae8c6d916f4/diff",
                "MergedDir": "/var/lib/docker/overlay2/df845a28b18ea7627b098493ad76fadf0be29ba2c0ddd6788cf513f878fc0116/merged",
                "UpperDir": "/var/lib/docker/overlay2/df845a28b18ea7627b098493ad76fadf0be29ba2c0ddd6788cf513f878fc0116/diff",
                "WorkDir": "/var/lib/docker/overlay2/df845a28b18ea7627b098493ad76fadf0be29ba2c0ddd6788cf513f878fc0116/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "e312f6dfd765",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "centos@sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.schema-version": "= 1.0     org.label-schema.name=CentOS Base Image     org.label-schema.vendor=CentOS     org.label-schema.license=GPLv2     org.label-schema.build-date=20180531"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "372311e1ac5caebcc8f4a45c12a2f19437093f6421254c82bcae38ca1bff94dd",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/372311e1ac5c",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "web-network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "e312f6dfd765"
                    ],
                    "NetworkID": "fe7f79487aa87cf03e03c857fc0013d3b85656fad9fb4417f9abfb2402f17c60",
                    "EndpointID": "45f3d2f47b8f4aec8dce2cc70f1d0ca003714ff76a9a28dfac5a332c14b65ad0",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:03",
                    "DriverOpts": null
                }
            }
        }
    },
    {
        "Id": "8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7",
        "Created": "2018-06-23T22:33:09.6325018Z",
        "Path": "nginx",
        "Args": [
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 8012,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-06-23T22:33:10.1810925Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:cd5239a0906a6ccf0562354852fae04bc5b52d72a2aff9a871ddb6bd57553569",
        "ResolvConfPath": "/var/lib/docker/containers/8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7/hostname",
        "HostsPath": "/var/lib/docker/containers/8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7/hosts",
        "LogPath": "/var/lib/docker/containers/8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7/8296c047ebf6e8f7d3755dec287903e5d7afee93cf96a47c7ef4b1c3ef04ded7-json.log",
        "Name": "/webapp",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "web-network",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "8001"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/feb0bfb05649a7787b78ce5e6134d30a2a7e7555964026c50bfd3a4af1e2a03e-init/diff:/var/lib/docker/overlay2/2ed039f41684788abb90840539ada301341751824b0112729e02b67b196226d7/diff:/var/lib/docker/overlay2/617a2b41e640cd527fdb39453e022b25eb04b5967ec1f4ed74e4b952fffb4005/diff:/var/lib/docker/overlay2/6bd654f2fa5d21d58a7ffcb989da07153dcaf6755e44952114e067baf7ccdba6/diff",
                "MergedDir": "/var/lib/docker/overlay2/feb0bfb05649a7787b78ce5e6134d30a2a7e7555964026c50bfd3a4af1e2a03e/merged",
                "UpperDir": "/var/lib/docker/overlay2/feb0bfb05649a7787b78ce5e6134d30a2a7e7555964026c50bfd3a4af1e2a03e/diff",
                "WorkDir": "/var/lib/docker/overlay2/feb0bfb05649a7787b78ce5e6134d30a2a7e7555964026c50bfd3a4af1e2a03e/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "8296c047ebf6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.15.0-1~stretch",
                "NJS_VERSION=1.15.0.0.2.1-1~stretch"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "ArgsEscaped": true,
            "Image": "nginx@sha256:3e2ffcf0edca2a4e9b24ca442d227baea7b7f0e33ad654ef1eb806fbd9bedcf0",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGTERM"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "aed26e0cedb3000e6bcdf02f2a45446ae2c81eddbd6f53a30d34992e17f01611",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8001"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/aed26e0cedb3",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "web-network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "8296c047ebf6"
                    ],
                    "NetworkID": "fe7f79487aa87cf03e03c857fc0013d3b85656fad9fb4417f9abfb2402f17c60",
                    "EndpointID": "cfe083931723d5689088deb5869d3caabe9360b22bbef908fb538041e0c58c7c",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

見にくい場合はformatやjqを使ってみると見やすいです

$ docker container inspect webfront webapp --format "{{json .HostConfig}}" | jq .
{
  "Binds": null,
  "ContainerIDFile": "",
  "LogConfig": {
    "Type": "json-file",
    "Config": {}
  },
  "NetworkMode": "web-network",
  "PortBindings": {},
  "RestartPolicy": {
    "Name": "no",
    "MaximumRetryCount": 0
  },
  "AutoRemove": false,
  "VolumeDriver": "",
  "VolumesFrom": null,
  "CapAdd": null,
  "CapDrop": null,
  "Dns": [],
  "DnsOptions": [],
  "DnsSearch": [],
  "ExtraHosts": null,
  "GroupAdd": null,
  "IpcMode": "shareable",
  "Cgroup": "",
  "Links": null,
  "OomScoreAdj": 0,
  "PidMode": "",
  "Privileged": false,
  "PublishAllPorts": false,
  "ReadonlyRootfs": false,
  "SecurityOpt": null,
  "UTSMode": "",
  "UsernsMode": "",
  "ShmSize": 67108864,
  "Runtime": "runc",
  "ConsoleSize": [
    0,
    0
  ],
  "Isolation": "",
  "CpuShares": 0,
  "Memory": 0,
  "NanoCpus": 0,
  "CgroupParent": "",
  "BlkioWeight": 0,
  "BlkioWeightDevice": [],
  "BlkioDeviceReadBps": null,
  "BlkioDeviceWriteBps": null,
  "BlkioDeviceReadIOps": null,
  "BlkioDeviceWriteIOps": null,
  "CpuPeriod": 0,
  "CpuQuota": 0,
  "CpuRealtimePeriod": 0,
  "CpuRealtimeRuntime": 0,
  "CpusetCpus": "",
  "CpusetMems": "",
  "Devices": [],
  "DeviceCgroupRules": null,
  "DiskQuota": 0,
  "KernelMemory": 0,
  "MemoryReservation": 0,
  "MemorySwap": 0,
  "MemorySwappiness": null,
  "OomKillDisable": false,
  "PidsLimit": 0,
  "Ulimits": null,
  "CpuCount": 0,
  "CpuPercent": 0,
  "IOMaximumIOps": 0,
  "IOMaximumBandwidth": 0
}
{
  "Binds": null,
  "ContainerIDFile": "",
  "LogConfig": {
    "Type": "json-file",
    "Config": {}
  },
  "NetworkMode": "web-network",
  "PortBindings": {
    "80/tcp": [
      {
        "HostIp": "",
        "HostPort": "8001"
      }
    ]
  },
  "RestartPolicy": {
    "Name": "no",
    "MaximumRetryCount": 0
  },
  "AutoRemove": false,
  "VolumeDriver": "",
  "VolumesFrom": null,
  "CapAdd": null,
  "CapDrop": null,
  "Dns": [],
  "DnsOptions": [],
  "DnsSearch": [],
  "ExtraHosts": null,
  "GroupAdd": null,
  "IpcMode": "shareable",
  "Cgroup": "",
  "Links": null,
  "OomScoreAdj": 0,
  "PidMode": "",
  "Privileged": false,
  "PublishAllPorts": false,
  "ReadonlyRootfs": false,
  "SecurityOpt": null,
  "UTSMode": "",
  "UsernsMode": "",
  "ShmSize": 67108864,
  "Runtime": "runc",
  "ConsoleSize": [
    0,
    0
  ],
  "Isolation": "",
  "CpuShares": 0,
  "Memory": 0,
  "NanoCpus": 0,
  "CgroupParent": "",
  "BlkioWeight": 0,
  "BlkioWeightDevice": [],
  "BlkioDeviceReadBps": null,
  "BlkioDeviceWriteBps": null,
  "BlkioDeviceReadIOps": null,
  "BlkioDeviceWriteIOps": null,
  "CpuPeriod": 0,
  "CpuQuota": 0,
  "CpuRealtimePeriod": 0,
  "CpuRealtimeRuntime": 0,
  "CpusetCpus": "",
  "CpusetMems": "",
  "Devices": [],
  "DeviceCgroupRules": null,
  "DiskQuota": 0,
  "KernelMemory": 0,
  "MemoryReservation": 0,
  "MemorySwap": 0,
  "MemorySwappiness": null,
  "OomKillDisable": false,
  "PidsLimit": 0,
  "Ulimits": null,
  "CpuCount": 0,
  "CpuPercent": 0,
  "IOMaximumIOps": 0,
  "IOMaximumBandwidth": 0
}

5. ネットワークを削除する

ネットワークを削除するには以下のコマンドです

docker network rm [オプション] ネットワーク名

containerが起動している状態だとエラーが出るのでstopしてから行います

# ネットワークに接続しているcontainerが起動しいるとエラー
$ docker network rm web-network
Error response from daemon: network web-network id fe7f79487aa87cf03e03c857fc0013d3b85656fad9fb4417f9abfb2402f17c60 has active endpoints

# stopする
$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
e312f6dfd765        centos              "/bin/bash"              34 minutes ago      Up 30 minutes                              webfront
8296c047ebf6        nginx               "nginx -g 'daemon of…"   38 minutes ago      Up 38 minutes       0.0.0.0:8001->80/tcp   webapp

$ docker container stop e312f6dfd765 8296c047ebf6
e312f6dfd765
8296c047ebf6

# stop後だと消せる
$ docker network rm web-network
web-network

おわり

docker便利だけどまだ使いこなせてない\(^o^)/

プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化
WINGSプロジェクト 阿佐 志保
翔泳社
売り上げランキング: 4,789

【VirtualBox】CentOS@VirtualBoxでホストOSとゲストOSでsshするときのネットワーク設定メモ - NAT、ホストオンリーアダプターを設定してeth0、eth1を有効にする

はじめに

VirtualBoxを久しぶりに使ったら全然覚えてない...
特にネットワークまわり。

やりたいことは単純でおおざっぱに言うと以下2点だけ

  • 前提
  • 1.ホストOSからゲストOSにターミナルでsshしたい
    • 外からゲストOSにはアクセスできなくて良い
  • 2.ゲストOSからホストOSを経由して外のネットワークにつなぎたい
    • ゲストOSからgit pullやらpushできればok

そんな時の自分メモ

f:id:tweeeety:20180622000833p:plain

アジェンダ

  1. 今回の環境
  2. やりたいこと
  3. 何をすれば良いか
  4. どうやるか
  5. ネットワークを確認してみる

1. 今回の環境

ホストOS情報

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.5
BuildVersion:   17F77
$ VBoxManage -v
5.2.12r122591

ゲストOS情報

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

2. やりたいこと

はじめにに記載したことがやりたい事ですが再掲です。

  • 前提
  • 1.ホストOSからゲストOSにターミナルでsshしたい
    • 外からゲストOSにはアクセスできなくて良い
  • 2.ゲストOSからホストOSを経由して外のネットワークにつなぎたい
    • ゲストOSからgit pullやらpushできればok

3. 何をすれば良いか

2. やりたいことを実現するために
VirtualBox何をすれば良いかを文章的にまとめるとこんな感じです。

  1. ホストOSからゲストOSにターミナルでsshしたい
    • ホストオンリーアダプタを設定する
  2. ゲストOSからホストOSを経由して外のネットワークにつなぎたい
    • NAT(DHCP)の設定をする

また、これを図にするとこんなイメージになります。
f:id:tweeeety:20180622001154p:plain

4. どうやるか

何をすれば良いか を実現するために具体的にやることは以下の4stepです。

VirtualBoxマネージャはこのGUIツールです

f:id:tweeeety:20180622002208p:plain

①. VirtualBoxマネージャでネットワークアダプタを作成&設定する

  • グローバルツール(G)を開きます。

f:id:tweeeety:20180622002227p:plain

  • 作成(C)を押します。
    vboxnet0というアダプタが作成されます。

f:id:tweeeety:20180622002239p:plain

  • vboxnet0を選択した状態でアダプタータブを開き
    アダプターを手動で設定にチェックが入っている事を確認します。

f:id:tweeeety:20180622002416p:plain

  • DHCPサーバタブを開きサーバを有効化にチェックします。
    設定値はそのままで大丈夫です。

f:id:tweeeety:20180622002505p:plain

②. VirtualBoxマネージャで仮想マシンのネットワーク設定をする

f:id:tweeeety:20180622002524p:plain

  • ネットワークを開いてアダプター1にNATが設定されている事を確認します。

f:id:tweeeety:20180622002539p:plain

  • アダプター2を選択してネットワークアダプターを有効化にチェックをします。

f:id:tweeeety:20180622002551p:plain

  • 割り当て:ホストオンンリーアダプターを選択して
    名前にさきほど作成したvboxnet0を選びます。
    (デフォルトvboxnet0になってる)

f:id:tweeeety:20180622002551p:plain

また、高度を押すと設定がさらに開くのでMACアドレスをメモっておきます。

f:id:tweeeety:20180622002655p:plain

今回の例でいうとMACアドレスは以下です

080027588378

最後にOKを押して設定を保存します。

③. ゲストOSでネットワークの設定をする

仮想マシンを起動するか、すでに起動していた場合は再起動します。

起動したら仮想マシンのターミナルで設定を行います。

rulesをcleanにする

MACアドレスeth*の対応づけを行なっているrulesの設定を綺麗にしておきます。
reboot後にeth0、eth1を元に自動で作成されるので大丈夫です。

$ rm /etc/udev/rules.d/70-persistent-net.rules

この辺のファイルが何かは以下をご参考ください

ifcfg-eth*を設定

vim/etc/sysconfig/network-scripts/ifcfg-eth0を設定します。
ファイルを開くともともと書かれてる場合がありますが、
他の行はコメントアウトしました。

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
PEERDNS=no

vim/etc/sysconfig/network-scripts/ifcfg-eth1を設定します。
ファイルがない場合は作成します。

DEVICE=eth1
HWADDR=08:00:27:58:83:78
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
PEERDNS=no
IPADDR=192.168.56.3
NETMASK=255.255.255.0

BOOTPROTOについては気になったので簡単に調べてみました。

再起動する
$ reboot
確認する

以下を確認します。

  • /etc/udev/rules.d/70-persistent-net.rulesが作成されている
  • ifconfigでeth0eth1が設定されている

このように表示されれば設定がされているはずです。

# 確認
# rulesが新しくできている
$ cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:82:03:24", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:58:83:78", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# ネットワークインターフェースの確認
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:82:03:24
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe82:324/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1470 (1.4 KiB)  TX bytes:2262 (2.2 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:58:83:78
          inet addr:192.168.56.3  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe58:8378/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:505 errors:0 dropped:0 overruns:0 frame:0
          TX packets:318 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:48536 (47.3 KiB)  TX bytes:73614 (71.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
疎通確認をする

次に、pingで外向けに通信してNAT(ゲストOS->ホストOSの通信)を確かめます。
packet lossがなければ成功です。

# Google Public DNS(8.8.8.8)に疎通確認
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=4.17 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.32 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=5.54 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=4.29 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3155ms
rtt min/avg/max/mdev = 4.179/4.837/5.548/0.611 ms

# googleに疎通確認
$ ping google.com
PING google.com (172.217.24.142) 56(84) bytes of data.
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=1 ttl=63 time=2.25 ms
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=2 ttl=63 time=2.35 ms
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=3 ttl=63 time=3.61 ms
64 bytes from nrt20s01-in-f14.1e100.net (172.217.24.142): icmp_seq=4 ttl=63 time=2.55 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3895ms
rtt min/avg/max/mdev = 2.259/2.695/3.612/0.540 ms

④. ホストOSからSSHしてみる

ここまでくればmacsshしてみます。
sshできればホストオンリーアダプタ(ホストOS->ゲストOSの通信)が成功です。

$ ssh root@192.168.65.3
root@192.168.56.3's password:
Last login: Thu Jun 21 22:30:49 2018 from 192.168.56.1

5. ネットワークを確認してみる

念のためもう少しネットワークを確認してみます。

ゲストOS

ゲストOS側でroute、netstat、tracerouteでネットワーク設定を確認します。
外に出れていれば以下のようになります。

route

routeコマンドでルーティングテーブルを確認します

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
192.168.56.0    *               255.255.255.0   U     0      0        0 eth1
link-local      *               255.255.0.0     U     1002   0        0 eth0
link-local      *               255.255.0.0     U     1003   0        0 eth1
default         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
$ route 
netstat

netstatでネットワークインターフェース(NIC)の状態を確認します

# netstat
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
traceroute

tracerouteでネットワークの経路を確認してみます。

# traceroute
$ traceroute -T -q 1 -w 1 google.com
traceroute to google.com (172.217.24.142), 30 hops max, 60 byte packets
 1  10.0.2.2 (10.0.2.2)  0.127 ms
 2  syd09s06-in-f14.1e100.net (172.217.24.142)  24.941 ms

今回利用しているオプションは以下の通りです

  • -T: TCP SYNパケットを用いる。デフォルトのポート番号は80
  • -q: 1つのホップにおける試行回数を指定する
  • -w: タイムアウト時間を指定する。単位は秒

ホストOSでifconfig

また、ホストOS側でifconfigを行うと、
仮想NICvboxnet0に付与されたIPアドレスを確認できます。

$ ifconfig | grep vboxnet0 -A 3 -B 3
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
vboxnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether 0a:00:27:00:00:00
    inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255

補足

10.0.2.2はどこで設定されてるか気になり別途調べてみました。

参考

おわり

\(^o^)/