LoginSignup
1
2

More than 5 years have passed since last update.

VirtualBoxからDockerへWebサーバの移植

Posted at

備忘録

環境

・Windows 10 professional 64bit

VirtualBox環境

・OS : CentOS7
・メインメモリ : 2048MB
・ストレージ : 50GB (33.5GB使用中)
・フォルダマウントあり

Apache + PHP + MySQLのWebサーバ
・Apache 2.4.6
・PHP 7.2.10
・mysql Ver 8.0.12

VirtualBox環境を抽出

yum historyを使用して実行したyumの履歴を表示
yum_history.jpg

yum history info IDを使用して実行た内容を確認する
image.png

全てのyumを確認すると,Apache, PHP, MySQLの他にXdebugがいインストールされているのが確認できた

上記より,Apache,PHP,MySQL,Xdebugの設定ファイルをコピーしてVirtualBoxから抽出する
【各設定ファイル】
 Apache : /etc/httpd
 PHP, Xdebug : /etc/php.ini, /etc/php.d
 MySQL : /etc/my.cnf

また,DBのDUMPファイルを取得する

mysqldump -u root -p db名 > db名.dump

これらのファイルをまとめて圧縮し取り出す

# ファイルを1つのフォルダ(SetFolder)にまとめてから
tar -cf setting.tar ./SetFolder
gzip -9 setting.tar

この圧縮したデータをマウントしているディレクトリに移動させるか,SFTP等を使い抽出する

Docker環境の作成

Docker-Composeの作成

WebサーバとDBサーバを立ち上げるDocker-Composeを作成する

docker-compose.yml
version: '3'

services:
 db:
  image         : mysql
  environment   :
   - MYSQL_ROOT_PASSWORD=rootpass
   - MYSQL_DATABASE=db
   - MYSQL_USER = user
   - MYSQL_PASSWORD= pass
  ports         : 
   - "53306:3306"
  volumes       : 
   - "/d/Transplant/db:/docker-entrypoint-initdb.d"
  container_name: "trans_db"

 web:
  depends_on    : 
   - db
  build         : ./build/web/
  ports         : 
   - "50080:80"
  volumes       : 
   - "/d/Transplant/html:/var/www/html"
  links         : 
   - db
  container_name: "trans_web"
  working_dir   : /var/www/html/sg
  privileged    : true

【各設定】
・version : Docker-Composeのバージョン
・services : 立ち上げるサービスの定義
・db, web : 立ち上げるサービス名
・images : インストールするイメージ
・environment : サービスの環境変数
・ports : 公開用ポート(ホスト側:コンテナ側)
・volumes : マウントするパス(ホスト側:コンテナ側)
・container_name : コンテナ名
・depends_on : 依存関係
・build : 構築時のオプション
・links : 他のサービスとリンクさせる
・working_dir : コンテナ内のワーキングディレクトリ
・privileged : すべてのデバイスのアクセス許可

dockerfileの作成

Webサーバ構築オプション(build)で使用するdockerfileを作成する

dockerfile
   FROM centos:7
   RUN  yum -y update
   RUN  yum -y install httpd
   RUN  yum install -y epel-release && \
     yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
   RUN  yum -y remove php-*
   RUN  yum -y install --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql
   RUN  yum --skip-broken --disablerepo=* --enablerepo=remi-php72 -y install php-pecl-xdebug
   EXPOSE 80

   RUN systemctl enable httpd
   CMD ["/sbin/init"]

CentOS7をベースにApacheとPHP,MySQL,Xdebugをインストールする
CentOS7のリポジトリではPHP7.2をインストールできないので,remiリポジトリをインストールしてremiリポジトリを使用してPHP7.2をインストールする
最後に80ポートをエクスポートし,Apacheを自動起動するようにする

Docker-Composeとdockerfileのディレクトリ関係は以下のようになっている

docker
 |--docker-compose.yml
 |--build
     |--web
         |--dockerfile

コンテナ生成

・Docker-Composeのあるディレクトリで以下のコマンドを実行する

$ docker-compose up -d

すると,docker-compose.ymlに記載された通りにコンテナが立ち上がる

サーバ環境設定

・VirtualBoxから抽出した設定ファイルを元にサーバの設定を行う
 【各設定ファイル】
 Webサーバ
 Apache : /etc/httpd
 PHP, Xdebug : /etc/php.ini, /etc/php.d

 DBサーバ
 MySQL : /etc/my.cnf

プログラム,DBの配置

・Webサーバにプログラムを配置する
 マウントしているフォルダにプログラムを配置する

・DBサーバにデータを取り込む
 マウントしているフォルダにDUMPファイルを配置し,コンテナ内でリストアをする

# DBサーバコンテナに入る
$ docker exec -it trans_db bash 
# マウントされているフォルダに移動する
$ mysql -u root -p db名 < db名.dump

参考

Docker Documentation
Docker ドキュメント日本語化プロジェクト

1
2
0

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
1
2