2017/12/19

自分用docker事始め

例えばubuntu 16.04を試したいとする。

docker hubからのimage pull

$docker pull ubuntu:xenial
もしくは
$docker pull ubuntu:latest
//docker pull <image名>:<Tag名>で指定

imageからコンテナの生成と実行

  • -i: インタラクティブ
  • -t: ttyをあてがう
  • -d: detachモート(background実行) 上はまとめて-itdとか省略される
$docker run -it --name xenial_test ubuntu:xenial
  • -h: ホスト名指定

コンテナの起動/停止

$docker start コンテナ名(or コンテナID)
$docker stop  コンテナ名(or コンテナID)
  • -a: 起動した後attach↓

起動中のコンテナにattach

$docker attach コンテナ名(or コンテナID)

$docker exec -it コンテナ名(or コンテナID) /bin/bash

前者はコンテナ内のPID=1のstdin/outにattach、後者は新たにshell起動する。
後者の場合/bin/bashでなくても実行したいコマンドでよい。
前者の場合exitしちゃうとコンテナ自体が止まってしまうので、もしstopしたくない場合は↓

コンテナからのdetach

コンテナにattachした状態で、C-p C-q

コンテナ一覧を見る

$docker ps
起動中のコンテナのみ
$docker ps -a
眠ってるコンテナも含めて一覧

2016/10/23

dockerをインストール@Ubuntu14:04

基本は以下の手順通りに行う * https://docs.docker.com/engine/installation/linux/ubuntulinux/

  1. Prerequisitesのインストール apt source listを追加する際に書き込みがsudoできないのでできないのでteeとか使ってやる。
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

apt sourceの追加(sourceUbuntu versionごとに違うので注意)
$ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

aufs storage driverなるものが使えるようになるので以下をインストールしろと言われるがlinux-image-extra-virtualを入れようとすると以下の依存エラーが起きた

$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

依存エラー

The following packages have unmet dependencies:
 linux-image-extra-virtual : Depends: linux-image-generic (= 3.13.0.100.108) but 3.13.0.92.99 is to be installed
E: Unable to correct problems, you have held broken packages.

これはいったん、linux-image-genericをpurgeしてreinstallすることで対応できた

$sudo apt-get purge linux-image-generic
$sudo apt-get install --reinstall linux-image-generic
  1. dockerインストール
    Log into your Ubuntu installation as a user with sudo privileges.

    Update your APT package index.

     $ sudo apt-get update

    Install Docker.

     $ sudo apt-get install docker-engine

    Start the docker daemon.

     $ sudo service docker start

    Verify docker is installed correctly.

     $ sudo docker run hello-world

    This command downloads a test image and runs it in a container. When the container runs, it prints an informational message. Then, it exits.

hello-worldを実行すると以下がでて正しくインストールできたっぽいことがわかる

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Tips

proxy

docker.ioへ接続する際のproxy設定は /etc/default/dockerへ以下を記載する

export http_proxy="http://proxy.hoge.com:XXXXXX"

変更後はdockerのrestartが必要

$sudo service docker restart

sudoなしdocker実行

installation pageにもあるがdockerグループを作成して、そこにユーザを入れることでsudoなしでもdockerコマンドが実行できるようになる。

グループへ追加後、対象ユーザで作業している場合にはログアウト → 再ログインが必要なので注意


dockerをインストール@Ubuntu14:04

基本は以下の手順通りに行う https://docs.docker.com/engine/installation/linux/ubuntulinux/

  1. Prerequisitesのインストール apt source listを追加する際に書き込みがsudoできないのでできないのでteeとか使ってやる。
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

apt sourceの追加(sourceUbuntu versionごとに違うので注意)
$ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

aufs storage driverなるものが使えるようになるので以下をインストールしろと言われるがlinux-image-extra-virtualを入れようとすると以下の依存エラーが起きた

$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

依存エラー

The following packages have unmet dependencies:
 linux-image-extra-virtual : Depends: linux-image-generic (= 3.13.0.100.108) but 3.13.0.92.99 is to be installed
E: Unable to correct problems, you have held broken packages.

これはいったん、linux-image-genericをpurgeしてreinstallすることで対応できた

$sudo apt-get purge linux-image-generic
$sudo apt-get install --reinstall linux-image-generic
  1. dockerインストール
    Log into your Ubuntu installation as a user with sudo privileges.

    Update your APT package index.

     $ sudo apt-get update

    Install Docker.

     $ sudo apt-get install docker-engine

    Start the docker daemon.

     $ sudo service docker start

    Verify docker is installed correctly.

     $ sudo docker run hello-world

    This command downloads a test image and runs it in a container. When the container runs, it prints an informational message. Then, it exits.

