firewalld のメモ書き

概要

CentOS7 で導入された firewalld のメモ書き

firewalld のメリット

  • ダイナミックに動作するので,ルール変更時などに通信を切断しなくて良い
  • ステートフルパケットインスペクションが可能
  • Zeroconf に対応

firewalld のゾーン

標準で以下の9つのゾーンが定義されている.

  1. drop
  2. block
  3. public
  4. external
  5. dmz
  6. work
  7. home
  8. internal
  9. trusted

各ゾーンのデフォルト設定ファイルは /usr/lib/firewalld/zones に格納されている.
実際に,設定をする際は firewall-cmd コマンドなどで /etc/firewalld/zones 配下のファイルを変更する.

# pwd
/usr/lib/firewalld/zones
# ls
block.xml  dmz.xml  drop.xml  external.xml  home.xml  internal.xml  public.xml  trusted.xml  work.xml

# pwd
/etc/firewalld/zones
# ls
public.xml  public.xml.old

設定ファイルの参照順序

以下の順番で参照される

  1. /etc/firewalld 配下
  2. /usr/lib/firewalld 配下

firewalld の起動と停止など

// 状態確認
# systemctl status firewalld

// 起動
# systemctl start firewalld

// 終了
# systemctl stop firewalld

// 設定ファイルの読み込み
# systemctl reload firewalld

// 有効にする
# systemctl enable firewalld

// 無効にする
# systemctl disable firewalld

// disable よりも強い無効化
# systemctl unmask firewalld

// unmask の取り消し
# systemctl mask firewalld

ゾーンとその設定の確認方法

// 現在のゾーンを確認する
# firewall-cmd --get-active-zone
public
  interfaces: enp0s25

// ゾーンの設定を確認する
# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: enp0s25
  sources: 
  services: dhcpv6-client ssh
  ports: 5000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

ゾーンにパケットの設定をする

// 5000番ポートを恒久的に通信を許可する
# firewall-cmd --zone=public --add-port=5000/tcp --permanent

// 恒久的にサービスを追加する
# firewall-cmd --zone=public --add-service=http --permanent

CentOS7 で Docker のプライベートレジストリを作成した話

概要

Docker のプライベートリポジトリを構築した話です.
プライベートリポジトリを構築することで,ユーザは Docker イメージをプライベートリポジトリに登録することができます.

プライベートレジストリの作成

# yum install docker-registry
# systemctl enable docker-registry
# systemctl start docker-registry

firewalld の設定方法

プライベートレジストリはデフォルトでポート番号 5000 を使用するので解放する

# firewall-cmd --zone=public --add-port=5000/tcp --permanent

プライベートレジストリに Docker イメージを登録する

以前構築した Jenkins のイメージをプライベートリポジトリに登録する

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
kawa0810/jenkins    ver1.0              12abb6b1b0bb        2 minutes ago       512.7 MB

// 登録するイメージをバインドする
# docker tag 12abb6b1b0bb <サーバの IP>:5000/kawa0810/jenkins

// イメージを登録する
# docker push <サーバの IP>:5000/kawa0810/jenkins

CentOS7 の Docker で作成したイメージのエクスポートとインポートをする話

概要

Docker で作成したイメージのエクスポートとインポートする方法です.
エクスポートしたイメージを他の環境の Docker でインポートなどが可能になります

前回作成した Jenkins 環境のイメージをエクスポート & インポートします.

エクスポート

# docker save kawa0810/jenkins > backup.tar

CentOS7 の docker で Dockerfile を使ってみた話

概要

Dockerfile を用いるとイメージの作成が自動化できる
今回は CentOS7 の docker で n 個の Jenkins 環境を用意した話 - kawa0810 のブログ
紹介した Jenkins 環境を Dockerfile を使って自動化する

用意するもの

以下のように環境を用意する

# pwd
/root/jenkins
# ls
Dockerfile  init.sh

init.sh

