LoginSignup
0
1

More than 3 years have passed since last update.

Docker(Podman) 向け base image を自作する

Last updated at Posted at 2019-04-27

ISO だけしかなくて、インターネットにつながっていない環境はよくあるはずなので。
CentOS7 の base image を自作する手順。
Docker はインストール済み。ISO は /tmp/iso に mount 済みの前提

yum 用の定義作成

以下内容で、yum 用の定義を作る

base.repo
[main]
gpgcheck=0

[base]
name=CentOS-7 - Base
baseurl=file:///tmp/iso

name とか baseurl とかは環境に合わせて読み替える

ベース作成

$ mkdir /tmp/base_centos7 <-- ベースインストール先
$ sudo yum -c /tmp/base.repo --disablerepo="*" --enablerepo="base" --installroot=/tmp/base_centos7 -y groupinstall Core

デバイスファイル作成

cd /tmp/base_centos7/dev
sudo mknod -m 666 null c 1 3
sudo mknod -m 666 zero c 1 5
sudo mknod -m 666 random c 1 8
sudo mknod -m 666 urandom c 1 9
sudo mkdir -m 755 pts
sudo mkdir -m 1777 shm
sudo mknod -m 666 tty c 5 0
sudo mknod -m 666 tty0 c 4 0
sudo mknod -m 666 tty1 c 4 1
sudo mknod -m 666 tty2 c 4 2
sudo mknod -m 666 tty3 c 4 3
sudo mknod -m 666 tty4 c 4 4
sudo mknod -m 600 console c 5 1
sudo mknod -m 666 full c 1 7
sudo mknod -m 600 initctl p
sudo mknod -m 666 ptmx c 5 2

確認

sudo chrooot /tmp/base_centos7 /bin/bash

お好みで

  • base image としてインストールしておきたいパッケージなどのインストール

selinux の無効化

sudo /tmp/base_centos7 /bin/bash
vi /etc/selinux/config
⇒ SELINUX=disabled に書き換え

docker に base image の登録

cd /tmp/base_centos7
sudo tar -c . | docker import - centos7

不要サービスの停止

このままだといらないサービスが起動するので、サービスの無効化をする

systemd を使えるようにコンテナ起動して、コンテナに入る

docker run -d --privileged centos7 /sbin/init
docker exec -it [コンテナ ID] /bin/bash

最初はこんな感じ

# systemctl status
● 313ee2ca2439
    State: degraded
     Jobs: 0 queued
   Failed: 4 units
    Since: Sun 2019-09-01 03:03:58 UTC; 27s ago
   CGroup: /system.slice/docker-313ee2ca2439975895f9a51edaf67235c240f2e106b53764c2d67cbf7dba6f1e.scope
           |-    1 /sbin/init
           |-1987 /bin/bash
           |-2044 systemctl status
           |-2045 systemctl status
           --system.slice
             |-systemd-udevd.service
             | -33 /usr/lib/systemd/systemd-udevd
             |-polkit.service
             | -234 /usr/lib/polkit-1/polkitd --no-debug
             |-tqtuned.service
             | -1611 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
             |-systemd-journald.service
             | -18 /usr/lib/systemd/systemd-journald
             |-sshd.service
             | -1607 /usr/sbin/sshd -D
             |-crond.service
             | -269 /usr/sbin/crond -n
             |-NetworkManager.service
             | -804 /usr/sbin/NetworkManager --no-daemon
             |-systemd-hostnamed.service
             | -840 /usr/lib/systemd/systemd-hostnamed
             |-rsyslog.service
             | -1612 /usr/sbin/rsyslogd -n
             |-firewalld.service
             | - 306 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
             | -2043 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
             |-postfix.service
             | -1833 /usr/libexec/postfix/master -w
             | -1841 pickup -l -t unix -u
             | -1842 qmgr -l -t unix -u
             |-dbus.service
             | -237 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             |-system-getty.slice
             | -getty@tty1.service
             |   -290 /sbin/agetty --noclear tty1 linux
             |-systemd-logind.service
               -265 /usr/lib/systemd/systemd-logind

systemd-journald.service と dbus.service 以外は全部落とす
(ubi7 を参考)

systemctl stop systemd-logind.service
systemctl disable systemd-logind.service

systemctl stop system-getty.slice

systemctl stop postfix.service
systemctl disable postfix.service

systemctl stop firewalld.service
systemctl disable firewalld.service

systemctl stop rsyslog.service
systemctl disable rsyslog.service

systemctl stop systemd-hostnamed.service
systemctl disable systemd-hostnamed.service

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service

systemctl stop crond.service
systemctl disable crond.service

systemctl stop sshd.service
systemctl disable sshd.service

systemctl stop tuned.service
systemctl disable tuned.service

systemctl stop polkit.service
systemctl disable polkit.service

systemctl stop systemd-udevd-control.socket
systemctl stop systemd-udevd-kernel.socket
systemctl stop systemd-udevd.service

systemctl disable systemd-udevd-control.socket
systemctl disable systemd-udevd-kernel.socket
systemctl disable systemd-udevd.service

commit して変更をベースイメージに反映

docker commit [コンテナ ID] centos7

参考

ここが一番詳しい
https://knowledge.sakura.ad.jp/2226/

公式
https://docs.docker.com/develop/develop-images/baseimages/
http://docs.docker.jp/engine/userguide/eng-image/baseimages.html

RHEL 系コンテナを作成するシェル
https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1