centosrootfsを作成する簡単な実装

dockerを使用する場合、通常はベースイメージを使用します。ここでは、例としてセントを使用します。通常、公式のセントをダウンロードするには、docker searchcentosとdockerpull centosを使用し、それをベースイメージとして使用して独自のdockerイメージを作成します。

私のような独自のcentosベースイメージを作成したいと思うかもしれませんが、rootfsを生成するためにベースイメージに必要な関連ファイルを抽出する方法がわからないため、開始できません。これがrootfsを生成する方法です(ネットワークから方法を見つけて、個人的な理解と要約を追加します):

1.

まず、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操作のルートディレクトリを設定します

2.

次の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 ~]#

3.

対応するリポジトリを使用できるようにローカル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

4.

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]#

5.

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]#      

6.

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に基づいて独自のベースイメージを作成する**

この記事はオリジナルです。再印刷のソースを示してください

Recommended Posts

centosrootfsを作成する簡単な実装
CentOS8.0ネットワーク構成の実装
CentOS6でのRHCSクラスターの簡単な実践
Centos8静的IP構成の実装について説明する
CentOS8のグラフィカルインストール
centos7へのグラファイトの展開
Oracle11gのCentos7サイレントインストール