LoginSignup
0
1

コンテナ上にあるミドルウェア(Apache/MySQL)のバージョンアップ手順

Last updated at Posted at 2024-06-15

はじめに

ApacheとMySQLのバージョンアップ手順について調べたのでまとめます。

作業環境はローカル端末のDockerコンテナで、Apache×PHPのWebサーバー+MySQLサーバーの構成です。

バージョンアップは

  • Apache: 2.4.38 -> 2.4.59
  • MySQL: 8.0.x -> 8.4.0

とし、執筆時点での最新版へのアップデートを考えています。

※Apacheのアップデートの際に使用するAPR、APR-Utilのバージョンは

  • APR: 1.7.4
  • APR-Util: 1.6.3

となります。

いただいたコメントを受けて追記させていただきます。

本記事ではミドルウェアの永続化および設定に必要なファイル群の管理について言及していないため、実際に運用されている環境でバージョンアップを実施する場合には設定ファイルの管理も考慮する必要があります。

一般的にはホストマシンや別途サービスやツールを使用して外部で管理することになりますが、今回はローカル環境で簡易的にバージョンアップを実施するという目的で執筆したため、考慮不足についてお詫び申し上げます。

概要

  • ディレクトリ構成
  • 各ファイル内容
  • コンテナの起動
  • Apacheのバージョンアップ
  • MySQLのバージョンアップ

ディレクトリ構成

├── docker
│   ├── db
│   │    └── data          // DB永続化用のボリューム
│   └── web
│        └── dockerfile    // Webサーバー用のdockerfile
├── docker-compose.yml
└── index.php

各ファイル内容

docker/web/Dockerfile

# PHPとApacheの同梱版のイメージを使用
FROM php:7.4.8-apache

# 必要な処理を記述
RUN apt-get update && apt-get install -y vim \
    && apt-get install -y wget

docker-compose.yml

services:
  web:
    build:                                  // ビルド元のソースを指定
      context: ./docker/web                 // コンテキストパス
      dockerfile: Dockerfile                // dockerfileの名前
    volumes:
      - ./:/var/www/html                    // コンテナ内のhtmlディレクトリとボリュームを紐づけ
    ports:
      - "80:80"                             // ポート指定。デフォルトの80番ポート
    container_name: web                     // コンテナ名

  mysql:
    image: mysql:8.0                        // MySQLのバージョン
    environment:                            // MySQLの情報
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    container_name: mysql
    volumes:
      - ./docker/db/data:/var/lib/mysql     // DB永続化のボリューム設定

index.php

<?php
echo "Hello, World!";
?>

コンテナの起動

Webサーバー用のDockerイメージのビルド

// docker-compose.ymlのある階層で

docker compose build

イメージの確認

docker images

// 結果
apache_workspace_web   latest    xxxxxxxxxxxx   2 minutes ago   466MB

コンテナの起動

docker compose up -d          // -d デーモンとしてコンテナを起動

起動確認

docker ps

// 結果
xxxxxxxxxxxx   apache_workspace_web   "docker-php-entrypoi…"   3 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                      web
xxxxxxxxxxxx   mysql:8.0              "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

ブラウザで localhost にアクセスして下の画面が表示されれば準備OKです

スクリーンショット 2024-06-15 133323.png

Apacheのバージョンアップ

【手順】

  • コンテナにログイン
  • 現在のバージョンを確認
  • 各種設定ファイルのバックアップ
  • アップデートに必要なツールのダウンロードとインストール
    • Apacheの最新版
      • ダウンロード
    • APR+APR-Util
      • ダウンロード+インストール
  • Apacheのインストール
  • パスの設定
  • 再起動+バージョン確認

コンテナIDを取得し、Webサーバーのコンテナにログイン

docker ps                                    // コンテナIDを取得

docker exec -it コンテナID bash

現在のバージョンを確認

apachectl -v

// 結果
Server version: Apache/2.4.38 (Debian)
Server built:   2019-10-15T19:53:42

設定ファイルのバックアップ

cp -r /etc/apache2 /etc/apache2.bak

ls /etc                                       // apache2 apache2.bak

アップデートに必要なツールのダウンロード

  • Apache
cd /usr/local/src                             // 設定ファイルを配置するディレクトリに移動
wget https://downloads.apache.org/httpd/httpd-2.4.59.tar.gz
tar -xvzf httpd-2.4.59.tar.gz
  • APR
curl -k -O https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
tar -xvzf apr-1.7.4.tar.gz
cd apr-1.7.4
./configure                                       // 設定を認識させる 
make
make install 
  • APR-Util
apt-get update
apt-get install -y libssl-dev
apt-get install -y zlib1g-dev
apt-get install -y libexpat1-dev
apt-get install -y libpcre3 libpcre3-dev
cd /usr/local/src
curl -k -O https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
tar -xvzf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3
./configure --with-apr=/usr/local/apr           // apr-utilをaprに認識させる
make
make install

Apache のインストール

cd ../httpd-2.4.59
mv ../apr-1.7.4 srclib/apr                        // srclib内に配置して認識させる
mv ../apr-util-1.6.3 srclib/apr-util              // 上記と同様
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-ssl --with-mpm=event
make
make install

環境変数にパスを設定する

export PATH=/usr/local/apache2/bin:$PATH

再起動 + バージョンを確認

apachectl restart
apachectl -v

// 結果
Server version: Apache/2.4.59 (Unix)
Server built:   Jun 15 2024 05:13:16

バージョンが更新され、ブラウザでlocalhostにアクセスして無事に表示されれば完了

MySQLのバージョンアップ

【手順】

  • 現在のバージョンを確認
  • テーブル情報や設定ファイルのバックアップ
  • docker-compose.yml のバージョンを変更しコンテナを再起動
  • バージョンの確認

現在のバージョンを確認

docker exec -it コンテナID mysql -V

// 結果
mysql  Ver 8.0.37 for Linux on x86_64 (MySQL Community Server - GPL)

テーブル情報や設定ファイルのバックアップ

※ホストにマウントしている永続化用のファイルがあればコピーしてバックアップを取得

docker-compose.yml のバージョンを変更しコンテナを再起動

    mysql:
        # image: mysql:8.0
        image: mysql:8.4.0
        environment:
docker stop コンテナID
docker remove コンテナID
docker ps -a
docker compose up -d
docker ps                       // MySQLのコンテナだけが起動し直すことを確認

バージョン確認

docker exec -it コンテナID mysql -V

// 結果
mysql  Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)

バージョンが更新されていれば完了

最後に

実際にアプリケーションを運用している場合はバージョンの差異によるエラーが発生するはずなので、必要に応じて対応しましょう。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1