(概要)
イメージは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.3Dependency 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.el7Complete!
・自動起動設定〜起動〜状態の確認
[root@6cbf3c357f18 ~]# systemctl enable rsyslog
[root@6cbf3c357f18 ~]# systemctl start rsyslog
[root@6cbf3c357f18 ~]# systemctl status rsyslog
● rsyslog.service - System Logging ServiceLoaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2022-06-30 08:18:16 JST; 19s agoDocs: 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 -nJun 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"] startJun 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.el7Dependency Installed:mariadb-libs.x86_64 1:5.5.68-1.el7 systemd-sysv.x86_64 0:219-78.el7_9.5Complete!
・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 AgentLoaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)Active: active (running) since Thu 2022-06-30 08:22:45 JST; 2s agoProcess: 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 -wJun 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 systemJun 30 08:22:45 6cbf3c357f18 postfix/master[16813]: daemon started -- version 2.10.1, configuration /etc/postfixJun 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_9Dependency Installed:cronie-anacron.x86_64 0:1.4.11-24.el7_9 crontabs.noarch 0:1.11-6.20121102git.el7Complete!
・自動起動設定〜起動〜状態の確認
[root@6cbf3c357f18 ~]# systemctl enable crond
[root@6cbf3c357f18 ~]# systemctl start crond
[root@6cbf3c357f18 ~]# systemctl status crond
● crond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2022-06-30 08:28:42 JST; 3s agoMain PID: 16873 (crond)CGroup: /docker/6cbf3c357f18b5b7f8c52e13295eeca959c9279da571b5d1260ac2850640962a/system.slice/crond.service└─16873 /usr/sbin/crond -n‣ 16873 /usr/sbin/crond -nJun 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 daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2022-06-30 07:18:56 JST; 11s agoDocs: 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 -DJun 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 MInstalled size: 216 MInstalled:glibc-common.x86_64 0:2.17-326.el7_9Complete!
■ ここまで構築してきたコンテナのイメージを作成しておく
◯ イメージの作成
・コンテナを終了した。
[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 SIZEimage_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日