一、docker部署nginx和自家官网

一、docker部署nginx

1.1 docker安装配置nginx

1.1.1 总体步骤

#总体步骤
·	搜索镜像
·	拉取镜像
·	查看镜像
·	启动容器
·	服务端口映射
·	停止容器
·	移除容器

1.1.2 基础操作

1、搜索nginx镜像
[root@docker ~]# docker search nginx --limit 10			#查询nginx的镜像前10份
2、拉取nginx镜像
[root@docker ~]# docker pull nginx:latest				#拉取最新版本的nginx。
#其他版本可以查看https://hub.docker.com/_/nginx/tags。
3、查看镜像
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              605c77e624dd        18 months ago       141MB
4、镜像改名
[root@docker ~]# docker image tag nginx:latest xxqops.icu/nginx:latest		
#把nginx镜像复制改名为xxqops.icu/nginx:latest。必须加上对应的版本。
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              605c77e624dd        18 months ago       141MB
xxqops.icu/nginx    latest              605c77e624dd        18 months ago       141MB
5、删除旧镜像
[root@docker ~]# docker image rm nginx:latest				#删除nginx:latest镜像
Untagged: nginx:latest
Untagged: nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
[root@docker ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xxqops.icu/nginx    latest              605c77e624dd        18 months ago       141MB

1.1.3 启动容器

1、启动容器依赖目前的镜像
[root@docker ~]# mkdir -p  /data/nginx/var/www/index         #创建静态资源映射目录
[root@docker ~]# mkdir -p /data/nginx/log				    #创建日志映射目录
[root@docker data]# docker run -itd --name webserver -p 80:80 -v /data/nginx/var/www/index:/usr/share/nginx/html -v /data/nginx/log:/var/log/nginx xxqops.icu/nginx:latest			#运行容器
8ee4e3736f622541657fcd32db144b5621bc8f1abcc5d7976e07853a61f7609d
启动参数:
#-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
#-i:以交互模式运行容器,通常与 -t 同时使用;     -i::interactive(交互)  -t:tty终端
#-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
#--name:容器名称
#-p:宿主机端口映射容器端口
#-v: 卷的映射。目录映射
2、查看映射是否正确
[root@docker ~]# ll /data/nginx/log/				#映射的目录正确
total 4
-rw-r--r-- 1 root root   0 Jul 14 16:34 access.log
-rw-r--r-- 1 root root 626 Jul 14 16:34 error.log
3、访问nginx
[root@docker ~]# echo "hello world docker world" >> /data/nginx/var/www/index/index.html		#自己写web页面
[root@docker ~]# docker inspect webserver | grep -i "IPADDRESS"								#过滤出容器的ip
[root@docker ~]# docker inspect webserver | grep -i "IPADDRESS" | tail -n 1
                    "IPAddress": "172.17.0.2",
[root@docker ~]# curl 172.17.0.2:80								#访问主页
hello world docker world
4、进入容器
[root@docker ~]# docker exec -it webserver bash					#容器
root@8ee4e3736f62:~# cat /usr/share/nginx/html/index.html 				#宿主机操作容器没有问题!!!
hello world docker world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JTAw9ysI-1689343749455)(E:\教学资料\docker&k8s学习\assets\image-20230714165121703.png)]

二、docker部署自家官网-1

1.1 同步nginx的配置到docker服务器

#第一种方式通过-v卷的方式进行映射
[root@nginx-server ~]# tar -zcf nginx.tar.gz nginx/
[root@nginx-server ~]# scp -r  nginx.tar.gz root@192.168.222.140:/root		#同步到docker服务器

1.2 同步webhp项目

[root@nginx-server ~]# scp -r  webhp root@192.168.222.140:/root				#同步前端项目到docker服务器

1.3 查看webhp项目的配置

[root@docker ~]# cat /etc/nginx/proxy_webhp					#说明需要映射8000端口
 server {
        listen       8000;
        listen       [::]:8000;
        server_name  _;
        root         /root/webhp/;						#说明访问的资源是此路径下的内容
        index     index.html;
        access_log    /data/log/nginx/www_access.log;
        error_log     /data/log/nginx/www_error.log;
        location / {
            try_files $uri $uri/ /index.html;
        }
        location = /HCIP.jpg {
        # 空的配置块,表示直接返回该文件
    }
}

