見出し画像

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の資材にする作業をしようと思います。

以上、お疲れ様でした。

いいなと思ったら応援しよう!