はじめに
docker
docker-compose
centos8
などのキーワードを利用して、Google先生に尋ねると、大体出てくる記事はCentOSに
dockerとかdocker-composeをインストールする方法が出てくる。
CentOS8からはyumではなくdnfコマンドによってパッケージ管理を行う仕組みが導入されているのだとか。
そんな話しを2020年になるまで知らなかった。。。(正確には知っていても試してみなかった。。。)
なので、せっかくdockerを少しずつ勉強しているので、お手軽にCentOS8の環境を用意して試してみようと思ったところで、いきなり少しつまずいたので、その部分も踏まえて新年(2020年)一発目のQiita記事としてまとめました。
最小の設定でCentOS8を起動して試してみる
ディレクトリ構成と各設定内容
最小の設定とはいえ、後々yum -y update
みたいなものと同じであろうdnf -y update
みたいなこともDockerfile内で指定しようと思っているので、Dockerfileは作成する。
.
├── Dockerfile
└── docker-compose.yml
version: '3'
services:
centos8:
container_name: "centos8"
build: ./
FROM centos:8
動作検証
とりあえずBuild
$ docker-compose build --no-cache
up
$ docker-compose up -d
コンテナにアクセスしてみる
$ docker-compose exec centos8 bash
ERROR: No container found for centos8_1
・・・ん?
エラーが出てしまい、コンテナにアクセスできない状況となっている。
ログを確認してみる。
$ docker-compose logs
Attaching to centos8
ログにはエラーが出ていないように見える。
プロセスを確認してみる。
$ docker-compose ps
Name Command State Ports
------------------------------------
centos8 /bin/bash Exit 0
正常に終了しています。みたいなステータスになっている。
どうやらdocker-compose.ymlファイルのオプションにtty
をtrue
で設定を追加する必要があるようです。
docker-compose up したコンテナを起動させ続ける方法の記事を参考にしました。
version: '3'
services:
centos8:
container_name: "centos8"
build: ./
tty: true # ← 追記
再度コンテナを起動し直して、コンテナにアクセスしなおしてみる。
$ docker-compose down
$ docker-compose up -d
$ docker-compose exec centos8 bash
$ docker-compose exec centos8 bash
[root@ac4fc975a84d /]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
確認できました。
とりあえず、これでCentOS8の確認ができる準備が整ったので、yum
が使えなくなっているのかぐらいは検証してみようと思います。
yumは使えないのか?
# yum -y update
Failed to set locale, defaulting to C
CentOS-8 - AppStream 1.3 MB/s | 6.3 MB 00:04
CentOS-8 - Base 2.8 MB/s | 7.9 MB 00:02
CentOS-8 - Extras 515 B/s | 2.1 kB 00:04
Dependencies resolved.
============================================================================================================
Package Arch Version Repository Size
============================================================================================================
Upgrading:
bash x86_64 4.4.19-8.el8_0 BaseOS 1.5 M
bind-export-libs x86_64 32:9.11.4-17.P2.el8_0.1 BaseOS 1.1 M
dracut x86_64 049-10.git20190115.el8_0.1 BaseOS 361 k
dracut-network x86_64 049-10.git20190115.el8_0.1 BaseOS 96 k
dracut-squash x86_64 049-10.git20190115.el8_0.1 BaseOS 52 k
.......
Installed:
libxkbcommon-0.8.2-1.el8.x86_64 diffutils-3.6-5.el8.x86_64 hardlink-1:1.3-6.el8.x86_64
kbd-2.0.4-8.el8.x86_64 kpartx-0.7.8-7.el8_0.2.x86_64 pigz-2.4-2.el8.x86_64
xkeyboard-config-2.24-3.el8.noarch kbd-legacy-2.0.4-8.el8.noarch kbd-misc-2.0.4-8.el8.noarch
Complete!
yumは使えるみたいですね。
どうやらyumが使えるのはdnfへのシンボリックリンクになっているため、CentOS8でも使えるんだとか。
本当にそうなのか念のため確認してみようと思います。
# which yum
bash: which: command not found
今度はwhich
コマンドが無い。。。さすがDocker
無駄なものを省いた最小構成のイメージだけはある。
whichコマンドをyumでインストールしてから確認してみると、確かにyum -> dnf-3
となっていて、シンボリックリンクになっていることが分かります。
# yum -y install which
Failed to set locale, defaulting to C
Last metadata expiration check: 0:09:38 ago on Tue Dec 31 20:35:39 2019.
Dependencies resolved.
....
# which yum
/usr/bin/yum
# ls -la | grep yum
lrwxrwxrwx 1 root root 5 May 13 2019 yum -> dnf-3
と、ここでyum -y install ...
コマンドの実行直後の行にFailed to set locale, defaulting to C
が出ているのに気付きました。
これは日本語の言語パッケージがインストールされていないことが原因とのこと。
https://qiita.com/takizawafw6o2o/items/d6a15b5ae05d85ae1f41#%E5%8E%9F%E5%9B%A0
なので同じようにインストールしてみる。
もうここまででyum
がdnf
のシンボリックリンクであることがわかったため、今後慣れていくためにもdnf
コマンドを利用するようにします。
# dnf -y install langpacks-ja
...
Installed:
langpacks-ja-1.0-12.el8.noarch glibc-langpack-ja-2.28-42.el8.1.x86_64
Complete!
言語パッケージをインストールしたのでyum list
でFailed to set locale, defaulting to C
が出ないことを確認する。あ、dnf list
ですね。
# dnf list
Failed to set locale, defaulting to C
なおらない。
http://tihiro.hatenablog.com/entry/2017/10/12/075555
この記事を参考にLC_ALL
を設定してみます。
# export LC_ALL=C
# dnf list
これで出なくなるみたいです。