1.4 启动容器

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                     PORTS               NAMES
abc4b0ff2df0        xxqops.icu/nginx:latest   "/docker-entrypoint.…"   5 seconds ago       Exited (1) 4 seconds ago                       nginx-webhp					#启动失败了需要查看日志
[root@docker ~]# docker logs -f nginx-webhp			#动态查看容器的运行日志
2023/07/14 09:24:30 [emerg] 1#1: mkdir() "/data/www/proxy_temp_dir" failed (2: No such file or directory)
nginx: [emerg] mkdir() "/data/www/proxy_temp_dir" failed (2: No such file or directory)
##需要创建对应的映射目录。这是因为nginx的http.conf开启了缓存
[root@docker ~]# docker run -itd --name nginx-webhp -p 8000:8000 -v /root/webhp:/root/webhp -v /data/nginx/log:/data/log/nginx -v /etc/nginx:/etc/nginx -v /data/nginx/www/proxy_temp_dir:/data/www/proxy_temp_dir xxqops.icu/nginx:latest

1.5 访问前端

1、查看容器状态
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                            NAMES
e26ae699ffce        xxqops.icu/nginx:latest   "/docker-entrypoint.…"   17 seconds ago      Up 17 seconds       80/tcp, 0.0.0.0:8000->8000/tcp   nginx-webhp				#运行正常
[root@docker ~]# netstat -tnlp | grep "docker"				#端口启动正常
tcp6       0      0 :::8000                 :::*                    LISTEN      3330/docker-proxy   
2、访问页面
[root@docker ~]# curl -I localhost:8000
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 14 Jul 2023 09:28:32 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 8109
Last-Modified: Fri, 14 Jul 2023 09:09:42 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "64b110d6-1fad"
Accept-Ranges: bytes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E1c12VvV-1689343749456)(E:\教学资料\docker&k8s学习\assets\image-20230714172842293.png)]

1.6 基于webhp创建新镜像

1、基于webhp前端容器创建新的镜像
[root@docker ~]# docker commit -m "webhp容器镜像" -a "运维神经科主任" e26ae699ffce xxqops.icu/nginx:v1.0
sha256:9502210494f14ff510843fc8a66349f3dc77a5231b4754383f67cf675ccb55ff
#-m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] 
2、基于构建的新的image创建新的容器
#通过 docker commit 创建的容器镜像只包含静态的文件系统和元数据,不包含容器的运行状态和数据。因此,任何动态的或实时的更改,例如运行中的进程状态或数据库的动态数据,都不会包含在新镜像中。
#所以持久化的卷不会再镜像中。需要自己创建并且同步文件
[root@docker ~]# docker run -itd --name nginx-webhp-test -p 8001:80  xxqops.icu/nginx:v1.0
#因为上方的nginx都是通过-v卷挂载的方式运行的nginx
#commit又不会同步卷的内容。所以不会存在之前的nginx的配置等.-v /root/webhp:/root/webhp。此目录因为nginx本身不存在所以会创建。说明commit封装了创建webhp目录的层!!!

三、docker部署自家官网-2

1.1 运行新的空白的nginx容器

#第一种方式通过-v卷映射的方式进行nginx的配置。commit后不能恢复直接使用而是需要进行卷的映射等!!!
#第二种方式直接进行容器的封装把映射的目录都打入到nginx中。进行二次封装。直接可以运行webhp的项目!!!
1、运行新的空白的nginx容器
[root@docker ~]# docker run -itd --name nginx-webhp-test -p 8001:80  xxqops.icu/nginx:latest	
1d8b95b9ca60fea36f104f1ad7ac14c268a52f871bbc8ec971d5ffe737214193
#运行新的空的nginx容器
[root@docker ~]# curl  -s localhost:8001 | awk 'NR==4{print $0}'
<title>Welcome to nginx!</title>				#说明是一个全新的nginx

1.2 通过copy的方式把配置和webhp弄进去

[root@docker ~]# docker cp webhp/ nginx-webhp-test:/root		#拷贝webhp项目到容器中
[root@docker ~]# docker cp  nginx/ nginx-webhp-test:/etc/		#拷贝nginx配置进入到容器中

1.3 进入容器查看copy是否成功