hello-worldを実行すると以下がでて正しくインストールできたっぽいことがわかる

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Tipsとしてはdocker.ioへ接続する際のproxy設定は /etc/default/dockerへ以下を記載する

export http_proxy="http://proxy.hoge.com:XXXXXX"

変更後はdockerのrestartが必要

$sudo service docker restart

2016/07/30

Macに挿して使うubuntu USBメモリ作ってみた

MacにUSBメモリをさしてUbuntuインストール

ちょっと家でも使えるLiveUSBじゃないUbuntu環境が欲しくて家のMacにUSBメモリをさしてそこにUbuntuをインストールしてみた。

参考にさせてもらったのはこことかです。

参考サイトではrEFItを使ってたが、すでにメンテされてないのでそこから
forkされたrEFIndを使いました。

手順としては以下。今回はUbuntu14.04 LTSを入れました。

  1. ubuntuインストールLiveUSBを(UbuntuをインストールするUSBメモリとは別に)作成
  2. インストール先のUSBメモリでrEFInd用パーティションを切る
  3. rEFInd用のパーティションをマウントしてrEFIndをインストール(ここまでMac側で作業)
  4. LiveUSBで起動
  5. インストール先USBメモリをマウント
  6. Ubuntu用のパーティションを切る
  7. Install UbuntuからUbuntuをインストール

OSをインストールして使うとなると容量だけでなく速度が非常に重要になり、最初東芝のUSBメモリ(TransMemory THN-U301W0320)に インストールしたのですが遅くて非常に使い勝手が悪い結果になってしまいました。

結局下の速度に定評のあるSnaDiskのメモリを使う事で快適になりましたw

このくらいのサイズ感です。もっと小さいほうが理想的だけどまぁまぁ支障はないでしょう。

  1. ubuntuインストールLiveUSBを(UbuntuをインストールするUSBメモリとは別に)作成 こちらはUbuntuの公式ページに説明があるので省略 → How to create a bootable USB stick on OS X

  2. インストール先のUSBメモリでrEFInd用パーティションを切る まず、EFI用にUSBメモリの先頭に30MB(後記:20MBでもいいっぽい)のHFS+(ジャーナリング)パーティションと残り全部のパーティションに分けます。 Macのディスクユーティリティ.appからだとうまくできずにUSB全体で1パーティションにしかできず、色々悩んだ結果コマンドのdiskutilからやりました。

以下でUSBメモリの/dev/disk? の?を確認。下の場合は/dev/disk2
% diskutier list
/dev/disk0 (internal, physical):
省略
/dev/disk1 (internal, virtual):
省略
/dev/disk2 (external, physical):
省略
以下でパーティションを分割。最初にGPTJHFS+(HFS+ジャーナリング)でrefiという名前で30MB、次に残り全部をubuntuという名前で切る。ubuntu側はインストール時に再度パーティションを切るのでここでは2つに分割だけできればよし。
% diskutil partitionDisk /dev/disk2 GPT JHFS+ refi 0.03g JHFS+ ubuntu 0b
  1. rEFInd用のパーティションをマウントしてrEFIndをインストール(ここまでMac側で作業) rEFIndのサイトからrEFIndをダウンロード(自分の時はversion0.10.3)し解凍。 2.で作成したrefiパーティションをFinderで開き、efiという名前のフォルダを作成。
    次に回答したrEFIndフォルダのルートにあるrefindというフォルダをフォルダごと↑で作ったefiフォルダにコピー(/efi/refind/にする)

解凍後のrefindフォルダには32bitやARM向けのファイルも入ってるんですが、今回は不要なのでx64のみを残して削除します。
左:削除前、右:削除後

コピーが終わったら、blessというコマンドを使ってブートエントリに加えて貰う必要があるようです。以下はrEFItに付属しているenable.shというものをベースにrEFInd用にUpdateしたものですが、これを/efi/refind/フォルダにコピーし、以下の要領で実行します。

#!/bin/bash

LOADERNAME="refind_x64.efi"

expand_dir () {
  pushd "$1" >/dev/null
  DIR="`pwd`"
  popd >/dev/null
}

expand_dir .
if [ ! -f "$DIR/$LOADERNAME" ] ; then
  expand_dir "`dirname "$0"`"
  if [ ! -f "$DIR/$LOADERNAME" ] ; then
    echo "You must run enable.sh from the directory where you put $LOADERNAME"
    echo "or put enable.sh where $LOADERNAME is!"
    exit 1
  fi
