まず、Ubuntu20.04にDockerとdocker-composeをインストールする。
sudo apt-get update # update packege list sudo mkdir -p /etc/apt/keyrings # make GPG key dir curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # get docker GPG key echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # add packege list of docker sudo apt-get update # update packege list agein sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # install docker, docker-compose sudo usermod -aG docker $USER # add super user group docker user su - ${USER} # make user docker -v # view docker version
これでDockerのバージョンが表示されればOK
そしたら用意するコンテナをYAMLに記載します。
mkdir docker-compose cd docker-compose vi docke-compose.yml version: '3' services: wordpress: image: wordpress container_name: plusload-wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_PASSWORD: ******** volumes: - ./public_html/:/var/www/html # wordpressの永続化 mysql: image: mysql:5.7 container_name: plusload-mysql restart: always environment: MYSQL_USER: ****** MYSQL_ROOT_PASSWORD: ******* volumes: - data-volume:/var/lib/mysql # mysqlの永続化 phpmyadmin: image: phpmyadmin container_name: plusload-phpmyadmin restart: always ports: - 8888:80 environment: - PMA_ARBITRARY=1 volumes: data-volume: :wq
dockerコンテナなのでrunして何かトラブルがあってstopするとデータが消えてしまうのでvolumesでマウント永続化すると再起動後もデータは残っている
※mysqlはdocker volumeでマウントしているが、wordpressは/home/user/docker-compose内の/public_htmlに作成してマウントしている
なのでwordpressディレクトリ内にwordpressが使用しないプログラムやディレクトリを入れる場合はこの中にアップする
※phpmyadmin, webminは消失しても問題ないのでvolumesでマウントしない
でコンテナを起動
docker-compose up -d
これで起動するのでまず、mysqlコンテナに入りwordpressというDBを作成する
docker container exec -it plusload-mysql bash bash-4.2# mysql -u ***user*** -p****pass**** mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.7.44 MySQL Community Server (GPL) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> create database wordpress; Query OK, 1 row affected (0.00 sec)
作ったらmysqlコンテナから抜けてwodpressコンテナに入る
docker container exec -it plusload-wordpress bash
でもそのままではviエディタが使えないのでupdateしてinstallする
apt update apt install vim -y
これでviエディタが使えるのでwp-config.phpを編集する
vi wp-config.php * define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') ); /** Database username */ define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', '***user***') ); /** Database password */ define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', '***pass***') );
これでlocalhost:8080にアクセスするとwordpressの初期化ページが表示される
localhost:8888にアクセスするとphpmyadminが表示されるのでコンテナ名のDBでmysqlアカウントでログインする
localhost:10000にアクセスするとwebminが表示されるのでadminと設定したパスワードでログインする
サイトの移行などでAll-in-One WP Migrationプラグインを使用していてサイズが大きい場合はwordpressコンテナの.htaccessに以下を書き加える事で200MBまでのデータの移行が可能
php_value upload_max_filesize 200M php_value post_max_size 200M php_value memory_limit 512M php_value max_execution_time 600 php_value max_input_time 600
また、未使用のvolume何かが残存して重くなっちゃうと困るので未使用のvolumeは削除しておく
docker volume prune WARNING! This will remove anonymous local volumes not used by at least one container. Are you sure you want to continue? [y/N] y Deleted Volumes: 69fa4cfccf245eab3f2b37cfc6d4e30ddd2adb3eb41addd71bcd46d8e36898af 934d3d7ebac1f07579d2bed96879e10f3bf26d53d9b06e4dd5d2838b83f9e66e a28836400e24de9ccae7a14d9c028b1bdce21a71c603c1142bfddd99adc4723c fe141f11b36407fd4a7847bd9c89e667879bea1555ab8bb28edaf7ec5ca4d15d 3cc3939adb74459155e84944504504f82451b027b101b7c9a09addb185cfc25f bf0f35973dcd45173fb2d166873399d26155733a7b3582d9a8a9a35e5be392d7 fad7f8294d6678bed1403f817c745410e761d95dba812884db974cba394d55fe Total reclaimed space: 1.06GB docker volume ls DRIVER VOLUME NAME local docker-compose_data-volume
1.06GBもあった。
で、今のDBをバックアップする
mysqldump --single-transaction -u root -p my_db > ./my_db.dump
dumpファイルをwinscpなどで現サーバからDLして、新サーバのpublic_htmlの中にコピーして、wodpressコンテナに入ってそこからmysqlにリストア
docker container exec -it plusload-wordpress bash mysql -h plusload-mysql -u root -p my_db < my.dump
ついでにdockerui(dockerの見える化)もインストールしておく
docker pull kevan/dockerui docker run -d -p 9000:9000 --name plusload-dockerui -v /var/run/docker.sock:/var/run/docker.sock kevan/dockerui