Docker/Podman開発日誌:リポサーバ
今日の成果は、リポジトリ用のコンテナイメージ2つ作成してリポジトリデータを同期するとこまで終わりました。
実行環境
開発環境は、CnetOS7.9でSElinuxは一時的に無効化ファイヤーウォールは稼働しています。
使用したDockerバージョンは、CEリポジトリからインストールしてきた以下のものです。
docker version
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Dockerインストール
インストール参考にしたサイト
まずは、Docker-CEのリポジトリをダウンロード
sudo curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
sudo sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo
sudo yum --enablerepo=docker-ce-stable -y install docker-ce
dockerをサービスを起動する。
sudo systemctl enable --now docker
起動状態を確認
sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2021-07-18 09:38:10 JST; 7s ago
Docs: https://docs.docker.com
Main PID: 31527 (dockerd)
Tasks: 10
Memory: 39.9M
CGroup: /system.slice/docker.service
└─31527 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
コンテナイメージの取得
Dockerのインストールと正常稼働が確認できたので、コンテナイメージを取得します。
ますは、CnetOS7のコンテナイメージを取得
イメージ取得と合わせてコンテナ作成およびアップデートを行う
sudo docker run -it --name 7latest centos:centos7 /bin/bash -c "yum -y update;cat /etc/redhat-release"
最終行でOSのリリースバージョンが出力されるので確認する。
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos7
## 途中アップデートログが出力されます。
CentOS Linux release 7.9.2009 (Core)
7と同様のコマンドでCentOS8のコンテナを準備
sudo docker run -it --name 8latest centos:centos8 /bin/bash -c "dnf -y update;cat /etc/redhat-release"
最終行でOSのリリースバージョンが出力されるので確認する。
Unable to find image 'centos:centos8' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos8
## 途中アップデートログが出力されます。
CentOS Linux release 8.4.2105
コンテナの状態を確認
sudo docker ps -a
コンテナ一覧
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b6fc4c5ed92 centos:centos8 "/bin/bash -c 'dnf -…" About a minute ago Exited (0) 32 seconds ago 8latest
4aa5acfa25ee centos:centos7 "/bin/bash -c 'yum -…" 2 minutes ago Exited (0) About a minute ago 7latest
コンテナイメージを作成
アップデートして最新化した2つのコンテナを再利用するためコンテナイメージ化を行う。
sudo docker commit 7latest centos:7latest
sudo docker commit 8latest centos:8latest
イメージを確認する。
sudo docker images
先ほどコミットしたものが一覧に並んでいるのが確認できます。
アップデートして倍以上に膨れ上げってます・・・・
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 8latest 375fd485fd63 27 seconds ago 514MB
centos 7latest 396610f1ba32 32 seconds ago 435MB
centos centos8 300e315adb2f 7 months ago 209MB
centos centos7 8652b9f0cb4c 8 months ago 204MB
CnetOS Stream 8 イメージを作成
CentOS Stream 8のコンテナイメージを探すのが面倒だったので一旦CentOS8のコンテナイメージを取得してこれを公式の手順に従ってStream8化する事にしました。
参考にしたサイト(公式の手順探せなかったのでさくらサーバのを見本にしました)
新しくコンテナを作成してログインする。
sudo docker run --name Stream8 -it centos:8latest /bin/bash
ログインしたらさくらのクラウドの手順に従いCentOS8をCentOS Stream 8にアップグレード(?)する。
dnf -y install centos-release-stream
dnf -y swap centos-{linux,stream}-repos
dnf -y distro-sync
アップグレード後にリリースバージョンを確認
cat /etc/redhat-release
# Stream になっている
CentOS Stream release 8
念のためdnfのメタデータを削除して最新化を行う
dnf clean all
dnf update -y
Stream8にアップグレードされたのでコンテナイメージを作成
sudo docker commit Stream8 centos:s8latest
イメージを確認する。
sudo docker images
以下のように追加を確認できる
REPOSITORY TAG IMAGE ID CREATED SIZE
centos s8latest 93398a196122 3 seconds ago 768MB
centos 8latest 375fd485fd63 6 minutes ago 514MB
centos 7latest 396610f1ba32 6 minutes ago 435MB
centos centos8 300e315adb2f 7 months ago 209MB
centos centos7 8652b9f0cb4c 8 months ago 204MB
1G2手が届きそうです・・・コンテナとして大きめなのか(基準がわからん)?
ベースとなるコンテナイメージの作成が完了したので、このイメージを使いリポジトリサーバイメージを作成する。
CnetOS7 リポジトリサーバのコンテナイメージ作成
まずはCentOS7から作成する7latestイメージを使いコンテナを起動
sudo docker run --name 7repo -it centos:7latest /bin/bash
リポジトリサーバ構成用のパッケージをインストール
yum -y install yum-utils createrepo
※yum-utilsは、最初から入ってます。createrepoはいらなそう・・・
CnetOS7の作業は一旦これで完了
Stream8のリポジトリサーバのコンテナイメージ作成
CentOS7同様にCentOS Stream 8 も作成する
sudo docker run --name s8repo -it centos:s8latest /bin/bash
リポジトリサーバ構成用のパッケージをインストール
dnf -y install yum-utils createrepo
CnetOS8 の作業も一旦ここで完了
三度コンテナイメージ作成
リポジトリサーバに必要なものは、全てインストールできたのでこの状態でコンテナイメージファイルを作成する。
コンテナを確認
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f48583de8ab centos:s8latest "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago s8repo
ef4970b19e3e centos:7latest "/bin/bash" 16 minutes ago Exited (0) 10 minutes ago 7repo
d30e85a3cdda centos:8latest "/bin/bash" 24 minutes ago Exited (0) 20 minutes ago Stream8
6b6fc4c5ed92 centos:centos8 "/bin/bash -c 'dnf -…" 35 minutes ago Exited (0) 34 minutes ago 8latest
4aa5acfa25ee centos:centos7 "/bin/bash -c 'yum -…" 36 minutes ago Exited (0) 35 minutes ago 7latest
先ほど作業したコンテナをもとにイメージファイルを作成
sudo docker commit 7repo centos:7repo
sudo docker commit s8repo centos:s8repo
コンテナイメージを確認
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos s8repo 7f5b393025e3 56 seconds ago 816MB
centos 7repo cc7722613ca8 About a minute ago 559MB
centos s8latest 93398a196122 23 minutes ago 768MB
centos 8latest 375fd485fd63 29 minutes ago 514MB
centos 7latest 396610f1ba32 29 minutes ago 435MB
centos centos8 300e315adb2f 7 months ago 209MB
centos centos7 8652b9f0cb4c 8 months ago 204MB
ホストディレクトリを共有してコンテナ起動
リポジトリサーバコンテナイメージをリポジトリデータを保管するホストのディレクトリをマウントしてコンテナを起動する。
マウント先のディレクトリを作成
sudo mkdir -pv /srv/nginx/html/centos/7/x86_64/os
sudo mkdir -pv /srv/nginx/html/centos/8/x86_64/os
作成したディレクトリをマウントしてコンテナを起動
sudo docker run -itd -v /srv/nginx/html/centos/7:/srv --name repo7srv centos:7repo /bin/bash
sudo docker run -itd -v /srv/nginx/html/centos/8:/srv --name repo8srv centos:s8repo /bin/bash
コンテナが起動している事を確認
sudo docker ps
## 2つのコンテナが稼働中
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53d6966033cd centos:s8repo "/bin/bash" 6 seconds ago Up 6 seconds repo8srv
9b6f35044bf3 centos:7repo "/bin/bash" 7 seconds ago Up 7 seconds repo7srv
コンテナにがわでホスト側のデータが見えるかを確認
sudo docker exec repo7srv /bin/bash -c "df -h;ls -l /srv"
sudo docker exec repo8srv /bin/bash -c "df -h;ls -l /srv"
実行結果(例示したのは、Stream 8)
Filesystem Size Used Avail Use% Mounted on
overlay 45G 2.9G 42G 7% /
tmpfs 64M 0 64M 0% /dev
tmpfs 919M 0 919M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/mapper/rhel8-repository 180G 9.4G 171G 6% /srv
/dev/mapper/g--sub-var 45G 2.9G 42G 7% /etc/hosts
tmpfs 919M 0 919M 0% /proc/acpi
tmpfs 919M 0 919M 0% /proc/scsi
tmpfs 919M 0 919M 0% /sys/firmware
total 0
drwxr-xr-x. 3 root root 28 Jul 18 05:55 x86_64
```
初回リポジトリの連携
コンテナから正常にリポジトリデータが取得できる事を確認する
CentOS Stream 8 コンテナにログイン
sudo docker attach repo8srv
CentOS Stream 8 BaseOSリポジトリを同期
reposync -p /srv/x86_64/os/ --repo=baseos --download-metadata --newest-only --delete
ctrl+pqでデタッチする。
CentOS 7 コンテナにログイン
sudo docker attach repo7srv
CentOS 7ベースリポジトリを同期
reposync -p /srv/x86_64/os/ --repo=base --download-metadata --newest-only --delete
Stream8同様にコマンドでデタッチ
ホストからの実行
DockerホストからもDocker execでコマンドが正常に実行される事を確認します。
docker exec repo7srv reposync -p /srv/x86_64/os/ --repo=updates --download-metadata --newest-only --delete
docker exec repo8srv reposync -p /srv/x86_64/os/ --repo=appstream --download-metadata --newest-only --delete
事業が本日のdockerの勉強兼、リポサーバ開発作業です。
明日は、Dockerfileを使ってこの作業を構成管理出来るようするのと、再起動次に自動起動する設定をまだわかっていないのでその辺の理解を深めようと考えてます。
それと作成したリポサーバのコンテナイメージをtarボール化してこの後に作る予定のAnsibleの資材にする作業をしようと思います。
以上、お疲れ様でした。