#!/bin/bash                                                                                               

service jenkins restart

while [[ true ]]; do
    /bin/bash
done

Dockerfile

 # 使用するイメージを取得
FROM centos:centos6

# Dockerfile の作成者
MAINTAINER kawa0810

# Jenkins インストールの準備
RUN yum -y install wget
RUN yum -y install java-1.7.0-openjdk.x86_64

# Jenkins インストール
RUN wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
RUN rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
RUN yum -y install jenkins

# Jenkins を OS 起動時に有効にする
RUN chkconfig jenkins on

# init.sh をコンテナに追加する
ADD init.sh /usr/local/bin/init.sh

# init.sh に実行権限を付与
RUN chmod u+x /usr/local/bin/init.sh

# init.sh を実行する
CMD ["/usr/local/bin/init.sh"]

実行方法

# docker build -t kawa0810/jenkins:ver1.0 /root/jenkins
Uploading context 4.096 kB
Uploading context
<中略>
Removing intermediate container baa08fc44bf1
Successfully built 9401a3554589

// 結果の確認方法
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
kawa0810/jenkins    ver1.0              9401a3554589        9 minutes ago       464.5 MB

// コンテナを起動する (前回と同じだが、コンテナ起動時に Jenkins がスタートする)
# docker run -it -p 8000:8080 --name jenkins01 kawa0810/jenkins:ver1.0 /bin/bash
Shutting down Jenkins                                      [FAILED]
Starting Jenkins                                           [  OK  ]
bash-4.1# 

Dockerfile で使った命令

  • FROM : 使用するイメージの選択. イメージがなければ Docker Hub からダウンロードする.
  • MAINTAINER : Dockerfile の作成者をイメージに記録する
  • RUN : コンテナで実行するコマンドを記載
  • ADD : ホストにあるファイルをコンテナにコピー・追加する
  • CMD : コンテナ起動時に実行するコマンドを記述する (今回はシェルを実行した)

CentOS7 の docker で n 個の Jenkins 環境を用意した話

概要

CentOS7 の docker で Jenkins 環境を用意した話
コンテナ内の Jenkins にアクセスするにはポートフォワーディングをする必要がある.

また,Jenkins をインストールしたコンテナイメージをコミットしておくことで,n 個の Jenkins 環境を用意に作成できる.
(プログラムごとに Jenkins を用意する手間がへる?)

Jenkins を入れたコンテナイメージを作成する

// コンテナを動かす (今回は CentOS6 のコンテナないに Jenkins を構築する)
# docker run -it --name jenkins01 centos:centos6 /bin/bash
bash-4.1#


// Jenkins をインストールするために必要なものを入れる
bash-4.1# yum -y install wget
bash-4.1# yum -y install java-1.7.0-openjdk.x86_64


// Jenkins をインストールする
bash-4.1# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
bash-4.1# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
bash-4.1# yum -y install jenkins

// OS 起動時にサービスが起動するようにする
bash-4.1# chkconfig jenkins on

// コンテナを一旦終了する
bash-4.1# exit
exit

コンテナをコミットしておく

// コンテナをコミット
# docker commit jenkins01 kawa0810/jenkins:ver1.0

// イメージ作成につかったコンテナは削除する
# docker rm jenkins01

Jenkins にアクセスできるようにコンテナを起動する

// コンテナないの Jenkins にアクセスさせるためにポートフォワーディングする
// ポートフォワーディングは -p <ホストで割り当てるポート>:<コンテナのポート> で指定する
# docker run -it -p 8000:8080 --name jenkins01 kawa0810/jenkins:ver1.0 /bin/bash
bash-4.1#

// Jenkins を起動する
bash-4.1# service jenkins restart
<Jenkins サービスの起動に時間がかかる>

// Jenkins へアクセスするにはブラウザで以下にアクセス
// http://<ホストの IP アドレス>:8000

n 人の Jenkins を用意する

