前置文件准备

首先,在项目根目录,新建一个Dockerfile
Dockerfile文件作用是,再创建Docker镜像的时候执行,下面举一个例子

Dockerfile

FROM nginx:1.23.3
#安装依赖,这个版本依赖是nginx:1.23.3
COPY build  /usr/share/nginx/html
#将build文件夹 copy到容器内部的/usr/share/nginx/html中
COPY nginx /etc/nginx
#copy文件夹nginx 将文件夹copy到容器内部的/etc/nginx
ENTRYPOINT ["nginx","-g","daemon off;"] 
#然后执行下面的代码

这是一个非常简单的dockerfile的例子,同样也是我们项目使用的dockerfile
上面的dockerfile指名了各种操作,现在我们看看nginx配置文件的内容

nginx配置

配置文件的路径/nginx/default.conf

#nginx/default.conf 文件路径
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
	
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /home/web;
        index  index.html index.htm;
        add_header Cache-Control no-cache;
        try_files $uri $uri/ /index.html;
    }
	#做反向代理,这里不应该是192.168,应该是docker network的容器名
    location ^~/uaa {
        proxy_pass http://192.168.0.4:8000;
	proxy_set_header Host $host:$server_port;
    }
    #同上
     location ^~/data {
        proxy_pass http://192.168.0.4:8000;
        proxy_set_header Host $host:$server_port;
     }   
 
 
	
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

现在我们的项目已经具备上面两个东西了,那么怎么打包使用呢。

构建镜像

首先,使用要构建镜像
注意,如果之前的镜像存在,可以先删掉镜像
进入项目根目录

docker build -f Dockerfile -t imagename:V0.0.1 .
#-f 表示配置文件,我们选择Dockerfile
#-t 表示构建的镜像名,这里我们假设镜像名为 imagename:V0.0.1
#. 注意,这个`.`非常重要,他代表我们当前目录

设置容器运行镜像

docker run -d --name webname -p 3000:80 --network networkname --restart=always imagename:V0.0.1
# -d 表示后台运行
# --name 表示容器名,例如容器名为webname
# -p 3000:80 前面的表示我们公网端口,后面表示容器端口
# --network 表示网桥名,在nginx里配置的时候,需要配置网桥名加端口
# --restart=always 表示设置了开机自启
# 最后接镜像名 imagename:V0.0.1

至此,容器部署成功

挂载

上面的部署方案有一个问题,当你需要进行版本更新的时候,你要不断的去新建镜像,非常的麻烦

所以我们使用挂载的方式,而不需要把内容去copy到容器内部

FROM nginx:1.23.3
#安装依赖,这个版本依赖是nginx:1.23.3

COPY nginx /etc/nginx
#copy文件夹nginx 将文件夹copy到容器内部的/etc/nginx
ENTRYPOINT ["nginx","-g","daemon off;"] 
#然后执行下面的代码

构建语句

docker run -d -p 3002:80 --name webwork --network=mywork -v /home/dist:/usr/share/nginx/html  webwork

Q.E.D.