DockerコンテナのIPアドレス取得

集中的にDockerネタです。

ホストOSからコンテナのIPアドレスを取得するときに利用するコマンドですがDockerから遠ざかるとすぐに忘れるのでUPしておきます。


docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [コンテナID/コンテナ名]

最後の[コンテナID/コンテナ名]はdocker ps -aで出力される一覧の対象となるコンテナのCONTAINER_IDかNAMEのいずれかを設定してください。

Dockerコンテナって最低限のコマンドしか入っていないのでCentOS7のコンテナに入ってipコマンドとかたたいてもコマンドが無いよ的なエラーが出ます。
コマンド入れればいいだけの話ですが、いちいちコンテナに入って確認も面倒なのでそんな時は外からinspectコマンドで一発取得が便利かと。

ホストOSのディレクトリをDockerコンテナと共有する

アプリ基盤って一度構築するとそれをドキュメントにしないと忘れてしまうのを何とかしたいと思いつつ、今回も昔まとめた手順をUPします。

ホストOSのディレクトリをコンテナと共有する方法です。

今回簡単にコマンド検証するためにVagrantにCentOS7を入れてDcokerをインストールしている環境を前提にしています。
ホストOSはvagrantユーザで実行している前提とします。

ホストOSで共有するディレクトリを作成

rootにスイッチしてディレクトリを作成する。パスワードは変更していなければvagrantと同じだが変更している場合、変更後のパスワードでsuすること。


su -
cd /
mkdir -p /data/docshare
cd /data
chown vagrant:wheel docshare
exit

共有するディレクトリに適当にファイルを作成


cd /data/docshare
echo "Hello World" > hello.txt
ls -l

OSのディレクトリをコンテナと共有

コンテナ起動時に-vオプションでホストOSのディレクトリとコンテナ側のマウントポイントを設定します。今回はあえて--hostnameでホスト名も指定していますがディレクトリ共有にこの設定は必要はありません。


docker run -it -d -v /data/docshare:/docshare --name testsrv --hostname testsrv centos:centos7 /bin/bash
docker attach testsrv
ls -l /
bin dev docshare etc ...
cd docshare
cat hello.txt

コンテナ上でファイルに書き込みを行ったりするとホストOS側でも変更を確認できると思います。
ちなみに書き込み不可にする場合は、コンテナ側のマウントポイントの後に:roと指定すればいいです。


docker run -it -d -v /data/docshare:/docshare:ro --name testsrv --hostname testsrv centos:centos7 /bin/bash

余談

少し話がそれますがコンテナ間でボリュームの共有をしたい場合もあると思います。
そういった場合、まずコンテナAを起動するときに/data/shareというボリュームを設定します。


docker run -it -d -v /data/share --name test01 centos:centos7 /bin/bash

コンテナBでは共有したいボリュームを設定しているコンテナ名を--volumes-fromオプションで指定すれば共有できます。


docker run -it -d --volumes-from test01 --name test02 centos:centos7 /bin/bash

コンテナB側で読み込み専用にしたい場合はコンテナ名の後に:roを指定すればOKです。

Python仮想環境にpipを利用してAnsibleの環境構築

virtualenv、virtualenvwapperで構築したPython仮想環境にAnsible実行環境を構築した時の覚書です。
サーバはCentOS7です。

yumパッケージのインストール

めんどくさいので、とりあえず開発系のパッケージをgropuinstallで一気に入れます。


sudo yum -y install epel-relase
sudo yum -y groupinstall "Development Tools"
sudo yum -y install python-devel sshpass

pipのインストール


curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python

virtualenv、virtualenvwrapperのインストールと設定


sudo pip install virtualenv
virtualenv venv
source ~/venv/bin/activate #activate,deactivateできるか試しておく
deactivate
sudo pip install virtualenvwrapper

which virtualenvwrapper.sh #出力されたパスを控えておいて、.bash_profileに以下の定義を追加。


vi .bash_profile