// 「ポートフォワーディングでホストで割り当てるポート」を調整すれば 
// n 個の Jenkins コンテナを用意できる

// 1個目
# docker run -it -p 8000:8080 --name jenkins01 kawa0810/jenkins:ver1.0 /bin/bash
bash-4.1#

// 2個目 (ホストのポートとコンテナ名を変える)
# docker run -it -p 8001:8080 --name jenkins02 kawa0810/jenkins:ver1.0 /bin/bash
bash-4.1#

// 3個目 (ホストのポートとコンテナ名を変える)
# docker run -it -p 8002:8080 --name jenkins03 kawa0810/jenkins:ver1.0 /bin/bash
bash-4.1#

...

[補足] コンテナ内の Jenkins が使うポートを変更する場合

// CentOS では以下のファイルを変更する模様
bash-4.1# emacs /etc/sysconfig/jenkins -nw

// ファイルを変更後に Jenkins を再起動する
bash-4.1# service jenkins restart

CentOS7 で docker を動かした話

概要

CentOS7 の Docker を動かしてみた話です

docker でコンテナを動かす方法

// 以下のコマンドでコンテナが実行を開始する
$ docker run  <実行するイメージ名> <最初に実行するコマンド>

// ex) CentOS6 で /bin/bash を実行する 
$ docker run -it --name centos01 centos:centos6 /bin/bash
bash-4.1# 
// -i: コンテナの標準入力を開く
// -t: tty を確保する
// --name <コンテナ名> : コンテナに任意の名前をつける

コンテナの tty をデタッチ & アタッチする方法

// コンテナの tty をデタッチする: <Ctrl + PQ>
bash-4.1# <Ctrl + PQ>
$ 

// コンテナの tty をアタッチする: docker attach <コンテナ名>
$ docker attach centos01
bash-4.1#

実行中のコンテナを確認する方法

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5e1c0f2955e4        centos:centos6      /bin/bash           7 minutes ago       Up 7 minutes                            centos01     

コンテナをイメージとして保存する方法

$ docker commit <コンテナ名> <リポジトリ名:タグ名>

ex) 
$ docker commit centos01 kawa0810/test:v1.0
ba6d962c25e8b085e197b870f46ffbbd56ac3c138a1895b24b6b2fada4b2a902
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
kawa0810/test       v1.0                ba6d962c25e8        14 seconds ago      212.7 MB

コンテナの停止と開始方法

// コンテナの停止方法
$ docker stop <コンテナ名>

// コンテナの開始方法
$ docker start <コンテナ名>

CentOS7 の docker を準備した話

概要

CentOS7 の Docker を準備した話です

CentOS7 に Docker をインストールする

yum でインストールしたあとサービスを起動する必要がある.

# yum install docker
# systemctl enable docker
# systemctl start docker

Docker のイメージを取得する

Docker Hub から CentOS のイメージを取得する

// Docker Hub を検索する
// ユーザが登録したリポジトリは <ユーザ名>/ をつける決まりになっている
# docker search centos
NAME                                            DESCRIPTION                                     STARS     OFFICIAL   TRUSTED
centos                                          The official build of CentOS.                   517       [OK]       
tianon/centos                                   CentOS 5 and 6, created using rinse instea...   28                   
<以下略>

// イメージを取得する
// 今回は OFFICIAL から centos のイメージを取得
# docker pull centos
Pulling repository centos
87e5b6b3ccc1: Download complete 
504a65221a38: Download complete 
68edf809afe7: Download complete 
511136ea3c5a: Download complete 
5b12ef8fd570: Download complete 

// イメージの一覧を表示する
// CentOS 5, 6, 7 と最新のイメージが配布されている
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos5             504a65221a38        13 days ago         467.1 MB
centos              centos6             68edf809afe7        13 days ago         212.7 MB
centos              centos7             87e5b6b3ccc1        13 days ago         224 MB
centos              latest              87e5b6b3ccc1        13 days ago         224 MB