root@1d8b95b9ca60:~/webhp# ls -l /root/webhp/
ls: cannot access '/root/webhp/': Operation not permitted		#遇到这种错误说明容器需要开启特权模式
#可以进入目录通过ls查看
root@1d8b95b9ca60:~/webhp# du -sh ./*				#通过du命令可以直接查看
164K    ./HCIP.jpg
4.0K    ./README.md
8.0K    ./index.html
776K    ./static
4.0K    ./学习css.html
4.0K    ./学习html.html
4.0K    ./学习表格和表单.html
4.0K    ./模板css.css
root@1d8b95b9ca60:~/webhp# du -sh /etc/nginx/*			#说明copy成功
4.0K    /etc/nginx/conf.d
0       /etc/nginx/default.d
4.0K    /etc/nginx/fastcgi.conf
4.0K    /etc/nginx/fastcgi.conf.default
4.0K    /etc/nginx/fastcgi_params
4.0K    /etc/nginx/fastcgi_params.default
4.0K    /etc/nginx/http.conf
4.0K    /etc/nginx/koi-utf
4.0K    /etc/nginx/koi-win
8.0K    /etc/nginx/mime.types
8.0K    /etc/nginx/mime.types.default
0       /etc/nginx/modules
4.0K    /etc/nginx/nginx.conf
4.0K    /etc/nginx/nginx.conf.bak
4.0K    /etc/nginx/nginx.conf.default
4.0K    /etc/nginx/proxy_webhp
4.0K    /etc/nginx/proxy_webhp.bak
4.0K    /etc/nginx/scgi_params
4.0K    /etc/nginx/scgi_params.default
4.0K    /etc/nginx/uwsgi_params
4.0K    /etc/nginx/uwsgi_params.default
4.0K    /etc/nginx/win-utf

1.4 重启nginx

root@1d8b95b9ca60:~/webhp# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok		#开启了缓存需要创建目录进行缓存的存储
2023/07/14 12:55:20 [emerg] 59#59: mkdir() "/data/www/proxy_temp_dir" failed (2: No such file or directory)
nginx: [emerg] mkdir() "/data/www/proxy_temp_dir" failed (2: No such file or directory)
root@1d8b95b9ca60:~/webhp# mkdir -p /data/www/proxy_temp_dir
root@1d8b95b9ca60:~/webhp# mkdir -p /data/log/nginx
root@1d8b95b9ca60:~/webhp# nginx -t									#nginx校验成功
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@1d8b95b9ca60:/etc/nginx# nginx -s reload
#2023/07/14 12:59:55 [notice] 352#352: signal process started			#正在启动新的进程!!!
root@1d8b95b9ca60:/etc/nginx# curl -I localhost:8000
HTTP/1.1 200 OK

1.5 封装成新的镜像

[root@docker ~]# docker commit -m "webhp容器镜像" -a "运维神经科主任" 1d8b95b9ca60  xxqops.icu/nginx:v1.0
sha256:4617b729de6518b4ccb9ab1547341caeda42f8d4405b60ce6ab4bf4f34eebbaa
[root@docker ~]# docker images | grep "nginx"				#比最基础的镜像大了6MB
xxqops.icu/nginx    v1.0                4617b729de65        3 minutes ago       147MB
xxqops.icu/nginx    latest              605c77e624dd        18 months ago       141MB

1.6 利用新镜像直接启动前端服务器

1、启动容器
[root@docker ~]# mkdir -p /root/log/nginx					#创建一个映射日志的目录
[root@docker ~]# docker run -itd --name nginx-webhp-server -p 8888:8000 -v /root/log/nginx:/data/log/nginx xxqops.icu/nginx:v1.0
#这样的构建方式方便快速搭建一台自己的webhp服务器。非常的适合生产!!
[root@docker ~]# ll log/nginx/							#只需要映射个日志多好!!!
total 4
-rw-r--r-- 1 root root    0 Jul 14 21:05 access.log
-rw-r--r-- 1 root root    0 Jul 14 21:05 error.log
-rw-r--r-- 1 root root 1244 Jul 14 21:05 www_access.log
-rw-r--r-- 1 root root    0 Jul 14 21:05 www_error.log
2、查看镜像的层数
[root@docker ~]# docker history xxqops.icu/nginx:v1.0
#要查看一个镜像有多少层,可以使用 docker history 命令。该命令可以显示镜像的构建历史,包括每个构建步骤所添加的层。

在这里插入图片描述