Docker用サーバー構成
SoftLayerにて、下記の構成の仮想サーバーを用意し、Dockerをインストールします。
SoftLayerをまだ触れたことがない場合は、日本IBMのSoftLayerページ内の各リンクやコンテンツとても勉強になります。困ったときにはSoftLayerコミュニティーを見るとヒントが見つかったり、解決します。
お手持ちのアカウントで、SoftLayer カスタマーポータルにログインし、下記の構成の仮想サーバーを1台用意します。
仮想サーバーが利用可能なったら、PuttyなどでSSHにて接続します。
今回の構成:$0.06 / 時間
- CentOS 6.x minimal (64bit)
- メモリ 2GB
- CPU 1コア × 2.0GHz
- ストレージ 25GB
- ネットワーク Public/Private 100Mbps
- Public IPアドレス ×1 / Private IPアドレス ×1
- データセンター:米国サンノゼ
- ファイアウォール:APFを追加
APF設定とタイムゾーン変更(CentOS版)
Dockerで起動したコンテナにアクセスできるようにするために、必要なポートをあらかじめ開放しておきます。また、SoftLayer上で動くCentOS 6.xは、タイムゾーンが日本ではありませんので、タイムゾーンの変更も行います。
先ずは、APFによるファイアウォールのポートを許可します。
APF設定変更のため、vi 起動
# vi /etc/apf/conf.apf
変更内容 → 変更後、:(コロン)wq で保存
IG_TCP_CPORTS="20,21,22,25,53,80,3306,5432,8080"
APF再起動
# /etc/init.d/apf start
再起動時にAPFが動くようにする
# chkconfig apf on
次にタイムゾーンの変更を行います。
ハードウェアクロックのゾーン変更のため、vi 起動
# vi /etc/sysconig/clock
変更内容 → 変更後、:(コロン)wq で保存
ZONE=”Asia/Tokyo”
UTF=”false”
変更内容を反映
# source /etc/sysconfig/clock
zoneinfoにある地域ファイルをコピー → 上書きする確認メッセージが表示されるので、y (yes)と入力
# cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
date コマンドを実行して、きちんと日本時間が取得できるか確認
# date
Dockerのインストール
レポジトリの追加
# yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Dockerのインストール
# yum -y install docker-io
Dockerの起動
# service docker start
再起動時にDockerが動くようにする
# chkconfig docker on
インストールしたDockerのバージョン確認
# docker --version
Docker上のコンテナが参照するDNSを追加のため、vi 起動
# vi /etc/sysconfig/docker
追加内容 → 追加後、:(コロン)wq で保存
other_args=”-dns 8.8.8.8”
Dockerを再起動
# service docker restart
CentOS公式イメージのカスタマイズ
CentOS公式イメージの取得
# docker pull centos:centos6
→ CentOS 6.x の最新版を取得
取得したDockerイメージのサイズなどを確認
# docker images
取得したDockerイメージの起動 → コンテナへ
# docker run -i -t -d centos:centos6 /bin/bash
0540f5...
のようなコンテナIDが表示される
起動したコンテナに接続
# docker attach コンテナID
→ コンテナIDは冒頭の4~6文字入れれば良い
接続したコンテナに対して、先ほどのタイムゾーン変更の作業を実施。
開発ツールや日本語サポート(フォント類)などの追加
# yum groupinstall -y ‘Development tools’
# yum groupinstall -y “Japanese Support”
# yum install -y wget which tar
アップデートの実行
# yum update -y
その他、JavaのインストールやTomcatなど必要なものを追加します。
コンテナから抜けて、独自のDockerイメージとして保存(コミット)します。
# CTRL キー + p キー +q キー
→ コンテナから抜ける
稼働中のコンテナIDを確認
# docker ps
docker commitの実行
# docker commit コンテナID イメージ名(必須):タグ名(任意)
→ 独自イメージとして保存
例 # docker commit 0609d5 centos6
保存したカスタマイズ済み独自イメージを確認 → 先ほどのイメージ名が表示されるか確認
# docker images
コンテナから抜けた状態で稼働中のコンテナを停止 → 削除は下記のようになります。
# docker ps
で、コンテナIDを確認
# docker stop コンテナID
⇒ コンテナを停止
# docker rm コンテナID
⇒ コンテナを削除
コンテナに入っている状態であれば、exit
でコンテナの稼働を停止できます。
ホスト側(SoftLayer上で動く仮想サーバー)とゲスト側(Docker コンテナ)におけるファイル共有
docker run 実行時に、-v を追加することで、ホスト側とゲスト側で指定したディレクトリを介してファイル共有ができるようになります。
# docker run -i -t -d -v ホスト側ディレクトリ:ゲスト側ディレクトリ:rw イメージ名:タグ コマンド(/bin/bashなど)
例 # docker run -i -t -d -v /home/docker/docker-volume:/var/volume:rw centos:centos6 /bin/bash
エクスポート & インポート
稼働中のコンテナを独自イメージとして、別のDocker環境でも使用したい場合は、docker export コマンドを使います。本来であれば、Docker Hubなり、プライベートレポジトリなり用意するのですが、会社や自宅サーバーの事情で、ファイルサーバーやGoogle Driveなどのオンラインストレージの方が使い勝手が良い場合があります。docker exportで出力するファイルは、GB単位になることが殆どですので、GB単位のファイルを転送/アップロードできるファイルサーバーやオンラインストレージを使用する必要があります。
docker export
# docker export コンテナID > ファイル名.tar
例 docker export 34f89tgt > centos6_kai.tar
docker export コマンドにより、TAR形式に圧縮されたイメージを外部に保管するには、たとえばWindows 7を使用している場合は、たとえばWinSCPでSoftLayer上で稼働中の仮想サーバーに接続し、docker export コマンドで生成したTAR形式のファイルをお使いのPCにダウンロードします。TAR形式の圧縮ファイルなので、会社や自宅のファイルサーバー、オンラインストレージ等に保管、配布しても良いでしょう。勿論、別のDocker環境で再利用することができます。
再利用するには、docker import コマンドで、対象のDocker環境にTAR形式のイメージを取り込みます。
docker import
# cat ファイル名.tar | docker import - 取り込むイメージ名
イメージを無事取り込んだか確認します。
# docker images
また、イメージを削除するには、
# docker rmi イメージ名:タグ名
もしくは# docker rmi イメージID
を実行します。
もし、削除対象のイメージを用いたコンテナが削除されていない場合は、イメージの削除ができませんので注意する必要があります。