一、安装docker
1.1 centos 7使用yum安装
# Sep 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CEsudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务sudoservice docker start# 查看vesiondocker version
1.2 配置镜像加速器
阿里云容器镜像服务:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
关于镜像加速器
使用加速器可以提升获取Docker官方镜像的速速
sudomkdir-p /etc/docker sudotee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["加速器地址"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
1.3 简单操作-运行一个nginx
# 搜索nginx的镜像docker search nginx # 拉取latest版本的nginx镜像docker pull nginx:latest # 查看本地存储的镜像docker images # 运行容器docker run --name nginx -p80:80 -d nginx # 进入容器内部docker exec -it nginx bash
1.3.1 命令参数说明
- --name nginx指定容器名称为nginx
- -p 80:80端口映射,将本地80端口映射到容器内部的80端口
- -d 设置容器在后台一直运行
- nginx 指定运行的镜像
1.3.2 其他参数
- -v 挂载映射目录
二、部署nginx
2.1 复制容器内的nginx的配置文件
docker cp nginx:/etc/nginx /data/nginx
复制过来的结构
其中目前用到的有nginx.conf
配置文件和conf.d文件夹下的default.conf
默认配
置文件
说明 |
文件 |
挂载路径 |
容器nginx路径 |
nginx相关 |
nginx.conf和conf.d |
/data/nginx |
/etc/nginx |
html路径 |
html文件夹 |
/data/nginx/html |
/usr/share/nginx/html |
日志文件 |
log文件夹 |
/data/nginx/logs |
/var/log/nginx |
2.1.1 拓展
docker cp命令
// 将容器内文件复制到宿主机中
docker cp [容器名称]:/目录 /目录
// 将宿主中的文件复制到容器内部
docker cp /目录 [容器名称]:/目录
2.2 创建其他挂载目录
mkdir-p /data/nginx/{html,logs}
2.3 修改default.conf文件
server { #端口号 listen 80; #定义使用 localhost 访问 server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { #根目录位置 root /usr/share/nginx/html; #index 文件位置 index test.html; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500502503504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #}}
2.4 在html文件夹下创建test.html网页
<html><head><title>Mynginx</title></head><body><h1>Hello Nginx!!! </h1></body></html>
2.5 删除之前创建的容器
docker stop nginx docker rm nginx
2.6 创建新的容器
docker run --name nginx -d-p80:80 \ -v /data/nginx/html:/usr/share/nginx/html \ -v /data/nginx/logs:/var/log/nginx \ # 上面因为已经将nginx容器中的nginx文件夹整个cp过来的# 这里将挂载映射整个文件夹# 为后面实现ssl做铺垫-v /data/nginx:/etc/nginx \ nginx
2.7 不停止nginx更新配置文件
2.7.1 第一种
# 进入到nginx容器的内部docker exec -it nginx bash# 测试配置文件是否有问题,显示successful证明配置文件没有问题nginx -t# 更新nginx -s reload
2.7.2 第二种
第一种是进入到容器内部,有些繁琐
下面将两者整合
# 后面的nginx -t是nginx的命令docker exec [容器名称(nginx)] nginx -t# 后面的nginx -s reload是nginx的命令docker exec [容器名称(nginx)] nginx -s reload
三、配置ssl
3.1 购买阿里云的免费证书
阿里云每年可以有20张免费的证书,即可以为20个域名提供ssl
https://yundun.console.aliyun.com/?p=cas#/certExtend/free
3.2 创建证书关联域名解析
域名解析:https://dns.console.aliyun.com/#/dns/domainList
完成签发之后,状态这一栏会是这个样子
继续点击“下载
”,下载我们需要的服务器证书,这里选择nginx
3.3 配置证书
3.3.1 创建证书存放目录
mkdir /data/nginx/ssl
3.3.2 上传证书
将下载的证书解压,上传到这个存放目录中
会有xxx.pem和xxx.key这两个文件
由于我们在运行容器的时候已经挂载了-v /data/nginx:/etc/nginx
这个时候我们进入到容器内部
docker exec -it nginx bash
在/etc/nginx/ssl文件夹中发现这两个文件
cd /etc/nginx/ssl ls-lh
3.3.3 查看挂载配置
docker inspect nginx
3.4 修改配置文件
配置方式可以使用下载证书旁边的帮助,在Nginx或Tengine服务器上安装证书
#以下属性中,以ssl开头的属性表示与证书配置有关。server { listen 443 ssl; #配置HTTPS的默认访问端口为443。#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 server_name yourdomain; root html; index index.html index.htm; ssl_certificate /etc/nginx/ssl/cert-file-name.pem; ssl_certificate_key /etc/nginx/ssl/cert-file-name.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。 ssl_prefer_server_ciphers on; location / { root html; #Web网站程序存放目录。 index index.html index.htm test.html; } } # 注意 以下代码片段需要放置在nginx.conf文件中server {}代码段后面,即设置HTTP请求自动跳转HTTPS后,nginx.conf文件中会存在两个server {}代码段。server { listen 80; server_name yourdomain; #需要将yourdomain替换成证书绑定的域名。 rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 location / { index index.html index.htm test.html; } }
3.5 刷新配置文件
docker exec nginx nginx -tdocker exec nginx nginx -s reload
访问配置的域名,就会看到自己创建的界面了
由于我们没有将/usr/share/nginx/html
中的原始默认页面cp
过来,所以不会看到熟悉的nginx
的默认页面。