赞
踩
最近学习部署的时候,发现前端部署可以通过多种方式来进行部署,web服务器,Docker,静态部署:Github page,网站托管平台:Vercel,还有一些自动化部署的东西目前还没有学到…
Docker是一个应用打包,分发,部署的工具,它就相当于一个容器,将你想要的一些依赖、第三方库、环境啥的和代码进行一块打包为镜像,并上传到镜像仓库里面,这样别人可以直接从镜像仓库里面直接拉去这个代码来进行运行,可以适应不同的电脑环境,打造了一个完全封闭的环境。
Docker 的出现主要是为了解决以下问题:“在我的机器上运行正常,但为什么到你的机器上就运行不正常了?”。
平常开发的时候,项目在本地跑的好好的,但是其他人想要在他的电脑上去跑你的应用程序,但是却跑不起来,他得配置数据库,Web 服务器,插件啥的,非常不方便。Docker的出现解决了这些问题。
镜像:理解为软件安装包,可以方便的进行传播和安装,它包含了运行应用程序所需的所有元素,包括代码、运行时环境、库、环境变量和配置文件。
容器:软件安装后的状态,每个软件运行的环境都是独立的、隔离的,称之为容器。
仓库:仓库是存放 Docker 镜像的地方。仓库允许你分享你的镜像,你可以将你的镜像推送(push)到仓库,也可以从仓库拉取(pull)其他人分享的镜像。
docker run -p 8080:80 -d my-app
将从名为 “my-app” 的 Docker 镜像启动一个新的容器,并将容器的 8080 端口映射到主机的 80 端口。docker build -t my-app .
将使用当前目录中的 Dockerfile 构建一个名为 “my-app” 的 Docker 镜像。docker pull nginx
将从 Docker Hub 下载官方的 Nginx 镜像。docker push my-app
将名为 “my-app” 的 Docker 镜像推送到你的 Docker Hub 账户。-a
选项(docker ps -a
)可以列出所有容器,包括已停止的。docker stop my-container
将停止名为 “my-container” 的 Docker 容器。docker rm my-container
将删除名为 “my-container” 的 Docker 容器。docker rmi my-app
将删除名为 “my-app” 的 Docker 镜像。docker logs my-container
将显示名为 “my-container” 的 Docker 容器的日志。docker exec -it my-container bash
将在名为 “my-container” 的 Docker 容器中启动一个 bash shell。ps:不会使用就:docker load --help
FROM nginx:latest # 定义作者 MAINTAINER Merikle #删除目录下的default.conf文件 #RUN rm /etc/nginx/conf.d/default.conf #设置时区 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone #将本地nginx.conf配置覆盖nginx配置 COPY nginx.conf /etc/nginx/nginx.conf # 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面 COPY dist/ /usr/share/nginx/html/ #声名端口 EXPOSE 8748 RUN echo 'web project build success!!'
FROM:指定基础镜像
RUN:一般指安装的过程
COPY:拷贝本地文件到镜像的指定目录
ENV:环境变量
EXPOSE:指定容器运行时监听到的端口,是给镜像的使用者看的
ENTRYPOINT:镜像中应用的启动命令,容器运行时调用
编写完Dockerfile生成镜像:
docker build -t test:v1 .
运行镜像:
docker run -p 8080:8080 --name test-hello test:v1
意思:跑在8080端口将test:v1命名为text-hello
之后你可以发布到上面说的仓库里面
docker login -u username
docker tag test:v1 username/test:v1
docker push username/test:v1
docker run -dp 8080:8080 username/test:v1
核心思想:
将前端打包的dist放到nginx里面,然后添加一个nginx.conf文件。
docker的话就是多了一个Dockerfile文件来构建镜像而已。
nginx.conf文件的编写
#nginx.conf文件编写 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { #监听的端口 listen 8748; #请填写绑定证书的域名或者IP server_name 121.199.29.3; gzip on; gzip_min_length 1k; gzip_comp_level 9; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary on; gzip_disable "MSIE [1-6]\."; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } #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 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; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
Dockerfile文件的编写
# Dockerfile文件 FROM nginx:latest # 定义作者 MAINTAINER Merikle #删除目录下的default.conf文件 #RUN rm /etc/nginx/conf.d/default.conf #设置时区 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone #将本地nginx.conf配置覆盖nginx配置 COPY nginx.conf /etc/nginx/nginx.conf # 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面 COPY dist/ /usr/share/nginx/html/ #声名端口 EXPOSE 8748 RUN echo 'web project build success!!'
然后将这些压缩成zip(或者本地打包为镜像,然后上传到镜像仓库里面,在服务器里面拉取镜像就可以了),然后传到服务器中,进行解压,构建镜像并且运行镜像来进行前端部署。
Dockerfile的编写
FROM node:11 MAINTAINER Merikle # 复制代码 ADD . /mongo-server # 设置容器启动后的默认运行目录 WORKDIR /mongo-server # 运行命令,安装依赖 # RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。 # 例如 RUN npm install && cd /app && mkdir logs RUN npm install --registry=https://registry.npm.taobao.org # CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。 # 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。 # 例如 CMD cd /app && ./start.sh CMD node app.js
然后构建镜像
发布镜像到hub上面
在服务器上面进行拉取镜像并且运行镜像。
这个还没有部署,之后再说啦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。