はじめに
こんにちは。新卒1年目エンジニアのdd_fortです。 今回はDockerを勉強しようと思い、CentOS8でDockerの環境構築をしようとした話です。 Dockerが公式サポートされていないCentOS8にDockerを使用するときに躓いた点や気を付ける点を中心にインストール方法を紹介しようと思います。
目次
Docker とは
Docker社が開発している、コンテナ型の仮想環境を用いてアプリケーションを開発・配置・実行するためのプラットフォームです。
コンテナ型仮想環境 |
---|
Doecerのメリット
- ホストOSを直接アクセスするためオーバーヘッドが少ない
- 可搬性が高くDockerをインストールすれば、ホストOS環境に依存せず動作する
- コード化されたファイルを共有することで開発環境のセットアップが容易になる
リポジトリの追加
まず、Docker のリポジトリを追加します。
$ dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
以下のようになっていればOKです。
$ dnf repolist repo id repo の名前 状態 AppStream CentOS-8 - AppStream 5,120 BaseOS CentOS-8 - Base 2,126 extras CentOS-8 - Extras 13 docker-ce-stable Docker CE Stable - x86_64 63
Docker のインストール
dnfコマンドを使用してdnf install docker
のようなコマンドでインストールしようすると依存関係の問題でインストールできません。
回避策として今回は、--nobest
オプションを付けて実行します。
$ dnf install --nobest docker-ce containerd.io
この状態のままだと、dnf upgrade
を実行すると Dockerを強制的にインストールしているためエラーが発生します。
そのため、CentOS7 のリポジトリを利用してcontainerd.io をアップデートします。
$ dnf update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm
以下を実行してエラーが発生しなければOKです。
$ dnf -y update docker-ce
Docker の起動
Docker を起動します。
$ systemctl start docker $ systemctl enable docker
バージョン確認
$ docker --version Docker version 19.03.8, build afacb8b
ネットワークの問題
しかし、CentOS8の場合はこのままではコンテナ内から名前解決ができずdnf 等が使えません。
回避策1:Docker 起動時のオプション
コンテナの構築時や起動時に--network host
を指定して実行することで解決することができます。
$ docker pull wordpress $ docker run --name wordpress-test --network host -d wordpress
上記はWordPressのコンテナを立てるときのコマンドです。
回避策2:firewalld の設定変更
iptablesが動いている場合は、firewalld でNAPTするように設定を変更することで解決することができます。
$ firewall-cmd --add-masquerade --permanent $ firewall-cmd --reload
回避策3:パケットフィルタリングツール変更
根本的な原因としては、CentOS8からパケットフィルタリングツールが iptables から nftables に変わったことです。 (Docker が nftables を設定できないため)
CentOS のパッケージフィルタリング構成
CentOS6 : iptables
CentOS7 : firewalld(管理I/F), iptables
CentOS8 : firewalld(管理I/F), nftables
iptables を利用するように変更することで解決可能
- firewalld を止める
$ systemctl stop firewalld $ systemctl disable firewalld
- iptables をインストール
$ dnf install iptables-services
- iptables を起動
$ systemctl enable iptables $ systemctl start iptables
最後に
私はCentOS8にDockerが公式非対応であること知らずに環境構築をはじめてしまったため、環境構築だけで時間が多く掛かってしまいました。
しかし、CentOS8とDockerの勉強になったのでよかったかなと思っています。
また、CentOS8ではpodman(Docker互換のコンテナエンジン)が使えるみたいなのでそれを試してみるのもいいかなと思いました。
この記事がCentOS8でDockerを使おうとしている人の助けとなれば幸いです。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com