使用docker 5分钟搭建一个博客(mysql+WordPress)
一.系统环境
服务器版本 | docker软件版本 | CPU架构 |
---|---|---|
CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | x86_64 |
二.前言
使用mysql镜像和WordPress镜像搭建一个个人博客。WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。
mysql镜像的环境变量的解释可以去网易云镜像中心查看https://c.163yun.com/hub#/library/repository/info?repoId=3553
WordPress镜像的环境变量的解释:
三.搭建博客
3.1 创建wordpress和mysql容器
1.提前拉取wordpress和mysql的镜像
[root@k8smaster ~]# docker pull hub.c.163.com/library/wordpress:latest
[root@k8smaster ~]# docker pull hub.c.163.com/library/mysql:latest
#需要准备的wordpress和mysql镜像
[root@k8smaster ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.c.163.com/library/wordpress latest dccaeccfba36 4 years ago 406MB
hub.c.163.com/library/mysql latest 9e64176cd8a2 4 years ago 407MB
2.查看wordpress镜像的创建历史,可以看到数据卷挂载的目录:VOLUME [/var/www/html],镜像开放的端口为 EXPOSE 80/tcp
[root@k8smaster ~]# docker history hub.c.163.com/library/wordpress:latest
IMAGE CREATED CREATED BY SIZE COMMENT
dccaeccfba36 4 years ago /bin/sh -c #(nop) CMD ["apache2-foreground"] 0B
<missing> 4 years ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 4 years ago /bin/sh -c #(nop) COPY file:db1f48c4963a4352… 6.85kB
<missing> 4 years ago /bin/sh -c set -ex; curl -o wordpress.tar.g… 23.9MB
<missing> 4 years ago /bin/sh -c #(nop) ENV WORDPRESS_SHA1=5376cf… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV WORDPRESS_VERSION=4.8… 0B
<missing> 4 years ago /bin/sh -c #(nop) VOLUME [/var/www/html] 0B
<missing> 4 years ago /bin/sh -c a2enmod rewrite expires 60B
<missing> 4 years ago /bin/sh -c { echo 'opcache.memory_consumpt… 171B
<missing> 4 years ago /bin/sh -c set -ex; apt-get update; apt-g… 5.9MB
<missing> 4 years ago /bin/sh -c #(nop) CMD ["apache2-foreground"] 0B
<missing> 4 years ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 4 years ago /bin/sh -c #(nop) WORKDIR /var/www/html 0B
<missing> 4 years ago /bin/sh -c #(nop) COPY file:24613ecbb1ce6a09… 1.35kB
<missing> 4 years ago /bin/sh -c #(nop) ENTRYPOINT ["docker-php-e… 0B
<missing> 4 years ago /bin/sh -c #(nop) COPY multi:3775aa358569083… 5.92kB
<missing> 4 years ago /bin/sh -c set -xe && buildDeps=" $PHP_EX… 32.5MB
<missing> 4 years ago /bin/sh -c #(nop) COPY file:207c686e3fed4f71… 587B
<missing> 4 years ago /bin/sh -c set -xe; fetchDeps=' wget ';… 12.9MB
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_SHA256=c464af6124… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_URL=https://secur… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_VERSION=5.6.31 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV GPG_KEYS=0BD78B5F9750… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_LDFLAGS=-Wl,-O1 -… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_CPPFLAGS=-fstack-… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_CFLAGS=-fstack-pr… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_EXTRA_CONFIGURE_A… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_EXTRA_BUILD_DEPS=… 0B
<missing> 4 years ago /bin/sh -c { echo '<FilesMatch \.php%sSourceCode%gt;'; … 237B
<missing> 4 years ago /bin/sh -c set -ex && . "$APACHE_ENVVARS" … 33B
<missing> 4 years ago /bin/sh -c a2dismod mpm_event && a2enmod mpm… 68B
<missing> 4 years ago /bin/sh -c set -ex && sed -ri 's/^export (… 1.92kB
<missing> 4 years ago /bin/sh -c #(nop) ENV APACHE_ENVVARS=/etc/a… 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV APACHE_CONFDIR=/etc/a… 0B
<missing> 4 years ago /bin/sh -c apt-get update && apt-get instal… 6.99MB
<missing> 4 years ago /bin/sh -c mkdir -p $PHP_INI_DIR/conf.d 0B
<missing> 4 years ago /bin/sh -c #(nop) ENV PHP_INI_DIR=/usr/loca… 0B
<missing> 4 years ago /bin/sh -c apt-get update && apt-get install… 200MB
<missing> 4 years ago /bin/sh -c #(nop) ENV PHPIZE_DEPS=autoconf … 0B
<missing> 4 years ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 4 years ago /bin/sh -c #(nop) ADD file:a023a99f7d01868b1… 123MB
3.创建mysql的root密码和数据库
使用MySQL镜像创建容器:
- --name指定容器名称;
- -e指定环境变量,-e MYSQL_ROOT_PASSWORD指定MySQL的root密码,-e MYSQL_DATABASE指定创建的数据库名称;
- -v /data:/var/lib/mysql进行数据卷挂载,宿主机目录为/data,MySQL容器目录为/var/lib/mysql
[root@k8smaster ~]# docker run -dit --restart=always --name=mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -v /data:/var/lib/mysql hub.c.163.com/library/mysql:latest
62dc266d58a45a2d19889267af2805fdd429e3033031407bd11111b20ede87ff
数据卷挂载之后,宿主机的/data/目录里就有MySQL容器数据目录里的内容了
[root@k8smaster ~]# ls /data/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema sys
获取mysql容器的IP地址:172.17.0.4
[root@k8smaster ~]# docker inspect mysql | grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
4.创建wordpress容器,并连接mysql对应的数据库
使用wordpress镜像创建容器:
- --name指定容器名称
- -v /blog:/var/www/html进行数据卷挂载,宿主机目录为/blog,wordpress容器目录为/var/www/html
- -e WORDPRESS_DB_HOST=172.17.0.4指定MySQL数据库的IP地址, -e WORDPRESS_DB_USER=root指定使用MySQL的root用户连接MySQL, -e WORDPRESS_DB_PASSWORD=123456说明MySQL的密码为123456, -e WORDPRESS_DB_NAME=wordpress指定连接MySQL的wordpress数据库
- -p 80:80进行端口映射,宿主机端口为80,容器端口为80,意思是把容器的80端口映射到物理机的80端口,访问宿主机的IP:80即可访问wordpress容器
[root@k8smaster ~]# docker run -dit --restart=always --name=wordpress -v /blog:/var/www/html -e WORDPRESS_DB_HOST=172.17.0.4 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -e WORDPRESS_DB_NAME=wordpress -p 80:80 hub.c.163.com/library/wordpress:latest
8360d3c2c109d6a4ad05361d5dfe50dbad6b0642c7b8e871bae4396c8cb71f48
5.查看容器,可以看到wordpress和mysql容器正在运行
[root@k8smaster ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8360d3c2c109 hub.c.163.com/library/wordpress:latest "docker-entrypoint.s…" 53 seconds ago Up 48 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp wordpress
62dc266d58a4 hub.c.163.com/library/mysql:latest "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 3306/tcp mysql
3.2 在wordpress界面设置个人博客信息
因为wordpress容器进行了端口映射,访问宿主机IP:80即可访问wordpress,在浏览器打开http://192.168.110.137/,出现如下wordpress页面
语言选择简体中文,点击继续
设置站点标题,用户名,密码,email,安装WordPress
WordPress安装成功之后,点击登录
根据你设置的账号进行登录
此时个人博客就搭建完毕了
点击文章,点击写文章
撰写新文章,点击发布
此时就可以看到我们写的文章了
到此,博客搭建完毕,如果要给外界访问,则需要申请云主机和域名。
3.3 WordPress容器创建命令的简化版本
1.删除wordpress容器
[root@k8smaster ~]# docker rm -f wordpress
wordpress
2.创建wordpress容器
--link=mysql:mysql链接MySQL容器,并起别名为mysql
--link, 可以使新生成的容器链接到已在运行的容器,具体使用用法可以看之前博客《docker --link容器互联》https://www.cnblogs.com/renshengdezheli/p/16640281.html
[root@k8smaster ~]# docker run -dit --restart=always --name=wordpress --link=mysql:mysql -v /blog:/var/www/html -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -e WORDPRESS_DB_NAME=wordpress -p 80:80 hub.c.163.com/library/wordpress:latest
2c3d943c7c153b74d7e91f4e0f9f2043d7b39d9be4051ca851892c68f961fab9
[root@k8smaster ~]# docker rm -f wordpress
wordpress
#这是简化版的命令
[root@k8smaster ~]# docker run -dit --restart=always --name=wordpress --link=mysql:mysql -v /blog:/var/www/html -p 80:80 hub.c.163.com/library/wordpress:latest
b25333f5f51f01199c50ab8971baf74a1a99cb25b1eba0d646531cd191abfdd7