投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2022年6月30日木曜日

【Docker Linux CentOS 7】systemctlによる制御が効くコンテナの作成と基本的サービスの追加


(概要)
イメージはCentOS7公式のものを利用し、特権で動作するDockerコンテナを起動する。
これにより、systemctlによる制御が効くコンテナが動作する。

さらに基本的なサービスをいくつか追加している。


(注意)
以下の手順では、安全なプライベートネットワーク内のホストマシンで行う。



■ システムの準備1〜コンテナ起動、アップデート、共通設定

◯ コンテナを起動(Dockerホストにおいて)

・centos:centos7公式イメージを利用し、コンテナを起動した。

# docker run --privileged -d --net MYNETWORK --dns 192.168.1.1 --name basic_centos7 centos:centos7 /sbin/init

(以下の設定を行うためには必須)
--privileged 特権でコンテナを動作させる
/sbin/init initを起動する。

(オプション)
--net MYNETWORK 指定したDockerネットワークを利用する。(リモート接続しないなら不要)
--dns 192.168.1.1 コンテナに利用させるリゾルバを指定する。(ホストのものを使うなら不要)


「--net MYNETWORK」は、後でコンテナ外からSSH接続するため設定している。
予めDockerネットワークを作成しておく必要がある。(ここでは解説していない)

Dockerネットワークを使用しない場合、目的を達するためには別途PORTのオープンが必要になる。
PORTを開ける場合、LAN内の安全なネットワークに接続したホストマシンを使用する必要がある。
さもなければ、インターネット側にPORTが開いて攻撃を受けてしまう。


◯ 起動したコンテナに接続(Dockerホストにおいて)

# docker exec -it basic_centos7 /bin/bash 
[root@6cbf3c357f18 /]#

◯ タイムゾーンの設定

 [root@6cbf3c357f18 ~]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


◯ システムの更新

・システムをアップデートした。

[root@6cbf3c357f18 /]# yum update -y


・一旦コンテナを終了した。

[root@6cbf3c357f18 /]# poweroff


・コンテナを再起動した。(Dockerホストにおいて)

# docker start basic_centos7


・コンテナに再接続した。(Dockerホストにおいて)

# docker exec -it basic_centos7 /bin/bash 
[root@6cbf3c357f18 /]#


■ システムの準備2〜基本的なソフトウェアの導入

◯ rsyslogのインストール

[root@6cbf3c357f18 ~]# yum install rsyslog
Installed:
  rsyslog.x86_64 0:8.24.0-57.el7_9.3

Dependency Installed:
  libestr.x86_64 0:0.1.9-2.el7                         libfastjson.x86_64 0:0.99.4-3.el7                         logrotate.x86_64 0:3.8.6-19.el7

Complete!

・自動起動設定〜起動〜状態の確認

