3 Oracle Container Runtime for Dockerのアップグレード

この章では、Oracle Linux 7ホストにOracle Container Runtime for Dockerをアップグレードするために必要なステップについて説明します。

ノート:

Dockerでは、Unbreakable Enterprise Kernelリリース4 (UEK R4)以上を使用するようにシステムを構成し、このカーネルを使用してシステムを起動する必要があります。

/etc/sysconfigでのDocker構成ファイルの使用は推奨されていません。かわりに、必要に応じて/etc/systemd/system/docker.service.d/etc/docker/daemon.json構成ファイルとsystemdドロップイン構成ファイルを使用してください。

dockerサービスの実行中にドロップイン・ファイルを追加または変更した後、コマンドsystemctl daemon-reloadを実行し、systemdにサービスの構成をリロードするよう指示します。

アップグレードの前提条件

アップグレードする前に、Docker Engineの最新バージョンの要件を満たしていることを確認してください。以降の項を参照して、既存の環境に適用できるステップを判断してください。

Unbreakable Enterprise Kernelの更新

Unbreakable Enterprise Kernelリリース5 (UEK R5)以上を使用するようにシステムを構成し、このカーネルを使用してシステムを起動します。以前のUnbreakable Enterprise Kernel (UEK)リリースまたはRed Hat Compatible Kernel (RHCK)を使用している場合は、カーネルをアップグレードする必要があります。

UEKをインストールまたは更新するには:

  1. システムがULNに登録されている場合は、ol7_x86_64_UEKR3およびol7_x86_64_UEKR4チャネルへのアクセスを無効にし、ol7_x86_64_UEKR5チャネルへのアクセスを有効にします。

    ULNユーザー名とパスワードを使用してhttps://linux.oracle.comにログインし、「システム」タブをクリックして、Oracle Container Runtime for Dockerをインストールするシステムを選択します。「サブスクリプションの管理」ページに移動し、システムのチャネル・サブスクリプションを更新します。「サブスクリプションの保存」をクリックして変更を保存します。

  2. Oracle Linux yumサーバーを使用する場合は、ol7_UEKR3およびol7_UEKR4リポジトリを無効にし、ol7_UEKR5リポジトリを有効にします。これは、yum-config-managerを使用して簡単に実行できます。

    sudo yum-config-manager --disable ol7_UEKR3 ol7_UEKR4
    sudo yum-config-manager --enable ol7_UEKR5                     
  3. 次のコマンドを実行して、選択したUEKリリースにシステムをアップグレードします。

    sudo yum update                     
  4. UEKがデフォルトのブート・カーネルでない場合は、これを選択してシステムを再起動します。

    sudo systemctl reboot                     

ストレージ・ドライバの確認

Docker Engineは、デフォルトのストレージ・ドライバとしてoverlay2を使用してDockerコンテナを管理します。-n ftype=1オプションを有効にした状態で作成されていないXFS形式のファイル・システムを使用しているシステムでは、overlay2ストレージ・ドライバで問題が発生することがあります。これは、オーバーレイ・ファイル・システムではファイル削除用のホワイト・アウトなどのメタデータを処理できるかどうかがdtypeのサポートに依存しているためです。

Oracle Linux 7のルート・パーティションは、XFSがファイル・システムとして選択される場合に-n ftype=0で自動的にフォーマットされるため、dtypeサポートが無効になります。Dockerを新規にインストールすると、dtypeサポートが使用可能であることを確認するために、パッケージ・インストーラによってファイル・システムの形式オプションがチェックされます。dtypeサポートが有効になっていない場合、インストーラはデフォルトのストレージ・ドライバを上書きしてdevicemapperを使用し、新しくインストールされたシステムでDockerがすぐに使用できるようにします。ただし、アップグレード後のバージョンのDockerでは、以前のリリースで構成されていたストレージ・ドライバが引き続き使用されます。つまり、基礎となるXFS形式のファイル・システムでoverlay2を使用するようにDockerを構成した場合、正しくフォーマットされた専用の記憶域にデータを移行することが必要になる場合があります。

