WordPress deployment using docker

Ref:NAS以docker搭建WordPress修改 Docker 中的 WordPress 上传限制_docker_

First you have to install docker.

Conditionally install the desktop version.

Docker docs

# 以Ubuntu为例
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 设置安装源
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加官方源的GPG key
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
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
# 安装docker Engine
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证一下你是否安装成功
sudo docker run hello-world
# 出现successful就ok了

Create Database

This article use mysql - Official Image | Docker Hub

run docker run -d -v /data/mysql:/var/lib/mysql -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=数据库的密码 -p 666:3306 --privileged=true --name mysql --restart always mysql:latest, 为了方便理解命令含义,以下已用中文解释

命令 解释
docker run 新建一个容器并运行
-d 后台运行容器, 并守护进程
-v 将容器目录映射到主机目录, 格式 /主机目录:/容器目录
此处将容器的/var/lib/mysql目录挂载到主机/data/mysql目录中
-e 设置环境变量,MYSQL_DATEBASE=wordpress, 设置数据库名为wordpress
MYSQL_ROOT_PASSWORD=设置你数据库的密码
-p 将主机的666端口映射到容器的3306端口
–privileged=ture 为容器提供特权,个人理解可以减少bug发生
–name mysql 为你的容器起个名字, 此处起名mysql
–restart always 防止掉线
最后的mysql:latest 使用最新的mysql镜像标签

Create wordpress container

This article use wordpress-docker image,The relevant configuration corresponds the mysql database created above.

run docker run -d --name my_wordpress --restart always -p 8080:80 -v /data/wordpress/www:/var/www/html -v /data/wordpress/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini -e WORDPRESS_DB_HOST=你数据库的ip地址:666 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=数据库的密码 -e WORDPRESS_DB_NAME=wordpress --privileged=true wordpress:latest, 为了方便理解命令含义,以下已用中文解释

命令 解释
docker run 新建一个容器并运行
-d 后台运行容器, 并守护进程
-v 将容器目录映射到主机目录, 格式 /主机目录:/容器目录
此处将容器的/var/www/html目录挂载到主机/data/wordpress/www目录中
再将主机/data/wordpress/php/uploads.ini文件映射到容器的/usr/local/etc/php/conf.d/uploads.ini, ==此处有坑后文细说==
-e 设置环境变量,WORDPRESS_DB_HOST=ip:端口, 填你的数据库ip:对应端口
WORDPRESS_DB_USER=root,数据库对应用户名
WORDPRESS_DB_NAME=wordpress,数据库名
WORDPRESS_DB_PASSWORD=数据库的密码
-p 将主机的8080端口映射到容器的80端口
–privileged=ture 为容器提供特权,个人理解可以减少bug发生
–name my_wordpress 为你的容器起个名字, 此处起名my_wordpress
–restart always 防止掉线
最后的wordpress:latest 使用wordpress最新的镜像标签

Be sure to extract the build file

Why -v /data/wordpress/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini should be prudent.

  • When you want to upload a theme or image resource on wordpress, you will be prompted that the file upload size is limited to 2M.
  • The solution is to create uploads.ini in the container /usr/local/etc/php/conf.d/ directory
  • Use host net,-v /data/wordpress/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
  • Create the uploads.ini file in the /data/wordpress/php/ directory of the host, and the contents of the file are as follows
file_uploads = On

memory_limit = 100M

upload_max_filesize = 100M

post_max_size = 100M

Packing container

Ref

# 找出你需要打包容器的id,比如我的是86a61519bd5e
docker ps -a
# 打包wordpress容器
# -a "作者" -m "备注" -p(暂停容器) 容器id 版本名:版本号
docker commit -a "atom" -m "mywordpress" -p 86a615 mywordpress:v0
# 打包mysql,4b5c7c是我mysql的容器id
docker commit -a "atom" -m "mywordpress_sql" -p 4b5c7c mywordpress_sql:v0
# 查看镜像文件,可以看到mywordpress和mywordpress_sql的身影了
docker image ls
# 使用docker save 将镜像文件打包成tar文件
docker save -o /mywordpress.tar mywordpress:v0
docker save -o /mywordpress_sql.tar mywordpress_sql:v0
# 可以看到根目录已经有两个tar文件生成了
# 以下对打包的文件进行测试
docker image rm 80265a
docker image rm 9e2f0b
# 载入tar文件
docker load -i /mywordpress.tar
docker load -i /mywordpress_sql.tar
docker image ls
# 发现镜像又回来了
# 根据容器重新创建容器后发现参数完全一致,但是wordpress已经提示要重装了,暂时不明原因
# 以后有时间再进行测试