在centos7上用docker安装nginx
一、拉取nginx镜像,生成容器
docker pull nginx
如果报这种错,就是镜像源的问题。如果没报错直接跳到第二点。
1.配置镜像源
vim /etc/docker/daemon.json
然后输入下面的内容
{ "registry-mirrors":[ "https://i1el1i0w.mirror.aliyuncs.com", "https://hub-mirror.c.163.com", "https://registry.aliyuncs.com", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn" ] }
2.重启docker服务
重启进程
sudo systemctl daemon-reload
重启服务
sudo systemctl restart docker
然后再拉取,就成功了!
二、获取镜像后,来运行容器。
查镜像命令
docker images
运行镜像生成容器命令,nginx 默认的内部端口是80,我们给映射为4043.
docker run --name=nginx -d -p 4043:80 nginx
上面命令的解释如下: 1、--name:设置容器的名称。 2、-d:表示在后台运行容器。 3、-p:指定端口映射。4043是宿主机的端口,供外部访问,80是Nginx容器内部的端口。 4、nginx:表示根据nginx镜像运行容器。 5、run 表示运行容器,如果镜像不存在,会自动调用 pull 命令拉取镜像
查询容器命令
docker ps
现在就可以通过(ip+端口)访问了。
三、配置nginx 相关映射,映射到项目的容器、实现反向代理。
进入nginx容器中,查看nginx配置内容是什么样的。
docker exec -it nginx /bin/bash
发现root账号后面已经变了,说明已经进到容器内部了。
我们主要是进去看他配置文件。跟着找以下目录。
接下来我们vim进去看一下这个配置文件。
然后报错了。需要我们安装一下这个vim源。
apt-get update --先更新来源 apt-get install -y vim --安装 vim
再用vim命令进到nginx.conf 文件中看配置
看箭头位置,表示默认读取的是这个conf.d这个目录下的文件进行的配置。
那么我们进去看看这个目录下是什么
其实所谓的映射 挂载的目的,就是为了让 容器内的目录或者文件跟 服务器上的本地文件或目录互相同步数据。
那么我们在服务器root目录下创建nginx需要用到的一些文件存储目录,用作服务跟nginx的映射数据。
退出我们当前所在的容器。exit
执行命令,创建三个文件夹。www、logs、conf
mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf
接下来 查看一下nginx容器id是多少。
将nginx容器中 conf.d目录下的配置文件 拷贝到本地。cp是拷贝命令
docker cp 容器ID:/etc/nginx/conf.d/default.conf /root/nginx/conf
需要给netcore容器配置反向代理,要知道core项目容器的 地址。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名 or 容器Id
这个172.17.0.2,这个IP是docker 容器内的ip 如果用docker的方式 就要用这个ip去配置下面的内容。
然后使用vim命令编辑 default.conf 文件(这个目录下:/root/nginx/conf),将文件内容设置如下:
server{ listen 7744; charset utf-8; server_name 172.17.0.2; location / { proxy_pass http://172.17.0.2:9527; proxy_redirect default; } }
解析:
server{ listen 7744; //这个是监听端口 charset utf-8; server_name 172.17.0.2; //这个ip就是你发布的容器项目的ip location / { proxy_pass http://172.17.0.2:9527; 这个是你发布的项目容器的内部端口 proxy_redirect default; } }
然后创建一个新的nginx容器,将www,logs,conf,文件映射到你刚刚建的目录。
4030这个端口就是你访问的端口。7744是你发布的项目的docker内部端口。
docker run -d -p 4030:7744 --name nginxapi \ -v /root/nginx/www:/usr/share/nginx/html \ -v /root/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf \ -v /root/nginx/logs:/var/log/nginx \ nginx
参考:Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(二) - 找.net工作(北京) - 博客园 (cnblogs.com)
参考:Docker教程:使用Docker容器运行Nginx并实现反向代理 - .NET开发菜鸟 - 博客园 (cnblogs.com)