使用docker搭建个人博客
文章目录
- 说明
- 镜像准备
- 创建mysql容器
- 创建wordpress容器
- 常规搭建
- 使用link【别名】【方式一】
- 使用link【别名】【方式二】
- 测试
- 报错处理
- You have to remove (or rename) that container to be able to reuse that name
- failed: port is already allocated
- 容器创建成功,浏览器打开提示“无法显示此网页”
- 总结
说明
下面只是说明了 docker的基本应用方式,只要有镜像就可以搭建出相应的服务。
镜像准备
- 先下载2个镜像:
wordpress
和mysql
如果下面命令不能拉取镜像,去我docker分类中,找到"docker镜像管理",里面有关于镜像的详细说明
[root@ccx ~]# docker pull wordpress
[root@ccx ~]# docker pull mysql
- 获取好以后的镜像如下
[root@ccx ~]# docker images | egrep 'wordpress|mysql'
hub.c.163.com/library/wordpress latest dccaeccfba36 3 years ago 406 MB
hub.c.163.com/library/mysql latest 9e64176cd8a2 4 years ago 407 MB
[root@ccx ~]#
创建mysql容器
- 我docker分类中有使用的详细说明,想了解的可以去看看。
[root@ccx ~]# mkdir /data
[root@ccx ~]# docker run -dit --name=db --restart=always -v /data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=haha -e MYSQL_DATABASE=wordpress hub.c.163.com/library/mysql
91afdb4857d21319187ccf2832d6721c85c4ffc82eab375e4b888e686cbbaf2a
[root@ccx ~]#
参数解释
/data:/var/lib/mysql
:将容器中的数据分贝到本地/data目录中-e MYSQL_ROOT_PASSWORD=haha
: 容器的root密码-e MYSQL_DATABASE=wordpress
:创建一个wordpress数据库【自定义的名称】
获取mysql容器IP,待会需要用
可以看到这个容器的ip是:172.17.0.2
[root@ccx ~]# docker inspect db | grep IPA"SecondaryIPAddresses": null,"IPAddress": "172.17.0.2","IPAMConfig": null,"IPAddress": "172.17.0.2",
[root@ccx ~]#
创建wordpress容器
常规搭建
- 注:创建这个需要开启防火墙:
systemclt start firewalld
如果不开启防火墙,创建会报如下错误:
[root@ccx ~]# docker run -dit --name=blog --restart=always -v /blog:/var/www/html -p 80:80 -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha -e WORDPRESS_DB_NAME=wordpress hub.c.163.com/library/wordpress
783b36c5b95b0a1c59ade6d4a262c1026ff1acdd6e48f821fbcf25647056576e
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint blog (a1b4c8d66e5a74c7fdddc78f7299b7168cab3c20ecc0fc3c83402040a9ba6186): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT --to-destination 172.17.0.3:80 ! -i docker0: iptables: No chain/target/match by that name.(exit status 1)).
- 创建成功如下
[root@ccx ~]# docker run -dit --name=blog --restart=always -v /blog:/var/www/html -p 80:80 -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha -e WORDPRESS_DB_NAME=wordpress hub.c.163.com/library/wordpress
c34d8efdf953e576089065897d71a20367b03a6e9967db278144de3740c6884d
- 参数解释
-v /blog:/var/www/html
:是将容器/var/www/html的文件存储到本地的/blog中-p 80:80
将容器的80端口映射到本机的80端口WORDPRESS_DB_HOST==mysql 的ip
WORDPRESS_DB_USER=哪个用户连接
WORDPRESS_DB_PASSWORD=连接密码
WORDPRESS_DB_NAME=使用哪个库
使用link【别名】【方式一】
- 注:使用这个搭建需要先删除之前创建的wordperess容器,我只是做出说明,就不做删除创建操作了
[root@ccx ~]# #docker run -dit --name=blog --restart=always -v /blog:/var/www/html -p 80:80 --link=db:xx -e WORDPRESS_DB_HOST=xx -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha -e WORDPRESS_DB_NAME=wordpress hub.c.163.com/library/wordpress
[root@ccx ~]#
- 在常规搭建上的修改说明
- 新增一行:
--link=db:xx
:别名的意思,就是当使用xx主机,就相当于使用db容器 - 修改行:
WORDPRESS_DB_HOST=xx
将主机名改为别名
- 新增一行:
使用link【别名】【方式二】
- 注:使用这个搭建需要先删除之前创建的wordperess容器,我只是做出说明,就不做删除创建操作了
[root@ccx ~]# #docker run -dit --name=blog --restart=always -v /blog:/var/www/html -p 80:80 --link=db:mysql hub.c.163.com/library/wordpress
[root@ccx ~]#
- 在常规搭建上的修改说明
- 修改行:
--link=db:mysql
:这种别名修改就是,db容器使用mysql - 删除行:后面的参数全给删了,删的原因是,都使用默认的,而默认值可以在镜像介绍中查看
- 修改行:
测试
- 上面2个步骤做完以后,就可以使用浏览器访问主机IP的80端口,这样就可以看到wordpress容器中的博客内容了。
- 如:我现在的主机ip是
192.168.16.128
[root@ccx ~]# ip a |grep 192inet 192.168.16.128/24 brd 192.168.159.255 scope global noprefixroute dynamic ens33inet 192.168.16.129/24 brd 192.168.159.255 scope global noprefixroute dynamic ens34inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
[root@ccx ~]#
- 那么就在浏览器中输入
192.168.16.128
即可【默认80端口可以不用输入】
我上面的用户名是root
,密码是haha
注册成功如下图
用刚才注册的用户名登陆上去就是如下图了
报错处理
You have to remove (or rename) that container to be able to reuse that name
- 这种情况是因为创建某个容器的时候,意外失败了,再次创建的时候就会报下错
[root@ccx ~]# docker run -dit --name=blog --restart=always -v /blog:/var/www/html -p 80:80 -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha -e WORDPRESS_DB_NAME=wordpress hub.c.163.com/library/wordpress
docker: Error response from daemon: Conflict. The container name "/blog" is already in use by container "54c6c70f6cc37749e72a654ba5a53bd35fe822a194c5cff2706571e3fe7721d9". You have to remove (or rename) that container to be able to reuse that name.
这种情况使用:docker ps -a
是可以看到刚才创建的容器存在的,只是状态不是run罢了
- 解决方法
删除掉创建的这个容器即可,如上,我的name是blog
[root@ccx ~]# docker rm blog
blog
[root@ccx ~]#
failed: port is already allocated
- 这部一般是上面创建wordpress的时候报错的,全部报错内容如下
[root@ccx ~]# docker run -dit --name=blog --restart=always -v /blog:/var/www/html -p 80:80 -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha -e WORDPRESS_DB_NAME=wordpress hub.c.163.com/library/wordpress
235afb37d724431e3489b3efdbc0173be3bc47727c5a0cbc673de7c90b686288
docker: Error response from daemon: driver failed programming external connectivity on endpoint blog (eb4f1d1ae1c98f0ede1d842c91ea04dd566af9f34c46bda0388039c8b888131f): Bind for 0.0.0.0:80 failed: port is already allocated.
- 原因
这是因为端口被占用了,如下,我的是有一个nginx容器存在,占用了我的80端口
[root@ccx ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b033eb76f52 hub.c.163.com/library/mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp db
b245ace74000 nginx:v1 "nginx -g 'daemon of…" 4 weeks ago Up 7 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web
- 解决方法
干掉我的nginx容器即可创建成功了
[root@ccx ~]# docker rm web -f
[root@ccx ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b033eb76f52 hub.c.163.com/library/mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp db
容器创建成功,浏览器打开提示“无法显示此网页”
报错如下
如果是常规情况,我们可以直接关闭防火墙即可,但这是容器创建的wordpress,不能关闭防火墙,防火墙关了wordpress容器就自动停了【拍错步骤在下面,不要跳过,一步一步跟着走】
首先要确定虚拟机上的这2个容器状态为
UP
[root@ccx ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92ae6f30b0de hub.c.163.com/library/wordpress "docker-entrypoint.s…" 18 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp blog
0b033eb76f52 hub.c.163.com/library/mysql "docker-entrypoint.s…" 23 minutes ago Up 13 minutes 3306/tcp db
[root@ccx ~]#
- 确定80端口是被监听的
[root@ccx ~]# netstat -netlp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 101265 22294/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 0 101488 22299/docker-proxy
[root@ccx ~]
- 在主机上是能ping通该虚拟机的,所以排除主机到虚拟机网络不通问题
- 去虚拟机上curl测试,好家伙这上面也不能,主机上肯定不通了
[root@ccx ~]# curl 192.168.16.128
curl: (7) Failed connect to 192.168.16.128:80; Connection refused
[root@ccx ~]#
- 我在网上找了挺多方法的,最后都没有解决,所以我就不放我试过失败的方法了,直接放成功的方法
【前提是满足上面所有条件】
解决方法是:重启wordpress这个容器就可以了,挺离谱的,但就是这么简单就解决了。
[root@ccx ~]# docker stop blog
blog
[root@ccx ~]# docker start blog
blog
[root@ccx ~]#
[root@ccx ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
92ae6f30b0de hub.c.163.com/library/wordpress "docker-entrypoint.s…" 24 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp blog
0b033eb76f52 hub.c.163.com/library/mysql "docker-entrypoint.s…" 29 minutes ago Up 19 minutes 3306/tcp db
[root@ccx ~]
[root@ccx ~]# netstat -netlp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 101265 22294/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 0 101488 22299/docker-proxy
[root@ccx ~]# curl 192.168.16.128 #因为这网站没打开过,所以是没内容的,只要不报错就可以了
[root@ccx ~]#
- 只要curl不报错,这时候去浏览器输入该ip,肯定就不会报错了。
下面是我注册好并登陆以后的主页,我觉得还挺好看的哈。
总结
docker搭建服务就是这么简单,只要有相关的容器,就可以极简单的搭建出来啦。
使用docker搭建个人博客相关推荐
- 用Docker搭建WordPress博客
目录 用Docker搭建WordPress博客 一.WordPress简介 二.Docker安装 三.下载mysql镜像及wordpress镜像 四.启动mysql及wordpress 五.访问及初始 ...
- 使用 Docker 搭建 WordPress 博客
Docker Docker 是一个应用容器引擎,可以将应用运行时环境打包到一个容器中,打包后的容器可移植到任何一个 Linux 环境下运行,能有效避免繁琐的配置步骤,下面是使用 Docker 搭建 W ...
- VPS服务-Docker搭建个人博客网站
容器安装 本人购买的 VPS 服务器是 Centos 8 操作系统,为了基于 Docker 搭建 WordPress 个人博客网站,首先需要安装 Docker 环境的过程如下: 1.下载 docker ...
- 使用Docker搭建WordPress博客(三)nginx镜像制作
1.查看创建nginx镜像所有文件 [root@localhost nginx]# ls default.conf Dockerfile fastcgi_params run.sh 2.创建Docke ...
- 如何使用Docker搭建Halo博客平台,超简单的操作,小白也会
Halo [ˈheɪloʊ],一款现代化的开源博客/CMS系统,值得一试 前 言 拥有一个自己的博客网站,上传自己的经验文章,或者可以把它作为备忘录.日记,想想是不是很酷✨ 能做博客的软件平台有很多, ...
- Docker 搭建个人博客(solo)
一.官方文档 GitHub - 88250/solo:
- docker,mysql,wordpress搭建个人博客
文章目录 设置仓库 更新 apt 包索引 安装 apt 依赖包,用于通过HTTPS来获取仓库: 添加 Docker 的官方 GPG 密钥 设置稳定版仓库 安装 Docker Engine-Commun ...
- docker安装halo+mysql+nginx搭建个人博客
docker 安装halo+mysql+nginx搭建个人博客(debian or ubuntu) 1 简介 本文主要介绍debian和国内腾讯云ubuntu下安装docker,使用docker安装h ...
- 使用dokcer搭建个人博客网站
使用dokcer搭建个人博客网站 一.检查当前docker版本 二.安装dokcer及docker-compose链接 三.拉取wordpress镜像 四.拉取mysql镜像 五.创建yml文件 1. ...
- Springboot搭建个人博客系列
前言 为什么想要搭建这个博客? 我还记得,在大二寒假的某天,同往常一样的在家解决这某个bug,不停地问度娘,很巧的碰到了一个同行在他的博客中完美的记录了我的bug的解决方案,随后我又看了看他写的其他博 ...
最新文章
- Jenkins的错误“error fetching remote repo origin”的问题解决
- jdbc mysql 函数 慢_java jdbc addBatch()提交mysql速度过慢
- SAP BW查看数据源提取方法
- 基于区块链的健康链系统设计与实现(4)系统实现
- KNN识别手写数字MNIST
- 如何做PHD (1)
- java 类 方法继承_java – 在方法重写中返回继承的类而不是超类
- BTREE这种Mysql默认的索引方式,具有普遍的适用性
- 背景半透明(HTML、CSS)
- cookie与session的比较
- JAVA 1.7并发之LinkedTransferQueue原理理解
- 【渝粤教育】国家开放大学2018年春季 0408-21T管理学基础 参考试题
- 数学建模:现代优化算法之粒子群算法
- 嵌入式Linux--使用libpng库解码png图片
- 短视频去水印接口支持全网解析源码/自定义API接口
- java 什么是过滤器_java中的过滤器是什么
- python pipe_python pipe模块用法
- 网站移动端和pc端服务器是分开的,PC端和移动端选择哪种URL路径比较好
- 通过hutool工具包实现将数据库中的全量数据导出,一张表一个sheet页,包含目录页,目录页和sheet页之间可以互相跳转
- C++中string类下的begin,end,rbegin,rend的用法
热门文章
- 远程连接oracle6,win7 64位远程连接oracle11g64位
- 计算机如何用vb文本加密,怎么样用VB编写一个文件加密程序
- 二维码在线生成接口API
- Windows 微信多开
- php 查询数据传值,php-如何在Laravel中传递数据进行查看?
- Codeforces Global Round 16 D2. Seating Arrangements (hard version)
- java画图板可选颜色,java学习——画图板
- 【迁移学习】Self Paced Adversarial Training for Multimodal Few-shot Learning论文解读
- OCR(图片识别)之 百度 VS 谷歌
- 热力图回归Adaptive Wing Loss [ICCV2019] 论文阅读