overlayfsよりも安定で成熟したテクノロジとしてbtrfsを使用することをお薦めします。

実行中のDocker Engineに構成されているストレージ・ドライバおよびバッキング・ファイル・システムを確認し、ルートDocker記憶域へのパスを調べるには、次を実行します。

sudo docker info |grep 'Storage\|Filesystem\|Root'                  

ストレージ・ドライバがoverlay2に設定され、バッキング・ファイル・システムがxfsに設定されている場合は、XFSファイル・システムが正しくフォーマットされていることを確認してください。

xfs_info /var/lib/docker |grep ftype                  

必要に応じて、/var/lib/dockerを、前のコマンドで返されたルートDocker記憶域へのパスに置き換えます。このコマンドから返される情報にftype=0が含まれている場合は、このディレクトリに保持されるデータをオーバーレイ・ファイル・システムのサポートによってフォーマットされている記憶域に移行する必要があります。

記憶域を移行するには:

  1. Dockerを実行しているシステムにブロック・ストレージ・デバイスをアタッチします。デバイス名とUUIDを識別するには、lsblkコマンドを使用します。たとえば:

    lsblk -o 'NAME,TYPE,UUID,MOUNTPOINT'                        

    必要に応じて、fdiskpartedなどのパーティション化ツールを使用してデバイスをパーティション化する必要がある場合があります。

  2. たとえば、パーティション/dev/sdb1をフォーマットするには、XFSファイル・システムでブロック・デバイスをフォーマットします。

    sudo mkfs -t xfs -n ftype=1 /dev/sdb1

    ファイル・システムを作成する場合やoverlayfsを使用できない場合には、-n ftype=1オプションを使用する必要があります。

  3. 既存のDockerルート・ディレクトリからコンテンツをコピーできるように、新しいファイル・システムを一時的にマウントします。

    sudo mount -t xfs /dev/sdb1 /mnt
  4. Docker Engineが実行中の場合は停止します。

    sudo systemctl stop docker                        
  5. 既存のDockerデータを新しいファイル・システムに移動します。

    sudo mv /var/lib/docker/* /mnt
  6. 新しいファイル・システムをアンマウントし、Dockerルート・ディレクトリに再マウントします。

    sudo umount /mnt                           
    sudo mount -t xfs /dev/sdb1 /var/lib/docker
  7. 起動時にファイル・システムがマウントされるようにfstabにエントリを作成します。エディタで/etc/fstabを開き、次のような行を追加します。

    UUID=UUID_value /var/lib/docker   xfs     defaults        0 0

    UUID_valueを、作成したパーティションのUUID値に置き換えます。値を確認する必要がある場合は、lsblkコマンドまたはblkidコマンドを使用します。

ヒント:

この目的で使用可能な追加のブロック・ストレージがない場合、XFSファイル・システム・イメージを作成し、これをループバック・マウントできます。たとえば、ルート・ディレクトリに25GBのイメージ・ファイルを作成するには、次のコマンドを使用できます。

sudo mkfs.xfs -d file=1,name=/DockerStorage,size=25g -n ftype=1

一時的にこのファイルをマウントするには、次のコマンドを入力できます。

sudo mount -o loop -t xfs /DockerStorage /mnt

Dockerストレージの永続マウントを行う/etc/fstabのエントリは次のようになります。

/DockerStorage    /var/lib/docker        xfs     loop            0 0 

この構成は、アップグレードの問題を解決する一時的な解決策として役立つ可能性があります。ただし、Docker永続ストレージの形式としてループバック・マウントされたファイル・システム・イメージを使用することは本番環境で推奨されていません。

Dockerの記憶域の設定および構成の詳細は、「Docker記憶域の構成」を参照してください。

Docker Engineのアップグレード

Docker Engineをアップグレードするには:

  1. dockerサービスが実行中の場合は停止します。

    sudo systemctl stop docker
  2. docker-engineおよびdocker-cliパッケージを更新します。

    sudo yum update docker-engine docker-cli                    
  3. dockerサービスを起動します。

    sudo systemctl start docker