使用nginx实现一个主机部署多域名指向不同docker项目
1,安装 docker
# Install required packages. yum-utils provides the yum-config-manager utility, and device-mapper-persistent-data and lvm2 are required by the devicemapper storage driver. yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
使用阿里源:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
使用官方源:
# Use the following command to set up the stable repository. You always need the stablerepository, even if you want to install builds from the edge or test repositories as well. yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
# Install the latest version of Docker CE, or go to the next step to install a specific version.
yum install docker-ce
使用Docker 中国加速器
vim /etc/docker/daemon.json
添加下面代码
{ "registry-mirrors" : [ "https://registry.docker-cn.com" ], "live-restore" : true }
(这个文件 初始状态是空的 只有“{}”)
启动服务
systemctl start docker
systemctl restart docker --重启
systemctl stop docker --停止
查看版本
docker version
查看状态
service docker status
2,安装nginx
配置Nginx最新源
vim /etc/yum.repos.d/nginx.repo
添加下列内容
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
查看nginx源
yum info nginx
执行安装
yum install nginx
启动服务
systemctl start nginx
systemctl restart nginx --重启
systemctl stop nginx --停止
啥也不显示表示正常启动,如显示
表示启动出错,看这里解决 https://blog.csdn.net/a1007720052/article/details/82255226
输入http://服务器IP/ 如果能看到nginx的界面,就表示安装成功了
3,把项目推送到docker hub
需要先执行 docker login 登录到 docker hub
docker push ejiyuan/demo-docker
命令后面的 image tag 必须是 docker hub 用户名 + “/” + 项目名称形式,如果“/”与当前登录的用户名不对应 会提示没有权限
Error response from daemon: pull access denied for io/webapp, repository does not exist or may require 'docker login'
你可以使用下列命令修改镜像tag名称后再进行推送
docker tag io/webapp ejiyuan/webapp
4,从docker hub 中拉取 项目 docker image
在你需要部署的服务上安装docker 先执行 docker login 登录到 docker hub 然后执行下列命令拉取镜像到你的服务器上
docker pull ejiyuan/demo-docker
docker pull [image 名称]
5,启动 docker运行镜像服务
查看镜像文件
运行镜像到容器中:
docker run -p 127.0.0.1:9000:8080 -t docker.io/ejiyuan/demo-docker
docker之进入启动容器查看目录结构:docker exec -it containerID /bin/bash 或 docker exec -it containerID /bin/sh
这里我不想将9000端口暴露给外网(所有请求都从nginx,映射过来,也就是仅对往外开放80端口)所有限定ip:127.0.0.1,如果你既想实现通过指定域名访问,又想通过外部 “ip+端口” 访问,这里去掉127.0.0.0即可
检查是否正常运行:
方法1,使用curl透一下:
我的默认控制器会返回 hello Docker World
方法2,检查服务运行状态
方法3,使用 docker ps命令查看运行的容器
6,配置nginx:
vim /etc/nginx/nginx.conf
修改或添加一个server标签
server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } #下面是自定义配置 端口转发 server { listen 80; server_name www.abc.com;# 这里配置我们的域名,确定域名已解析到本机 location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:9000; #转发到本机9000端口 } }
重启nginx:
systemctl restart nginx
在浏览器访问你的域名 www.abc.com
查看 docker项目容器运行日志
7,参考文档
在Docker容器环境中用Let's Encrypt部署HTTPS