一. 在有网环境下拉取Nginx镜像
1. 该指令没有指定nginx版本号,会拉取最新的镜像,相当于docker pull nginx:latest
docker pull nginx
docker images # 查看镜像
2. 但是我想把TAG改成确定的版本号,先查看该nginx的镜像的版本
docker image inspect nginx:latest | grep -i versiondocker image inspect nginx:latest | grep -i version
3. 修改TAG
docker tag [IMAGE ID] [REPOSITORY]:[版本号]
docker tag 605c nginx:1.21.5
4. 打包nginx镜像,并把nginx.tar包放到无网环境服务里
docker save -o nginx.tar nginx:1.21.5
二. 在无网环境下的docker安装nginx
1. 加载nginx.tar包
docker load -i nginx.tar
查看结果
2. 创建映射目录
# 创建挂载目录
mkdir -p /usr/local/nginx/conf
mkdir -p /usr/local/nginx/log
mkdir -p /usr/local/nginx/html
3. 然后运行nginx容器,并将容器里的文件复制到宿主机对应的文件夹
# 生成容器
docker run --name nginx -p 80:80 -d nginx:1.21.5
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /usr/local/nginx/
4. 复制完容器里对应的文件后,将容器删除
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
5. 配置nginx.conf
我的nginx.conf配置:
注意:在nginx.conf里涉及都路径都是nginx容器里的路径,如果要使用宿主机的路径,必须在创建容器时【下面第6步】映射对应目录
er 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;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html; #注意!这里是容器中路径,不是宿主机里的路径
}
server {
listen 9002;
server_name localhost;
root /usr/share/nginx/html; #注意!这里是容器中路径,不是宿主机里的路径
location /panos_xu {
# 跨域设置
add_header 'Access-Control-Allow-Credentials' true;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type.*';
root /home/data/; #注意!这里是容器中路径,不是宿主机里的路径
autoindex on;
}
}
}
6. 创建和启动容器
因为我个人的需要,监听了80和9002端口,未来可能还需要监听更多的端口,所以如下命令:
docker run --net host \
--name nginx \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/log:/var/log/nginx \
-v /home/data:/home/data
-d nginx:1.21.5
单行指令
docker run --net host --name nginx -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/log:/var/log/nginx -v /home/data:/home/data -d nginx:1.21.5
命令 | 描述 |
---|---|
-d | 后台运行 |
–net host | 映射全部端口,由nginx.conf里配置实际的端口。如果你不想映射全部端口,则可以用 -p 宿主机端口:容器端口(如 -p 9002:80)替代该指令 |
–name nginx | 容器的名字 |
-v /usrl/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf | 挂载nginx.conf配置文件 |
-v /usrl/local/nginx/conf/conf.d:/etc/nginx/conf.d | 挂载nginx配置文件 |
-v /usr/local/nginx/html:/usr/share/nginx/html | 挂载nginx内容 |
-v /usr/local/nginx/log:/var/log/nginx | 挂载nginx日志文件 |
-v /home/data:/home/data | 挂载静态文件目录,必须与nginx.conf的location下的root路径对应上,如果你不需要配置location的root映射宿主机目录,可省略 |
nginx:1.21.5 | 镜像名称 |
注意:修改nginx.conf后,需要重启nginx容器
docker restart [容器id]