前置文件准备
首先,在项目根目录,新建一个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.