dockerを使用する場合、通常はベースイメージを使用します。ここでは、例としてセントを使用します。通常、公式のセントをダウンロードするには、docker searchcentosとdockerpull centosを使用し、それをベースイメージとして使用して独自のdockerイメージを作成します。
私のような独自のcentosベースイメージを作成したいと思うかもしれませんが、rootfsを生成するためにベースイメージに必要な関連ファイルを抽出する方法がわからないため、開始できません。これがrootfsを生成する方法です(ネットワークから方法を見つけて、個人的な理解と要約を追加します):
まず、rootfsのルートディレクトリとして使用するディレクトリを作成し、rpm操作のルートディレクトリをrootfsのディレクトリに設定します。
[ root@localhost ~]# mkdir my_rootfs
[ root@localhost ~]# cd my_rootfs/[root@localhost my_rootfs]# cd ..[root@localhost ~]# rpm --root /root/my_rootfs/--initdb #rpm操作のルートディレクトリを設定します
次のWebサイトにアクセスします。[http://vault.centos.org/](https://links.jianshu.com/go?to=http%3A%2F%2Fvault.centos.org%2F)必要なcentosバージョンに応じて、対応するパッケージディレクトリを見つけ、centos-releaseパッケージを見つけてローカルにダウンロードし、上記の指定のパッケージをインストールします。 rootfsディレクトリ、ここで使用されている例は次のとおりです。
[ root@localhost ~]# wget http://vault.centos.org/7.5.1804/os/x86_64/Packages/centos-release-7-5.1804.el7.centos.x86_64.rpm
- - 2019- 09- 0122:22:57- - http://vault.centos.org/7.5.1804/os/x86_64/Packages/centos-release-7-5.1804.el7.centos.x86_64.rpm
Resolving vault.centos.org(vault.centos.org)...108.61.16.227
Connecting to vault.centos.org(vault.centos.org)|108.61.16.227|:80... connected.
HTTP request sent, awaiting response...200 OK
Length:24400(24K)[application/x-rpm]
Saving to: ‘centos-release-7-5.1804.el7.centos.x86_64.rpm’
100 %[=============================================================================================>]24,40033.4KB/s in0.7s
2019- 09- 0122:22:58(33.4 KB/s)- ‘centos-release-7-5.1804.el7.centos.x86_64.rpm’ saved [24400/24400][root@localhost ~]#
[ root@localhost ~]# rpm -ivh --nodeps --root /root/my_rootfs/--package./centos-release-7-5.1804.el7.centos.x86_64.rpm #ここにインストールするときは、依存関係を無視する必要があります.
warning:./centos-release-7-5.1804.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...1:centos-release-7-5.1804.el7.cento################################# [100%]
warning:%post(centos-release-7-5.1804.el7.centos.x86_64) scriptlet failed, exit status 127[root@localhost ~]#
対応するリポジトリを使用できるようにローカルyumソースを構成してから、yumパッケージを上記のrootfsディレクトリにインストールします。ここでyumパッケージをインストールする場合、依存関係を無視できないことに注意してください。
# yumsourceの構成プロセスは無視されます。Centosにはyumsourceが付属しており、構成なしで使用できます。
[ root@localhost my_rootfs]# yum --installroot=/root/my_rootfs/ install yum
...... # コンテンツが多すぎるため、ここではインストールプロセスを省略しています。
Total 1.6 MB/s |51 MB 00:00:30
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid :"CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>"
Fingerprint:6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-5.1804.el7.centos.x86_64(installed)
From :/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
Running transaction check
......
Complete![root@localhost my_rootfs]#ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
yumパッケージのインストールが完了すると、ディレクトリサイズは次のようになります。/root/my_rootfs/var/cacheの下のサイズは86Mで、これらのコンテンツはyumのインストール時のキャッシュであり、クリーンアップできますが、削除することはお勧めしません。ディレクトリをクリーンアップするための暴力的な方法に対応します。次のステップでクリーンアップします。
[ root@localhost my_rootfs]# du -hs ./* | sort -k1h
0 . /bin
0 . /boot
0 . /dev
0 . /home
0 . /lib
0 . /lib64
0 . /media
0 . /mnt
0 . /opt
0 . /proc
0 . /root
0 . /run
0 . /sbin
0 . /srv
0 . /sys
0 . /tmp
1.9 M ./etc
94 M ./var
265 M ./usr
[ root@localhost my_rootfs]#
[ root@localhost var]# du -hxa . | sort -k1h | tail
31 M ./cache/yum/x86_64/7/base/gen
37 M ./cache/yum/x86_64/7/base
40 M ./cache/yum/x86_64/7/updates/gen
40 M ./cache/yum/x86_64/7/updates/gen/primary_db.sqlite
48 M ./cache/yum/x86_64/7/updates
86 M ./cache
86 M ./cache/yum
86 M ./cache/yum/x86_64
86 M ./cache/yum/x86_64/7
94 M .
[ root@localhost var]#
chrootすることにより、rootfsに対応するベースcentosに切り替えてから、不要なyumキャッシュをクリーンアップします。
[ root@localhost my_rootfs]# mount --rbind /dev dev/[root@localhost my_rootfs]# mount --rbind /proc proc/[root@localhost my_rootfs]# mount --rbind /sys sys/[root@localhost my_rootfs]# chroot /root/my_rootfs/
bash-4.2#
bash-4.2# yum clean all #yumキャッシュクリーニングを実行します
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
Cleaning up list of fastest mirrors
bash-4.2#
bash-4.2# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
bash-4.2# du -hsx ./* | sort -k1h | tail
du: cannot access ‘./proc/13246/task/13246/fd/3’: No such file or directory
du: cannot access ‘./proc/13246/task/13246/fdinfo/3’: No such file or directory
du: cannot access ‘./proc/13246/fd/3’: No such file or directory
du: cannot access ‘./proc/13246/fdinfo/3’: No such file or directory
0 . /proc
0 . /root
0 . /run
0 . /sbin
0 . /srv
0 . /sys
0 . /tmp
1.9 M ./etc
8.0 M ./var
265 M ./usr
bash-4.2#
bash-4.2# exit
exit
[ root@localhost my_rootfs]#
umountの前にproc、sys、devをバインドし、不要なmanヘルプファイルを削除します。最後に/ root / my_rootfs / *を圧縮してパッケージ化し、生成されたmy_rootfs.tar.gzがターゲットファイルです。
[ root@localhost my_rootfs]# umount -l proc
[ root@localhost my_rootfs]# umount -l dev
[ root@localhost my_rootfs]# umount -l sys
[ root@localhost my_rootfs]# mount | grep my_rootfs
[ root@localhost my_rootfs]#
[ root@localhost my_rootfs]# find .-iname man -exec rm -rf {} \;[root@localhost my_rootfs]# find .-iname man
[ root@localhost my_rootfs]# tar -czvf my_rootfs.tar.gz * #パッケージ化するときは、必要なものだけをパッケージ化し、ディレクトリを含めないようにしてください
......[ root@localhost my_rootfs]# tar -tvf my_rootfs.tar.gz | head
# パッケージング後、タールを使用できます-コンテンツを表示するには、tvfコマンドを使用します。コンテンツは次の形式である必要があります。
lrwxrwxrwx root/root 02019-09-0122:33 bin -> usr/bin
dr-xr-xr-x root/root 0 2018-04-11 12:59 boot/
drwxr-xr-x root/root 0 2019-09-01 22:34 dev/-rw-r--r-- root/root 02019-09-0122:34 dev/null
drwxr-xr-x root/root 0 2019-09-01 22:34 etc/
drwxr-xr-x root/root 02019-09-0122:34 etc/pki/
drwxr-xr-x root/root 02019-09-0122:26 etc/pki/rpm-gpg/-rw-r--r-- root/root 16902018-04-2900:35 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7-rw-r--r-- root/root 10042018-04-2900:35 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7-rw-r--r-- root/root 16902018-04-2900:35 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7[root@localhost my_rootfs]# mv my_rootfs.tar.gz ../[root@localhost my_rootfs]# cd ..[root@localhost ~]# ls -lht my_rootfs.tar.gz
- rw-r--r--.1 root root 81M Sep 421:47 my_rootfs.tar.gz
[ root@localhost ~]#
では、このmy_rootfs.tar.gzを使用して、独自のcentosベースイメージを構築できますか?
次の記事を参照してください:** centosrootfsに基づいて独自のベースイメージを作成する**
この記事はオリジナルです。再印刷のソースを示してください