fi

if [ "$(uname -p)" != "i386" ]; then
  echo "You must run enable.sh on an Intel-based Macintosh!"
  exit 1
fi

set -x
sudo bless --folder "$DIR" --file "$DIR/$LOADERNAME" 
%cd /Volume/refi/efi/refind/
%./enable.sh
sudoパスワードを入力

*blessコマンドに--setBootオプションをつけるとNVRAMに保存してくれるようなのですが、YosemiteかEl Capitanあたりから入ったSIP(System Integrity Protection)により
sudoでもNVRAMに書き込む処理はできなくなってるっぽい。Safe Modeで起動してSIPをdisableしてbless --setBootして再度enableとやればいいらしいが、--setBootなしでもそれっぽく動作はしてるので今回は無しで。

これでMac側で行う処理は終了。

  1. LiveUSBで起動 起動してください。LiveUSBをさして再起動しOptionキーを押しっぱなしにすると起動時にMacかLiveUSBか選べる。 選択画面がでたら"Try Ubuntu without Install"みたいなやつを選ぶ。

  2. インストール先USBメモリをマウント 指す。

  3. Ubuntu用のパーティションを切る

今回は参考サイトにならってMacやWinからアクセスしてファイル共有できるFAT32パーティションを4Gくらい作った残りをUbuntuにします。 LiveUSBから起動したUbuntu上でGPartedを起動。Commandキー → 検索でGPartとか打つとでてくる

右上のリストメニューからインストール先のUSBのデバイスを選んで、新しいパーティションを作成(未割り当てのパーティションを選んで右クリックで「新規」)
ファイルシステム FAT32を選び、サイズを指定して「追加」

さらに、Ubuntuを入れるパーティションを作成するために残りの未割り当てパーティションを選んで同様に右クリック+新規
ファイルシステム ext4、サイズはデフォルトで残り全部が入ってるのでそのまま、割り当てを"/" ルートに(このあたりは好きな様に)

結果、こんな感じにする。確認できたらツールバー上の✓みたいなボタンを押して実際に反映させる。

  1. Install UbuntuからUbuntuをインストール

デスクトップ上にある”Install Ubuntu”というショートカットをダブルクリックしてインストール画面を出す。

注意点は以下の”インストールの種類”の画面で6.で作ったext4パーティションを選ぶ事と、ブートローダーをインストールするデバイスでインストール先のUSBデバイスを指定する事(↓画像はTOSHIBA USBでやった時のもの)

あとはひたすらインストールが終わるのを待つだけ!

USBを挿してOptionを押しながら起動するとmacOSを起動するかEFI bootか選択画面がでるのでEFI boot側を選択。
rEFIndが起動して何を起動するか選択画面へ進むのでUbuntuを選択すると無事Ubuntuが起動します。
SDXZ80 USBメモリを使うと体感で数秒〜十数秒程度でログイン画面が表示されます。

以下、設定などメモリ書き

Fnキー

デフォルトではFnキーを押さないと、ファンクションキーがF1、F2等々として働かずディスプレイ照度の上げ下げになってました。
デフォルトでは通常のF1として使いたいので以下をセット

sudo bash -c "echo 2 > /sys/module/hid_apple/parameters/fnmode"

TouchPadのnatural scroll

デフォルトではTouchPadの2本指スクロールはPCと同じなんですが、同じMac上でMacでは逆だとややこしいので
Mac側の仕様に統一。

エディタで~/.Xmodmapファイルを開く(なければ作成)。以下を記述。

pointer = 1 2 3 5 4 6 7 8 9 10 11 12

一回ログアウトして再度ログインすると反映される。

ディスプレイの輝度設定が保存されない

そのままだとディスプレイの輝度設定を下げても再起動すると最大に戻ってしまう。GPUに何が使われているモデルかで違うかもしれないが、 自分のMBA('12/Mid)だと以下をする事で保存されるようになった。

エディタで/etc/default/grubを開く。要sudo

以下を修正

修正前
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

修正後
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=vendor acpi_osi=Linux"

修正後以下で設定を反映

$sudo update-grub

再起動するとディスプレイ輝度が保存されるようになった。

Mac Ubuntu Community

後から気がついたがMacでUbuntuを動かす時のドライバ情報(何が動いて何が動かないとか)などの詳細な情報ページあった・・。

https://wiki.ubuntu.com/MactelSupportTeam/CommunityHelpPages#MactelCommunityDocumentation