[root@6cbf3c357f18 ~]# systemctl enable rsyslog
[root@6cbf3c357f18 ~]# systemctl start rsyslog
[root@6cbf3c357f18 ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-06-30 08:18:16 JST; 19s ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 16658 (rsyslogd)
   CGroup: /docker/6cbf3c357f18b5b7f8c52e13295eeca959c9279da571b5d1260ac2850640962a/system.slice/rsyslog.service
           └─16658 /usr/sbin/rsyslogd -n
           ‣ 16658 /usr/sbin/rsyslogd -n

Jun 30 08:18:16 6cbf3c357f18 systemd[1]: Starting System Logging Service...
Jun 30 08:18:16 6cbf3c357f18 rsyslogd[16658]:  [origin software="rsyslogd" swVersion="8.24.0-57.el7_9.3" x-pid="16658" x-info="http://www.rsyslog.com"] start
Jun 30 08:18:16 6cbf3c357f18 systemd[1]: Started System Logging Service.

◯ postfixのインストール

[root@6cbf3c357f18 ~]# yum install postfix
Installed:
  postfix.x86_64 2:2.10.1-9.el7

Dependency Installed:
  mariadb-libs.x86_64 1:5.5.68-1.el7                                                 systemd-sysv.x86_64 0:219-78.el7_9.5

Complete!

・ipv6を利用しない設定を行った。

[root@6cbf3c357f18 ~]# postconf -e inet_protocols=ipv4


・自動起動設定〜起動〜状態の確認

[root@6cbf3c357f18 ~]# systemctl enable postfix
[root@6cbf3c357f18 ~]# systemctl start postfix
[root@6cbf3c357f18 ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-06-30 08:22:45 JST; 2s ago
  Process: 16742 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 16741 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 16737 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 16813 (master)
   CGroup: /docker/6cbf3c357f18b5b7f8c52e13295eeca959c9279da571b5d1260ac2850640962a/system.slice/postfix.service
           ├─16813 /usr/libexec/postfix/master -w
           ├─16814 pickup -l -t unix -u
           └─16815 qmgr -l -t unix -u
           ‣ 16813 /usr/libexec/postfix/master -w

Jun 30 08:22:44 6cbf3c357f18 systemd[1]: Starting Postfix Mail Transport Agent...
Jun 30 08:22:45 6cbf3c357f18 postfix/postfix-script[16811]: starting the Postfix mail system
Jun 30 08:22:45 6cbf3c357f18 postfix/master[16813]: daemon started -- version 2.10.1, configuration /etc/postfix
Jun 30 08:22:45 6cbf3c357f18 systemd[1]: Started Postfix Mail Transport Agent.

◯ crondのインストール

[root@6cbf3c357f18 ~]# yum install cronie
Installed:
  cronie.x86_64 0:1.4.11-24.el7_9

Dependency Installed:
  cronie-anacron.x86_64 0:1.4.11-24.el7_9                                            crontabs.noarch 0:1.11-6.20121102git.el7

Complete!

・自動起動設定〜起動〜状態の確認

[root@6cbf3c357f18 ~]# systemctl enable crond
[root@6cbf3c357f18 ~]# systemctl start crond
[root@6cbf3c357f18 ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-06-30 08:28:42 JST; 3s ago
 Main PID: 16873 (crond)
   CGroup: /docker/6cbf3c357f18b5b7f8c52e13295eeca959c9279da571b5d1260ac2850640962a/system.slice/crond.service
           └─16873 /usr/sbin/crond -n
           ‣ 16873 /usr/sbin/crond -n

Jun 30 08:28:42 6cbf3c357f18 systemd[1]: Started Command Scheduler.
Jun 30 08:28:42 6cbf3c357f18 crond[16873]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 80% if used.)
Jun 30 08:28:42 6cbf3c357f18 crond[16873]: (CRON) INFO (running with inotify support)


◯ sshdのインストール

 コンテナ外部からsshによる接続をしない場合は不要である。

[root@6cbf3c357f18 ~]# yum install openssh-server


・自動起動設定〜起動〜状態の確認

[root@6cbf3c357f18 ~]# systemctl enable sshd
[root@6cbf3c357f18 ~]# systemctl start sshd
[root@6cbf3c357f18 ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-06-30 07:18:56 JST; 11s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 3820 (sshd)
   CGroup: /docker/6cbf3c357f18b5b7f8c52e13295eeca959c9279da571b5d1260ac2850640962a/system.slice/sshd.service
           └─3820 /usr/sbin/sshd -D
           ‣ 3820 /usr/sbin/sshd -D

Jun 30 07:18:56 6cbf3c357f18 systemd[1]: Starting OpenSSH server daemon...
Jun 30 07:18:56 6cbf3c357f18 sshd[3820]: Server listening on 0.0.0.0 port 22.
Jun 30 07:18:56 6cbf3c357f18 sshd[3820]: Server listening on :: port 22.
Jun 30 07:18:56 6cbf3c357f18 systemd[1]: Started OpenSSH server daemon.

・rootパスワードの設定
[root@6cbf3c357f18 ~]# passwd root
Changing password for user root.
New password:


◯ ネットワーク用ユーティリティのインストール

ip、nstatなどのコマンドが利用できるようになる。

[root@6cbf3c357f18 ~]# yum install iproute



■ ロケール関係のエラー回避のための作業

 あとで、ソースから何かインストール(たとえばOpenSSLのインストール)するときに次のように警告されることを回避するための作業である。

 警告とは次のようなものである。
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LC_PAPER = "ja_JP.UTF-8",
        LC_ADDRESS = "ja_JP.UTF-8",
        LC_MONETARY = "ja_JP.UTF-8",
        LC_NUMERIC = "ja_JP.UTF-8",
        LC_TELEPHONE = "ja_JP.UTF-8",
        LC_IDENTIFICATION = "ja_JP.UTF-8",
        LC_MEASUREMENT = "ja_JP.UTF-8",
        LC_NAME = "ja_JP.UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

(回避策)

・次のようにファイル内の特定の行をコメントアウトしておく。

[root@e8394b6f7b13 /]# vi /etc/yum.conf
#override_install_langs=en_US.utf8

・さらに次のパッケージの再インストールを行っておく。

# yum reinstall glibc-common
Total download size: 12 M
Installed size: 216 M

Installed:
  glibc-common.x86_64 0:2.17-326.el7_9

Complete!


■ ここまで構築してきたコンテナのイメージを作成しておく

◯ イメージの作成

・コンテナを終了した。

[root@6cbf3c357f18 /]# poweroff


・コミットコマンドを実行してイメージを作成した。(Dockerホストにおいて)

# docker commit basic_centos7_priv image_centos7_basic_priv_202207XX
basic_centos7_priv…ターゲットのコンテナ名称
image_centos7_basic_priv_202207XX…作成するイメージにつける名前

・イメージの確認

# docker image list
REPOSITORY                                                         TAG       IMAGE ID       CREATED         SIZE
image_centos7_basic_priv_202207XX                                  latest    xxxxxxxxxxxx   9 seconds ago   648MB


◯ 作成したイメージからコンテナを始動する方法(Dockerホストにおいて)

・作成したイメージを指定してコンテナの始動

 今回作成したイメージは特権で動作するコンテナのものなので、privilegedを付ける必要がある。また、冒頭のコンテナ作成手順の通り、initから起動する必要がある。

# docker run --privileged -d --net MYNETWORK --dns 192.168.1.1 --name newcontainer_centos7_priv image_centos7_basic_priv_202207XX /sbin/init

 パラメーターの意味は、冒頭のコンテナ作成手順と同じ。


・始動したコンテナに接続する

# docker exec -it ldap_centos7_priv /bin/bash 
[root@819dfc82f27a /]#


以上


<参考>
・6.50. IPRoute2-3.5.1
< http://linuxjf.osdn.jp/JFdocs/LFS-BOOK/chapter06/iproute2.html > 2022年7月4日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad