假设docker已经安装好了,如果没有安装,可以照着 5分钟安装docker教程

一. 下载镜像

默认下载最新版本,如果想指定对应版本,可以用冒号后加版本,像这样mysql:5.7

docker pull mysql:5.7
docker pull wordpress
docker pull nginx

二. 启动container实例

已经下载好了image,接下来启动container,需要分别启动mysql,wordpress,nginx。

1. 启动mysql

因为wordpress是需要安装数据库的,这里安装mysql并且启动:

docker container run -d \
--name wordpressdb \
-p 3306:3306 \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7

各个参数含义:

-d: 指定容器以守护进程方式在后台运行;

--name: 指定容器名称,此处我指定的是wordpressdb;

-env 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码

-p: 指定主机与容器内部的端口号映射关系,

[宿主机端口号]:[容器内部端口],此处我使用了主机3306端口,映射容器3306端口;

mysql:5.7 是nginx的镜像IMAGE ID前4位

这些参数中涉及了一些名词,如果看不懂,建议去看看docker的基本概念。简单来说就是,docker技术通过image这种模板,生成contaienr实例,下次还可以再生成一个contaienr实例,image像是一个模板,可以多次使用。contaienr实例可以看作小型的虚拟机,多个虚拟机在局域网里面,需要将端口映射到宿主机上面,我们都知道直接访问局域网的内网ip是不能访问的,通过宿主机的公网ip:映射的端口即可访问了。

2. 启动wordpress

docker安装wordpress,相比docker安装mysql,这里相比多了两个参数,后面会解释。如果安装成功,通过docker ps可以看到wordpress的进程,浏览器输入ip:8080,应该是可以在网页安装wordpress了。

docker run -d \
--name wordpress \
--link wordpressdb:mysql \
--volume "$PWD/wordpress":/var/www/html \
-p 8080:80 \
wordpress

--link:关联mysql容器,如果是使用非docker安装的mysql,比如自己手动安装的mysql,可以通过参数--env指定数据库连接:

-e WORDPRESS_DB_HOST=192.168.80.129:3306 \
-e WORDPRESS_DB_USESR=root \
-e WORDPRESS_DB_PASSWORD=123456

--volume:将容器的/var/www/html映射到当前目录下,这样直接操作当前目录,即可操作容器目录,否则还得进去容器操作,我们都知道容器是一个阉割版的小型虚拟机,像vim这种常用命令默认是没有的;

注意:wordpress容器默认开的是80端口,这里将容器的80端口映射到宿主机的8080端口,为什么不也映射到80端口呢,因为后面要安装nginx,nginx一般要监听80端口,云服务商一般配置域名:ikeguang.com绑定云主机的80端口,所以最后nginx只能由nginx占用宿主机的80端口,避免不必要的麻烦。

3. 启动nginx

如果上面wordpress安装好了,网站可以通过ip地址正常访问,发布文章了,可以考虑绑定域名了,加个nginx进行反向代理。

1). 配置http访问:

nginx配置

http访问的时候,默认一个server监听80端口即可;如果配置https,需要加个server,监听443端口,这里先把http访问配置好再说,贴出了我的配置:

include /etc/nginx/conf.d/*.conf;
server{
listen 80;
server_name ikeguang.com www.ikeguang.com; location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主机ip:8080;
}
}

这里http://宿主机ip:8080,因为前面我们的wordpress映射宿主机的端口是8080,这里nginx代理宿主机8080端口,也就是说你访问80端口(nginx),相当于代理访问了8080端口(wordpress),并且云服务商配置的域名也是绑定80端口,这样访问域名,就访问了8080端口的wordpress了,就能访问网站了。

说明:因我wordpress启动端口不是80,需要添加配置:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

启动nginx容器

既然nginx.conf配置好了,接下来启动nginx容器:

docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx

这里需要注意:

  • 这里将容器的目录/etc/nginx映射,需要先通过docker cp命令复制一份完整nginx的目录到宿主机,然后修改文件,再执行上面docker run命令。文件夹映射的时候,文件夹里面的所有文件应该是一样的,文件内容可以不一样。

经过上面的配置,应该是可以通过浏览器输入域名:ikeguang.com访问网站了。

2). 配置https访问:

经过前面的配置,通过域名应该可以访问网站了,接下来配置https:

nginx.conf配置:

include /etc/nginx/conf.d/*.conf;
server {
#监听443端口
listen 443 ssl;
#对应的域名
server_name ikeguang.com www.ikeguang.com;
ssl_certificate ssl/1_ikeguang.com_bundle.crt;
ssl_certificate_key ssl/2_ikeguang.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主机ip:8080;
}
}
server{
listen 80;
server_name ikeguang.com www.ikeguang.com;
#把http的域名请求转成https
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主机ip:8080;
}
}

把前面启动http的nginx容器删除,配置好ssl证书,再次启动,需要启动80端口和443端口。

docker run -d -p 80:80 -p 443:443 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx
  • -p 443:443,如果配置ssl,才需要这个参数,开始去掉,这里先把域名绑定成功,http可以访问了,再进行第二步配置https访问,ssl证书可以在云服务商那里申请免费的,然后按照帮助文档安装即可,没啥坑。

docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https的更多相关文章

  1. Nginx反向代理的配置

    Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...

  2. nginx反向代理的配置优化

    作者:守住每一天 blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmai ...

  3. Centos7 nginx 反向代理的配置

    一.正向代理与反向代理 1.正向代理 正向代理往VPN理解 正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说: 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这 ...

  4. 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动

    之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...

  5. 腾讯云下安装 nodejs + 实现 Nginx 反向代理

    本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理. 笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑 ...

  6. Nginx反向代理websocket配置实例

    最近有一个需求,就是需要使用 nginx 反向代理 websocket,经过查找一番资料,目前已经测试通过,本文只做一个记录 复制代码 代码如下: 注: 看官方文档说 Nginx 在 1.3 以后的版 ...

  7. 服务器上nginx反向代理的配置

    Nginx不但是一款高性能的Web服务器,也是高性能的反向代理服务器.下面简单说说Nginx的反向代理功能. 反向代理是什么? 反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发 ...

  8. nginx反向代理缓存配置

    关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...

  9. Nginx反向代理搭建配置

    1.反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个 ...

  10. Tomcat多个项目部署,通过Nginx反向代理分别配置二级域名的流程

    购买域名.示例:example.com 设置多个二级域名.如图: 配置tomcat文件: 修改tomcat/conf目录下的server.xml文件: 如下配置配置了3个容器,使用三个不同的端口. 请 ...

随机推荐

  1. 根据当前设备的宽度,动态计算出rem的换算比例,实现页面中元素的等比缩放

    ~function anonymous(window){ //根据当前设备的宽度,动态计算出rem的换算比例,实现页面中元素的等比缩放 let computedREM = function compu ...

  2. C# 检测某版本VC++是否安装

    一.根据微软的产品号GUID,调用msi.dll class Program { static void Main(string[] args) { if (GetProcuct("{GUI ...

  3. uwp 基础知识

    (TitleId,DiaplayName,args,LogoUri,size); Obj.VisualElements.ShowNameOnSquare150x150Logo = true; if ( ...

  4. 深入浅出Mybatis系列(八)---objectFactory、plugins、mappers

    1.objectFactory是干什么的? 需要配置吗? MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成.默认的对象工厂需要做的仅仅是实例化 ...

  5. 2018.7.31-2018.8.2记:关于maven

    maven的使用,用得好,则省力省事,但是用不好则会造成一堆莫名其妙的错误,maven在使用的时候,jar包下载异常终止尤为需要注意,很容易就终止了,并且会出现一些下载出空jar包的情况,即:jar包 ...

  6. 算法入门 - 链表的实现及应用(Java版本)

    之前我们学习了动态数组,虽然比原始数组的功能强大了不少,但还不是完全纯动态的(基于静态数组实现的).这回要讲的链表则是正儿八经的动态结构,是一种非常灵活的数据结构. 链表的基本结构 链表由一系列单一的 ...

  7. RabitMq过期时间TTL

    第一种:给消息设置过期时间 启动一个插件 @Bean public DirectExchange DirectExchange() { return new DirectExchange(" ...

  8. el-upload上传文件和表单一起提交+后端接收代码

    目录 一.前言 二.前端页面展示 三.表单代码 四.Data部分 五.JS方法 六.后端接收方式 七.总结 一.前言 我们在做前端时,会遇到这样的需求,上传Excel文件,并且还要和填写的表单数据,一 ...

  9. 硬核! Github上 ,star超高的Java 开源项目分享给你!

    Awsome JavaGreat Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序员 ...

  10. linux centos7 增加操作日志记录

    2021-08-24 1. 需求产生原因 linux 系统中的日志存放在目录 /var/log/ 下,今天想看看我之前的操作记录,发现系统中的日志并不包括各个用户操作文件的记录,所以打算自己建一个. ...