DDR爱好者之家 Design By 杰米

第一次在本地使用docker打包、部署镜像

首先说下我的笔记本系统是MACOS 10.15.4
我安装的docker版本是v19.03.5

一、项目结构如下:

这是一个react项目,打包后的静态资源路径是dist目录。

本地使用docker打包部署镜像的方法

二、重点看Dockerfile文件和docker/nginx.conf文件

 1. Dockerfile是一个用来构建镜像的文本文件,详细介绍可以参考链接:Docker Dockerfile

我的Dockerfile内容如下:

FROM nginx
WORKDIR /usr/src/app/
COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY ./dist /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Dockerfile中的大写单词是命令,各个命令的含义解释:

  • FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
  • RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
  • WORKDIR:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。WORKDIR 指定的工作目录,必须是提前创建好的。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
  • COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
  • EXPOSE:仅仅只是声明端口。作用:帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
  • CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:CMD 在docker run 时运行。RUN 是在 docker build。作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

2. docker/nginx.conf

server {
  listen 80;
  # gzip config
  gzip on;
  gzip_min_length 1k;
  gzip_comp_level 9;
  gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
  gzip_vary on;
  gzip_disable "MSIE [1-6]\.";
  client_max_body_size 100m;

  root /usr/share/nginx/html;

  location / {
    try_files $uri $uri/ /index.html;
  }
  location /api/ {
  	# 此处为后端地址
    proxy_pass http://www.XXX.com/;
  }
}

三、执行docker build命令制作镜像

我执行的命令是:docker build -t mydocker .
-t : 为镜像打一个tag,tag名称为mydocker
不要忘了后面有个点,表示在当前路径下制作镜像

四、执行docker run部署镜像

我执行的命令是:docker run -p 80:80 mydocker
-p 是指定映射到本机的端口
docker run -p 本机端口:镜像端口 镜像名

五、打开localhost:80就可以看到项目啦

初次体验docker本地部署,很多原理和docker命令还不太清楚,以后还会进一步学习~

补充一个小问题,我今天突然无法将镜像推到公司的私有云了,是网络环境有问题,就让同事帮忙推一下。
我先将打包好的镜像保存到本地:

docker save 10.10.10.52:5000/zhanwu-study/prod:4.1.2 > study.tar

然后将生成到当前目录下的study.tar通过钉钉发给同事,他下来study.tar到本地,然后执行:

docker load < study.tar

更新一下版本(没有生成新的镜像,两个版本是同一个镜像):

docker tag 10.10.10.52:5000/zhanwu-study/prod:4.1.2 10.10.10.52:5000/zhanwu-study/prod:4.1.3

然后推到私有云:

docker push 10.10.10.52:5000/zhanwu-study/prod:4.1.3
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?