dockerコンテナに外部からアクセスできるIPアドレスを割り当てる(CentOS 7)
dockerコンテナに外部からアクセスできるIPアドレスを割り当てる - kubotti’s memo
でCentOS6でやったことをCentOS7でもやってみる。
環境
ホストOS:Ubuntu 10.04.4 LTS
VM:KVM
$ virsh version Compiled against library: libvir 0.7.5 Using library: libvir 0.7.5 Using API: QEMU 0.7.5 Running hypervisor: QEMU 0.12.3
VMのネットワーク接続方法:後で調べる。たぶん仮想ブリッジ。
ゲストOS:CentOS Linux release 7.1.1503 (Core)
ゲストOSに入れたdocker:Docker version 1.8.2, build bb472f0/1.8.2
ゲストOSのIPアドレスは、192.168.3.57
ホストOSのIPアドレスは、特に関係ないけど、192.168.2.40
この環境で、192.168.2.0/23の他のPCからアクセス可能なdockerコンテナを作る。
※サブネットマスクが23なので、255.255.254.0のネットワーク。(192.168.2.0 - 192.168.3.255まで)
IPアドレスを192.168.3.58にする、というか、iptablesのNAT機能で転送する。
docker imageの取得
ゲストOS(CentOS)で実行
docker pull centos:centos6
立ち上げ
docker run -d -it -p 50022:22 --hostname webapp1 --name webapp1 centos:centos6 /bin/bash
2回目以降のコンテナの立ち上げ
docker ps -a
で停止中の一覧を取得して、
docker start webapp1
で起動。
コンテナ上のCentOSに最低限のソフトウェアをインストール
docker attach webapp1
コンテナ内のCentOSで実行
yum install wget
cd mkdir rpm cd rpm wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm
yum install initscripts yum install openssh-server service sshd start
yum install passwd yum install openssh-clients cd /etc/ssh/ cp sshd_config sshd_config.20151106
vi sshd_config
# add PermitRootLogin yes # change UsePAM no #UsePAM yes
service sshd start
rootのパスワード設定。
passwd
dockerのホストからsshできるか確認。
ssh root@172.17.0.1
デタッチ
How do you attach and detach from Docker's process? - Stack Overflow
Ctrl + p
Ctrl + q
でdockerコンテナを終了させずにデタッチ。
ネットワーク設定
KVM上のCentOS7(dockerホスト)上で、以下のコマンドを実行。
firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING_direct 0 -d 192.168.3.58 -j DNAT --to 172.17.0.1 firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER 0 -d 172.17.0.1 -p 80 -j ACCEPT ip addr add 192.168.3.58/23 brd 192.168.3.255 dev eth0 #iptables -A DOCKER -d 172.17.0.1 -p tcp --dport 80 -j ACCEPT systemctl restart firewalld
firewall-cmdコマンドに --permanent を付けると、どこかに保存される。
CentOS7 第4回 はじめての firewalld で作る Linuxルータ – CLARA ONLINE techblog
ウェブサーバーの設定
dockerのゲスト(コンテナ)で実行。
yum install httpd service httpd start
vi /var/www/html/index.html
vi でindex.htmlを作って何か書く。
接続を試す
確認用PCから、
http://192.168.5.201/
にアクセス。
メモ
dockerコンテナ一覧
起動中のみ
docker ps
すべて表示
docker ps -a
dockerイメージ作成
docker commit -m "something comment" <CONTAINER ID> <イメージの名前>:<タグ>
docker commit -m "something comment" <CONTAINER ID> <イメージの名前>
dockerイメージ一覧
docker images
dockerイメージの削除
docker rmi <イメージ名>
iptablesルール削除
firewall-cmd --permanent --direct --remove-rule ipv4 nat PREROUTING_direct 0 -d 192.168.3.58 -j DNAT --to 172.17.0.3
RHEL7: How to get started with Firewalld. - CertDepot
↓は、sytemctl restart firewalld で元に戻ってしまう。
iptables -t nat -D PREROUTING_direct 1