docker中安装nginx
一、在线下载nginx
1.1 使用docker pull命令来下载nginx
1.1.1 获取nginx镜像列表
docker search nginx
这里我们拉取官方的最新版本的镜像:
docker pull nginx:latest
1.1.2 拉取nginx镜像到本地
(注:默认选取官方最新镜像),其它版本可以去DockerHub查询
docker pull nginx
1.1.3 查看镜像库,获取本地的nginx镜像信息
注:记录下IMAGE ID前四位,后边使用
docker images nginx
1.1.4 启动容器,部署nginx并修改配置文件
首先测试下nginx镜像是否可用
使用docker run -di --name mynginx -p 80:80 nginx 创建并启动nginx容器
-d 指定容器以守护进程方式在后台运行
–name 指定容器名称,此处我指定的是nginx
-p 指定主机与容器内部的端口号映射关系,格式 -p [宿主机端口号]:[容器内部端口],此处我使用了主机80端口,映射容器80端口
在浏览器访问CentOS主机,会看到nginx欢迎页,如果你是云服务器,请记得开放对应的外网端口!!!!
1.1.5 修改nginx的配置文件
这里有两种方式解决这个问题:
1.1.5.1 方式一:每次都进入到nginx容器内部修改
每次都进入到nginx容器内部修改。适合改动少,简单使用的情况
执行 docker exec -it ef /bin/bash
进入到nginx容器内部
exec 命令代表附着到运行着的容器内部
-it 是 -i 与 -t两个参数合并写法,-i -t 标志着为我们指定的容器创建了TTY并捕捉了STDIN ef 是我们要进入的容器Id /bin/bash 指定了执行命令的shell
进入到nginx容器内部后,我们可以cd /etc/nginx,可以看到相关的nginx配置文件都在/etc/nginx目录下
而nginx容器内的默认首页html文件目录为/usr/share/nginx/html
日志文件位于/var/log/nginx
执行exit命令我们可以从容器内部退出。
1.1.5.2 方式二:将nginx容器内部配置文件挂载到主机
将nginx容器内部配置文件挂载到主机,之后就可以在主机对应目录修改即可。适合频繁修改,复杂使用的情况 在主机/mnt目录下执行 mkdir -p ./nginx/{html,logs,conf} 创建挂载目录 将容器中的相应文件copy到刚创建的管理目录中
docker cp dbc:/etc/nginx/nginx.conf /docker-work/nginx/
docker cp dbc:/etc/nginx/conf.d /docker-work/nginx/conf/
docker cp dbc:/usr/share/nginx/html/ /docker-work/nginx/html/
docker cp dbc:/var/log/nginx/ /docker-work/nginx/logs/
注:docker cp dbc 中的 "dbc" 为容器ID前缀,只要唯一就好了
停止并移除容器
命令:
停止容器:docker stop dbc
移除容器:docker rm dbc
再次启动容器并作目录挂载
docker run --name nginx -m 200m -p 80:80 \ -v /docker-work/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /docker-work/nginx/logs:/var/log/nginx \ -v /docker-work/nginx/html:/usr/share/nginx/html \ -v /docker-work/nginx/conf:/etc/nginx/conf.d \ -e TZ=Asia/Shanghai \ --privileged=true -d nginx
参数说明:
-name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定
-v 挂载文件用的,
-m 200m 分配内存空间
-e TZ=Asia/Shanghai 设置时区
第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,
第二个-v 表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面
第三个-v 表示的和第一个-v意思一样的。
-d 表示启动的是哪个镜像
命令,重新创建nginx容器
1.1.6 nginx的相关文件
这里先解释一下这几个文件的用途,conf.d是个文件夹,里面有个文件叫default.conf和nginx.conf文件一样是nginx的配置文件,我们可以在这两个文件中书写一些你所需的配置,像啥负载均衡啊,代理,重写跳转页面啥的都是在这配置。当然我们这里是要通过数据卷和nginx里的配置文件连起来使其生效。这里需要注意一点当我们挂载的是文件时,我们需要给文件设置权限不然容器里的文件内容不会随着主机更改而更改chmod 777 nginx.conf。logs文件夹里是日志文件,可以让我们获取到nginx的日志。
1.1.6.1 nginx配置文件
首先我们需要先知道,nginx是怎么工作的,nginx有两个配置文件,conf.d 和 nginx.conf其中conf.d是个文件夹,里面有个文件是default.conf
他们的地址分别为:
/etc/nginx/conf.d
/etc/nginx/nginx.conf
为什么我要提这一嘴呢,因为我们需要对这两个文件进行配置操作,满足我们后续的需求,而在docker中呢下载的nginx镜像是进行缩减过的,只保留了基础的功能,所以我们如果没有使用docker file生成镜像时对nginx进行基本配置是无法在里面使用vi和vim功能和其他一些所需的操作功能,而且就算有我们每次需要进去配置也是比较的不方便,所以我们需要进行数据卷操作,使我们能够更加简单的方便的来操作docker里的服务。
nginx.conf 文件内容:
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
default.conf 文件内容:
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } location /api{ proxy_pass 地址xxxx/api; # access_log "logs/test.log"; } }
这里简单说明下default.conf 文件,这里监听的是80端口,包含了两个转发规则,一个是根路径"/“,一个是”/api",也就是说,当访问服务器的80端口时,走的是这个路由配置,如果前缀是"/api"是走的是下面的代理 proxy_pass
由于上面我们映射了容器的目录到本地,所以我们还需要新建一个欢迎页,因为nginx默认的欢迎页,没有自动映射出来,就很郁闷。
在nginx的文件夹下,新建index.html,一个最简单的html文件,内容如下:
<!DOCTYPE html> <html> <head> <title>网页标题</title> </head> <body> <h1>Hello Nginx.......</h1> </body> </html>
需要注意的:我们在挂载目录的操作,都实际会映射到容器内部,写配置文件的时候一定要注意路径问题!!
修改nginx配置文件我选用的是第二种方式,中间有所改动。
建议:尽量挂载目录而不是挂载文件!
nginx.conf文件中,我这里进行如下操作。
意思就是当用户端访问时判断是手机端还是pc端然后跳转到相应的界面。conf.d文件夹中的default.conf也可以进行配置。另外的logs文件夹就不需要去操作了。
二、离线下载nginx
2.1在能联网的机器上下载:
2.1.1 访问 Nginx 镜像库下载
地址: https://hub.docker.com/_/nginx?tab=tags
http://nginx.org/download
nginx: download
2.1.2 也可在联网的机器上下载
可以通过 Sort by 查看其他版本的 Nginx,默认是最新版本 nginx:latest
加载nginx镜像并查看nginx镜像
#执行
docker save -o /home/fairy/app/nginx.tar nginx:latest
#查看镜像
docker images
2.1.3 把/home/fairy/app/nginx.tar文件上传到无法上网的机器上
执行
mkdir -p nginx/conf mkdir -p nginx/html mkdir -p nginx/log
导入到docker: docker load -i nginx.tar
备注:
docker save 与 docker export 以及 docker load 和 docker import 的区别
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
eg:
cat nginx-1.31.1.tar.gz | docker import - nginx-1.31.1 sha256:8da9f7bebe408050ceeff091abb3da45ed0f219efe17493b87fd17b168da395a
导入并命名为nginx-1.31.1
2.1.4 输入docker images
检查nginx是否已安装
2.1.5 启动
docker run -di --name mynginx -p 80:80 nginx
-name mynginx:容器名称。
-p 80:80: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。
docker run -it -d --name nginx -p 80:80 -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /nginx/html:/usr/share/nginx/html -v /nginx/log:/var/log/nginx nginx:latest