・・・
if [ -f /usr/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/bin/virtualenvwrapper.sh
fi

source .bash_profile
mkvirtualenv ansible_env

Ansibleのインストール

作成した仮想環境上にAnsibleをインストール。


workon ansible_env
pip install ansible
ansible --version
deactivate

構築済みのCentOS7でロケールとタイムゾーンとキーマップの設定

CentOS7(RHEL7)になってだいぶコマンドなどの使用感が変わっていますが、設定済みのOSに日本語のロケール追加とタイムゾーンの変更を行うことがあったので、その時の記録です。

例えば、Vagrantで自前ではなくネットからDLしたBOXファイルを展開するとこれらの設定が英語圏のままなのでそういう時に自前で設定することになると思います。

ロケール

日本語のロケールを組み込んで設定するところまでをコマンドに残します。

まず、日本語のロケールが組み込まれているか確認します。


locale -a

上記コマンドの結果にja_JP、ja_JP.utf8がなければ組み込みます。


sudo localedef -f UTF-8 -i ja_JP ja_JP
locale -a|grep ja

CentOS7で恒久的にロケールを変更するには下記のファイルを修正。


sudo vi /etc/locale.conf
LANG="jp_JP.UTF-8"

タイムゾーン

タイムゾーンをAsia/Tokyoに変更する手順です。
コマンドは上から順に「現在のタイムゾーンの確認」、「変更対象のタイムゾーンの存在確認」、「タイムゾーン変更」です。
今回の場合だと、「変更対処のタイムゾーンの確認」でAsia/Tokyoが存在することを確認してください。


timedatectl status
timedatectl list-timezones | less
・・・
Asia/Tokyo
・・・
sudo timedatectl set-timezone Asia/Tokyo

キーマップ

最後にキーマップです。

日本語のキーマップが存在するか確認。


localectl list-keymaps | less
・・・
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106

あれば下記コマンドで設定変更。


sudo localectl set-keymap jp106

docker-ce版

3日続けての連続投稿です。
書かないと全く書かないけど、書くときは集中的に!

タイトルの通りですが、前回までの記事でdockerはcentosリポジトリにあるものをインストールしましたが、dockerのリポジトリからCE版をインストールする方がいいと思います。

インストール方法とかは既にいろんなところで記載があるので自分向けのメモとしてひたすらコマンドを列挙しておきます。


sudo yum -y install yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce

これだけです。

dockerイメージの作成、起動、停止、削除

前回VagrantでCentOS7を起動してDockerをインストールするところまで記載しました。

今回はDockerにイメージをインストールしてイメージの起動停止削除手順をメモしておきます。

dockerの起動をOS起動と同時に起動できるるように下記のコマンドを実行。


sudo systemctl start docker
sudo systemctl enable docker

vagrantでCentOS7を展開した場合デフォルトユーザはvagrantなので当該ユーザをdockerグループに追加後にexitしてvagrant sshで再接続します。


sudo groupadd docker
sudo usermod -aG docker $USER
exit
vagrant ssh

Dockerイメージのインストール

とりあえずCentOS7にCentOS7とUbuntuのイメージをインストールします。


docker pull centos:centos7
docker pull ubuntu:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 113a43faa138 3 weeks ago 81.2 MB
docker.io/centos centos7 49f7960eb7e4 3 weeks ago 200 MB

Dockerイメージを起動

centos7とubuntuのコンテナイメージの生成と起動します。バックグラウンドで起動させたいので-dオプションを指定し、--nameオプションで名前も指定しておきます。--nameオプションを指定することでコンテナ生成時に振られるIDや名前ではなくこちらで指定した名称でコンテナを操作できるようになるのでオプションは指定しておいた方がいいと思います。
当該オプションを指定しなくても生成後にdocker ps -aコマンドで自動的に付与された名前やIDを確認することはできます。


docker run -it -d --name centos7 centos:centos7
docker run -it -d --name ubuntu ubuntu:latest
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ecce9962bc3 ubuntu:latest "/bin/bash" 6 seconds ago Up 6 seconds ubuntu
77a854e88812 centos:centos7 "/bin/bash" 8 seconds ago Up 8 seconds centos7

接続

まずはCentOS7に接続します。


docker exec -it centos7 /bin/bash
[root@77a854e88812 /]#

exitで切断して、次はubuntuに接続します。


docker exec -it ubuntu /bin/bash
root@8ecce9962bc3:/#

exitで抜けます。

停止

コンテナ停止コマンドでcentos7とubuntuを停止させます。最後にdocker psコマンドで何も出力されていなければ停止完了です。


docker stop centos7
docker stop ubuntu
docker ps

再開

停止したdockerイメージを再開するにはdocker startコマンドで実施します。


docker start centos7
docker exec -it centos7 /bin/bash
[root@77a854e88812 /]#

終了したい場合はexitコマンドで抜けてください。

イメージ削除

作成済みのdockerコンテナイメージを削除する場合はdocker rmコマンドで行います。イメージ生成時に--nameオプションでコンテナ名を指定して構築していればrmの後にコンテナ名を指定すれば削除することができます。
centos7を削除するコマンドは下記の通り。


docker rm centos7

VagrantでCentOS7を起動してDockerをインストールするまで

今更ながらVagrantの設定からCentOS7にDockerをインストールするまでの手順をメモとして書いておきます。

VagrantVirtualboxは既にインストール済みであることが前提です。

とりあえずVagrantのbox配置先フォルダを変更したい場合、環境変数VAGRANT_HOMEにパスを設定してから作業。

では、コマンドプロンプトを起動してcentos7をインストールしてみます。


vagrant box add centos/7

下記のような選択肢が出たら今回は3のvirtualboxを選択します。


1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

終わったらlistコマンドで確認。


vagrant box list

登録されていたらとりあえず作業ディレクトリを作成してディレクトリ配下で下記コマンドよりVagrantfileを生成します。


vagrant init centos/7

あとはvagrant upコマンドでOSを起動して、sshで接続できればOK。


vagrant up
vagrant ssh
Vagrantファイルを編集した時、文字コードをMS932で保存してvagrant upとかすると起動時にUTF-8への変換エラーとかが出ることがあるので、その場合はVagrantファイルをUTF-8形式に保存しなおして実行すれば大丈夫です。
その時、Vagrantfileに下記おまじないも追加してUTF-8形式で保存しておくとよいです。


# -*- encoding: utf-8 -*-

続いてDockerをインストールします。vagrant sshで接続してyumでDockerをインストール。


yum -y install docker

とりあえずここまでにしておきます。
dockerにイメージをインストールする部分は別の機会に。

まだまだ他にも記録しておきたいことがあるんだけど全然追いつかない。。。