导航
[[深刻01] 执行上下文](https://juejin.im/post/684490...
[[深刻02] 原型链](https://juejin.im/post/684490...
[[深刻03] 继承](https://juejin.im/post/684490...
[[深刻04] 事件循环](https://juejin.im/post/684490...
[[深刻05] 柯里化 偏函数 函数记忆](https://juejin.im/post/684490...
[[深刻06] 隐式转换 和 运算符](https://juejin.im/post/684490...
[[深刻07] 浏览器缓存机制(http缓存机制)](https://juejin.im/post/684490...
[[深刻08] 前端平安](https://juejin.im/post/684490...
[[深刻09] 深浅拷贝](https://juejin.im/post/684490...
[[深刻10] Debounce Throttle](https://juejin.im/post/684490...
[[深刻11] 前端路由](https://juejin.im/post/684490...
[[深刻12] 前端模块化](https://juejin.im/post/684490...
[[深刻13] 观察者模式 公布订阅模式 双向数据绑定](https://juejin.im/post/684490...
[[深刻14] canvas](https://juejin.im/post/684490...
[[深刻15] webSocket](https://juejin.im/post/684490...
[[深刻16] webpack](https://juejin.im/post/684490...
[[深刻17] http 和 https](https://juejin.im/post/684490...
[[深刻18] CSS-interview](https://juejin.im/post/684490...
[[深刻19] 手写Promise](https://juejin.im/post/684490...
[[深刻20] 手写函数](https://juejin.im/post/684490...
[[react] Hooks](https://juejin.im/post/684490...
[[部署01] Nginx](https://juejin.im/post/684490...
[[部署02] Docker 部署vue我的项目](https://juejin.im/post/684490...
[[部署03] gitlab-CI](https://juejin.im/post/684490...
[[源码-webpack01-前置常识] AST形象语法树](https://juejin.im/post/684490...
[[源码-webpack02-前置常识] Tapable](https://juejin.im/post/684490...
[[源码-webpack03] 手写webpack - compiler简略编译流程](https://juejin.im/post/684490...
[[源码] Redux React-Redux01](https://juejin.im/post/684490...
[[源码] axios ](https://juejin.im/post/684490...
[[源码] vuex ](https://juejin.im/post/684490...
[[源码-vue01] data响应式 和 初始化渲染 ](https://juejin.im/post/684490...
[[源码-vue02] computed 响应式 - 初始化,拜访,更新过程 ](https://juejin.im/post/684490...
[[源码-vue03] watch 侦听属性 - 初始化和更新 ](https://juejin.im/post/684490...
[[源码-vue04] Vue.set 和 vm.$set ](https://juejin.im/post/684490...
[[源码-vue05] Vue.extend ](https://juejin.im/post/684490...
[[源码-vue06] Vue.nextTick 和 vm.$nextTick ](https://juejin.im/post/684790...
前置常识
一些单词
prerequisites:先决条件( meet the prerequisites 满足前提条件 )Community:社区的associated:关联的( along with associated dependencies 以及相干的依赖关系 )exactly:确切的( "docker build" requires exactly 1 argument 确切的只须要1个参数 )denied:回绝//2021-06-15 更新daemon: 守护过程 // docker默认状况下是在守护过程中工作
yum命令
yum [options] [command] [package ...]
- 1.列出所有可更新的软件清单命令:yum check-update
- 2.更新所有软件命令:yum update
<font color=red>3.仅装置指定的软件命令:yum install <package_name></font>
- <font color=red>yum install -y git</font>
- <font color=red>-y 的作用是如果装置过程中有询问,都会主动的抉择yes</font>
- 4.仅更新指定的软件命令:yum update <package_name>
- 5.列出所有可安裝的软件清单命令:yum list
- 6.删除软件包命令:yum remove <package_name>
- 7.查找软件包 命令:yum search <keyword>
8.革除缓存命令:
- yum clean packages: 革除缓存目录下的软件包
- yum clean headers: 革除缓存目录下的 headers
- yum clean oldheaders: 革除缓存目录下旧的 headers
- yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :革除缓存目录下的软件包及旧的headers
(1) yum 和 rpm 的关系
- ( rpm ) 只能装置曾经下载到本地机器上的 ( rpm包 )
- <font color=red>( yum ) 能 ( 在线 - 线上 ) 下载并装置rpm包,能更新零碎,且还能主动解决包与包之间的依赖问题</font>,这个是 rpm 工具所不具备的。
(2) yum 装置的包的门路
- 留神查看时,应用的是 rpm 命令
rpm -qa 查问所有装置的rpm包,能够配合grep命令
rpm -ql 列出某个具体包的所有- 文件门路
<font color=blue>rpm的默认装置门路</font>
/etc 一些设置文件搁置的目录如
/etc/crontab/usr/bin 一些可执行文件
/usr/lib /usr/lib64 一些程序应用的动静函数库
/usr/share/doc 一些根本的软件使用手册与帮忙文档
/usr/share/man 一些man page文件
<font color=blue> 如何查看某个用 yum 装置的包的具体门路????</font>
yum 的装置的包的具体门路门路 --- 比方 python// (1) yum install python ------------------------------- 装置 python(2) rpm -qa python -------------------------------------- 查找具体装置的 python 包的包名// python-2.7.5-68.el7.x86_64(3) rpm -ql python-2.7.5-68.el7.x86_64 ------------------ 列出这个包的所有文件的门路
Docker
Docker三个基本概念 - Container Image Repository
- Container 容器
- Image 镜像
- Repository 仓库
- ( <font color=red>镜像</font> ) 是Docker运行 ( <font color=red>容器</font> ) 的前提, ( <font color=red>仓库</font> ) 是寄存镜像的场合,( 可见镜像 ) 更是 Docker 的外围
docker装置
- 官网装置教程 - centOS - Community版 - (社区版收费)
本文通过购买的腾讯云服务器 centOS 装置
docker 装置过程(1) 如果装置过Docker,先卸载 docker 或者 docker-engine 以及相干的依赖$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
- yum-utils
- device-mapper-persistent-data
lvm2
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2(3) 设置稳固的存储库 - 仓库
- 官网仓库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/l... 阿里云仓库:如果装置太慢,用阿里云镜像
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/doc...(4) 启用存储库(可选)
$ sudo yum-config-manager --enable docker-ce-nightly(5) 装置最新版本的Docker Engine-Community和containerd
$ sudo yum install docker-ce docker-ce-cli containerd.io查问可用版本:
- yum list docker-ce--show duplicates| sort-r
装置指定版本
- $ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
- $ sudo yum install docker-ce-[第一步查出来的版本号] docker-ce-cli-[在应用1中的查问查出cli的版本] containerd.io
(6) 启动 - 装置实现后
$ sudo systemctl start docker(7) 验证 hello-world
$ sudo docker run hello-world
docker常用命令
docker相干
docker相干启动docker --------------------- systemctl start docker ( ctl是control的缩写 )进行docker --------------------- systemctl stop docker重启docker --------------------- systemctl restart docker开机启动docker ----------------- systemctl enable docker ( !!!!!!! )查看docker概要信息 ------------- docker info查看docker帮忙文档 ------------- docker --help查看docker版本信息 ------------- docker version
Image镜像相干
Image镜像相干列出所有镜像 ---------------------------- docker images ---------------------------- docker images -a 所有镜像 ---------------------------- docker images -q 只显示镜像ID 搜寻镜像 -------------------------------- docker search ---------------------------- docker search -s 40 nginx 列出珍藏数字不小于40的nginx镜像 下载镜像 -------------------------------- docker pull -------------------------------- docker pull nginx 从近程仓库拉取nginx镜像 -------------------------------- docker pull nginx:[tag] 拉取指定版本 -------------------------------- docker pull nginx:7 拉去7版本 删除镜像 -------------------------------- docker rmi -------------------------------- docker rmi nginx 删除最新的ngix镜像,latest -------------------------------- docker rmi nginx:7 删除具体的某个镜像,须要镜像名称和tag版本号 -------------------------------- docker rmi -f nginx:7 强制删除某个镜像,必须镜像曾经创立的容器正在运行时应用 -------------------------------- docker rmi -f nginx centos 删除多个镜像,用空格隔开 -------------------------------- docker rmi -f $(docker images -qa) 删除全副镜像
container容器相干
container容器相干新建一个容器:docker run -it --name 容器名称 镜像ID ------------ 来运行一个容器,取别名,交互模式运行,以及调配一个伪终端-i 以交互模式运行容器-t 为容器重新分配一个伪输出终端--name 为容器指定一个名称- d 后盾运行容器,并返回容器ID列出正在运行的容器 ------------------------------ docker ps列出所有的容器 ---------------------------------- docker ps -a列出最近创立的三个容器 -------------------------- docker ps -n 3列出曾经进行的容器 ------------------------------ docker ps -f status=exited退出容器 ---------------------------------------- exit (或者ctrl+p+q)进入容器 ---------------------------------------- docker attach 容器ID | 容器名称启动容器 ---------------------------------------- docker start 容器ID | 容器名称重启容器 ---------------------------------------- docker restart 容器ID | 容器名称进行容器 ---------------------------------------- docker stop 容器ID | 容器名称暴力进行容器 ------------------------------------ docker kill 容器ID | 容器名称删除容器 ---------------------------------------- dokcer rm -f 容器ID | 容器名称删除所有容器 ------------------------------------ docker rm -f $(docker ps -qa) 删除全副容器( 留神辨别删除镜像 ------------------------------ docker rmi -f $(docker images -qa) 删除全副镜像( 曾经在运行的容器,或者镜像创立的容器正在运行想删除,用 -f 强制删除 )
container容器相干 - 进阶命令以守护形式启动容器 ------------------------ docker run -di --name 容器名称 镜像ID// 不会进入容器,并且会返回容器ID进入容器,并执行命令 ---------------------- docker exec -it 容器ID | 容器名称 执行命令// 进入容器 ------------------------------- docker attach 容器ID | 容器名称查看容器日志 ------------------------------ docker logs 容器ID | 容器名称查看容器过程 ------------------------------ docker top 容器ID | 容器名称宿主机拷贝文件到容器 ---------------------- docker cp 须要拷贝的文件或目录 容器id|名称 :容器目录容器文件拷贝到宿主机 ---------------------- docker cp 容器id|名称:文件目录|文件 宿主机目录
例下图:从宿主机中拷贝b.png到容器mycentos的tem文件中
例下图:容器拷贝文件夹到宿主机
例下图:以守护形式启动容器 ------------------------ docker run -di --name 容器名称 镜像ID
docker宿主机和容器之间的端口映射
docker run -it -p 8080:8000 镜像ID-p ------------ 指定端口映射,格局为 ( 主机端口:容器端口 )// docker run -it mycomcat -p 8080:8000 镜像ID ----------- 指定宿主机和容器之间的端口映射// docker run -di --name 容器名称 镜像ID ----------------- 以守护形式启动容器 // docker run -it --name 容器名称 镜像ID ------------------ 来运行一个容器,取别名,交互模式运行,以及调配一个伪终端
docker commit - 提交运行时的容器作为镜像
docker commit -a='作者' -m='备注' 运行时的容器ID 新镜像名称
提交后,就能够以这个镜像创立容器了
docker commit -a='作者' -m='备注' 运行时的容器ID 新镜像名称
docker push 推送镜像到服务器
- 第一步: 注册 https://hub.docker.com/,获取docker id 和 明码
- 第二步:命令行登陆 ( <font color=red>docker login</font> )
第三步:打标签 ( <font color=red>docker tag 镜像名</font>)
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
第三步:<font color=red>docker push 镜像名称 : TAG版本号</font>
docker logindocker tag 镜像名 Repository/name:tag// 这个Repository是在hub上的repository,name也是在那里设置的,tag名本人取比方1.1.1或者v1等docker push 镜像名:标签号----具体如下docker tag woow_wu7/tomcat hanxian/woow_wu7:v1git push hanxian/woow_wu7:v1
Dockerfile
- Dockerfile语法
语法 | 阐明 |
---|---|
FROM | 援用根底镜像 - from |
MAINTAINER | 维护者 - maintainer <br/> name<邮箱或者电话> |
LABEL | 对镜像的形容,相似于正文 - label <br/> name="xxxx" \ <br/> date="xxxx" |
ENV | 设置容器内的环境变量和常量 <br/> 在其余中央通过 ( $ ) 来援用该环境变量的值 |
ARG | 和ENV的作用类似,都是设置 - 环境变量 <br/> 不同点:ARG 所设置的构建环境的环境变量,在未来容器运行时是不会存在这些环境变量的。然而不要因而就应用 ARG 保留明码之类的信息,因为 docker history 还是能够看到所有值的。 <br/><br/> Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值。<br/>该默认值能够在构建命令 docker build 中用 --build-arg <参数名>=<值> 来笼罩 <br/>ARG 指令有失效范畴,如果在 FROM 指令之前指定,那么只能用于 FROM 指令中 |
WORKDIR | 以后的工作目录,即是进入容器后,默认所在的当前目录 |
RUN | 在新建镜像时执行的命令 - run <br/> 比方 RUN yum -y install Vim 示意用yum来装置 Vim 包 |
EXPOSE | 裸露端口 - expose |
CMD | 设置容器启动后默认执行的命令和参数 <br/> 比方 CMD /bin/bash <br/> - 如果docker run的时候指定了其余CMD命令,Dockerfile中的CMD命令被疏忽;如果定义了多个CMD,只有最初一个会执行 <br/> - CMD ["/bin/echo","hello docker"] |
ENTRYPOINT | 设置容器启动时运行的命令 |
ADD | ADD除了COPY还有额定解压性能 |
COPY | 拷贝文件 |
dockerfile/dockerfile文件,具体内容如下
FROM centosMAINTAINER woow_wu7<woow.wu7@gmail.com>LABEL name="hanxian"ENV WORKPATH /WORKDIR $WORKPATHRUN yum -y install net-toolsRUN yum -y install vimCMD /bin/bash// CMD ["nginx", "-g", "daemon off;"]// 留神:这里 nginx -g daemon off 示意不是应用守护过程,即容器启动nginx后不会立刻退出// 因为:容器启动nginx后会立即退出,所以须要应用nginx的前台运行模式,关掉daemon off示意敞开守护过程模式// 命令:nginx -g => 1.-g示意指定配置指令 2.daemon off敞开守护过程
应用 Dockerfile 构建自定义 centos镜像 -- docker build
- 编写号 Dockerfile 文件
执行命令
docker build -f Dockerfile的门路 -t 镜像的名字:标签 .
docker build -f 门路/Dockerfile文件名 -t Repository/name:tag.
- 留神最初面的
.
- 构建镜像胜利后,就能够新建容器了
docker run -it --name 容器名称 -p 8888:7000 镜像ID
验证
因为增加了一些包,所以应用 ifcofnig 或者 vim 看装置好了没
docker build
在根目录下执行
docker build -f dockerfile/dockerfile -t hanxian/woow_wu7:v1 .build胜利后,新建容器
docker run -it --name '轻易取' -p 2000:3000 e697c3799626
4. 验证ifconfig// vim a.txt// wq
RUN 和 CMD 和 ENTRYPOINT 三者的区别
- <font color=blue>RUN</font> 执行命令并创立新的 ( <font color=red>镜像层</font> ),即在 ( <font color=blue>docker build</font> ) 时执行的命令,RUN 常常用于装置软件包。
<font color=blue>CMD</font> 设置 ( <font color=red>容器</font> ) 启动后默认执行的命令及其参数,即在 ( <font color=blue>docker run</font> ) 时执行的命令
- <font color=red>但 CMD 可能被 docker run 前面跟的命令行参数替换</font>
- <font color=red>多条CMD命令,则只会执行最初一条</font>
ENTRYPOINT 配置 ( <font color=red>容器</font> ) 启动时运行的命令。
- 不会被 docker run 的命令行参数指定的指令所笼罩
- <font color=red> 当CMD和ENTRYPOINT同时存在时,CMD会被当做参数传递给ENTRYPOINT</font>
RUN CMD ENTRYPONT区别总结(1) ( RUN ) 是构建镜像时执行的命令 ( docker build ),而 ( CMD和ENTRYPOINT ) 是容器启动时执行的命令 ( docker run )(2) 三者都都反对 exec 和 shell 形式(3) 罕用形式:( 独自的CMD ) 或者 ( 先ENTRYPOINT前面跟一个CMD )(4) 多个CMD只有最初一个CMD失效(5) 命令行带参数,CMD将生效而ENTRYPOINT不受影响案例1:CMD ["catalina.sh", "run"]- "catalina.sh":可执行文件- "run":参数案例2:ENTRYPOINT ["docker-entrypoint.sh"] // --- ENTRYPOINT 和 CMD 的组合EXPOSE 6379CMD ["redis-server"] // ------------------ 因为下面有ENTRYPOINT,所以CMD中的值会作为ENTRYPOINT的参数
数据卷 volume
为什么须要数据卷
- 不能在宿主机上很不便的拜访容器中的文件(数据)
- 内部机器 和 (宿主机中的容器) 不能交换文件
- 无奈在多个容器中共享数据
- 删除容器,容器中的数据将隐没
- <font color=red>为了解决以上问题,docker中引入了 数据卷 (data volume) 机制</font>
什么是数据卷
- 数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件系统的模式存在于宿主机中
- <font color=red>在宿主机中的共享的那个文件或者文件夹叫做数据卷</font>
- <font color=red>数据卷的特点:其生存周期独立于容器的生存周期</font>
- 数据卷的挂载点,默认是本机 /var/lib/docker/volumes 下的一个目录
如何用命令实现数据卷 - 配置数据卷volume
docker run -it --name xxxx -p 9000:8000 -v /root/data:/root/data_container 镜像ID
- 示意通过镜像ID新建容器,并创立数据卷,并且做端口映射
留神点:
- -v aaa:bbb 的冒号之间不能有空格
- -v 前面的门路必须是绝对路径
- -v 前面的目录不存在,则会新建
-v /root/data
也能够是-v ~root/data
案例:docker run -it --name c2 -v /root/data:/root/data_container -p 3000:4000 470671670cac(1) 以镜像ID ( 470671670cac ) 创立容器(2) 镜像取名:c2(3) 数据卷 ( 宿主目录/root/data ) 对应 ( 容器目录/root/data_container )(4) 端口映射 3000:4000(5) -p 是port的意思
volume 相干命令
命令 | 阐明 |
---|---|
docker volume create | 创立数据卷 |
docker volume inspect | 显示数据卷的详细信息 |
docker volume ls | 列出所有的数据卷 |
docker volume prune | 删除所有未应用的 volumes,并且有 -f 选项 |
docker volume rm | 删除一个或多个未应用的 volumes,并且有 -f 选项 |
数据卷容器
- 数据卷容器其实就是一个一般的容器,只是用来专门存储数据的容器
次要分为两步
- 第一步:创立启动数据卷容器 c3
-v /volume
- 第二步:创立启动须要共享数据的业务容器 c1 c2
--volumes-from c3
- 第一步:创立启动数据卷容器 c3
具体过程
(1) 创立数据卷容器 c3docker run -it --name=c3 -v /volume -p 1000:2000 5e35e350aded /bin/bash(2) 创立须要共享数据能够做映射的一般容器 c1docker run -it --name=c1 --volumes-from c3 -p 3000:4000 5e35e350aded /bin/bash
docker 镜像加速器
- 如下图
如何验证曾经批改源胜利?
- 执行该命令
cat /etc/docker/daemon.json
验证registry-mirrors的值
- 执行该命令
Docker 部署 Vue我的项目 到服务器
(1) 一个ceontos零碎的服务器(2) 装置docker(3) docker pull nginx:tag ------------------------------------------------ 从近程repository仓库拉取nginx镜像// 查看所有镜像 docker images -a// 搜寻某个镜像 docker search -s 40 nginx // -s 40 示意珍藏数不小于40的镜像// 删除某个镜像 docker rmi -f nginx:tag// 删除所有镜像 docke rmi -f $(docker iamges -qa) // -rmi 中的 i示意 images 的意思 (4) 在宿主机上新建用来做映射的文件/home |---workspace |----nginx |----conf.d |----html.d在 cong.d中创立 default.conf 文件,外面是nginx的配置在 html.d中创立 index-test.html 文件,轻易写点货色+++++ default.conf 内容如下 +++++ server { listen 80; server_name localhost; # 原来的配置,匹配根门路 #location / { # root /usr/share/nginx/html; # index index.html index.htm; #} # 更该配置,匹配/门路,批改index.html的名字,用于辨别该配置文件替换了容器中的配置文件 location / { root /usr/share/nginx/html; index index-test.html index.htm; }}+++++ index-test.html +++++ <html> <body> <h2>nginx server test and docker data volume test</h2> </body></html>(5) 新建并执行容器 docker run -d --name=nginx-8080 -p 8080:80 \ -v /home/workspace/nginx/conf.d:/etc/nginx/conf.d \ -v /home/workspace/nginx/html.d:/usr/share/nginx/html \ 6678c7c2e56c // docker run -it --name=nginx-8080 -p 8080:80 镜像ID ----------------- 依据镜像创立执行容器// 留神这里腾讯云能够拜访不到,因为nginx默认端口是80不要写成别的端口了// 敞开容器:docker stop 容器ID | 容器名称// 留神:不要加上 /bin/bash 不然启动后nginx映射的端口不能拜访nginx ( 容器 ) 内的一些文件地位:-------------------------- 留神是容器中的nginx,而不是实在的nginx我的项目门路- 日志地位:/var/log/nginx/- 配置文件地位:/etc/nginx/- 我的项目地位:/usr/share/nginx/html(6) 反向代理 1. 在宿主机上新新建conf.d2文件夹/home |---wrokspace |----nginx |----conf.d |----html |----conf.d22. 在 conf.d2 新建 default.conf 文件server { listen 80; server_name localhost; location / { proxy_pass http://49.233.215.163:8080; }}这样拜访 http://49.233.215.163 会被代理到 http://49.233.215.163:8080(7) 负载平衡/home |---workspace |----nginx |----conf.d |----html |----conf.d2 |----html3html3文件新建index-test.html<html> <body> <h2>html - 8081</h2> </body></html>执行命令 docker run -it --name=payload -p 3000:3000 \ -v /home/workspace/nginx/conf.d3:/etc/nginx/conf.d \ 6678c7c2e56c(8) vue 我的项目上传gitlab(9) 服务器中装置 git 拉取前端在gitlab中的我的项目1. yum install -y git// -y 的作用是下载过程中可能会有对话让你抉择yes还是no, -y就会主动的抉择yes// yum 是从近程下载安装,rpm是从本地下载装置// 查看是否装置胜利能够应用 git version 或者 git help -a 等命令来判断2. 下载完git后设置git相干的 user.name user.email ssh-keygen并把ssh key 增加到gitlab账号中git config --global user.name "your name"git config --global user.email "your emial"ssh-keygen -t rsa -C "your emai"在gitlab中增加ssh key在服务器中新建文件夹用于拉取前端的我的项目 /home/workspace/projectgit clone 下载我的项目// 设置好name,email后能够通过 git config --global --list 查看// 公钥的文件门路:/root/.ssh/id_rsa(10) 装置 node - 用于打包,本地启动服务,执行 script 命令等[1]yum install epel-releaseyum install nodejs// node -v 查看是否装置胜利,版本// npm -v 查看npm版本,留神node自带npm// 留神:这样下载的node版本过低,须要降级!!!!!!!!!!!!!!!!!!!!!!// 降级办法:https://juejin.im/post/6844903733239742477 // npm install npm@latest -g // sudo npm cache clean -f // sudo npm install -g n // sudo n stable[2] 上的办法放弃了,版本太低,降级麻烦,应用[2] 下载nodejs最新的tar包 wget -c https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz 解压包 tar -xvf node-v12.16.1-linux-x64.tar.xz 部署bin文件 - 相当于快捷方式 ln -s ~/node-v12.16.1-linux-x64/bin/node /usr/bin/node ln -s ~/node-v12.16.1-linux-x64/bin/npm /usr/bin/npm 测试 node -v (11) 打包前端我的项目1. 进入在服务器中下载好的前端我的项目文件夹 /home/workspace/project/hasaki2. npm install 装置前端依赖3. npm run build4. 这样会生成一个文件夹 dist/(12) 利用docker中的nginx镜像新建容器,启动serverdocker run -di --name=deploy-vue -p 7000:80 -v /home/workspace/project/hasaki/dist:/usr/share/nginx/html 6678c7c2e56c// dist目录映射到/usr/share/html目录中(13) 优化流程 创立deploy.sh 文件sh deploy.sh--------------ploy.sh文件如下--------------# 拉取代码git pull# install 依赖# npm install # buildnpm run build# 删除容器docker rm -f deploy-vue # 启动容器docker run -d --restart=on-failure:5 \ -p 7000:80 \ -v /home/workspace/project/hasaki/dist:/usr/share/nginx/html \ --name=deploy-vue \ 6678c7c2e56c (16) 因为:当应用nginx反向代理时,因为vue中output的publicPath是根门路导致服务器中的资源门路不一样所以:资源加载不到报404解决办法:在vue.config.js中设置 ( publicPath='./' ) 相对路径
docker 部署 mysql
(1) docker pull mysql:5.6(2) cd /home/workspace(3) mkdir mysql && cd mysql(4) docker run -id \-p 3307:3306 \--name=mysql_c1-v $PWD/config:/etc/mysql/conf.d \-v $PWD/logs:/logs \-v $PWD/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \mysql:5.6 \/bin/bash// $PWD ---------------------------------------------- 当前目录的绝对路径// $PWD/config:/etc/mysql/conf.d --------------------- 将...../config/my.cnf 映射到 /etc/mysql/conf.d/my.cnf// $PWD/logs:/logs ----------------------------------- 映射logs目录// $PWD/data:/var/lib/mysql -------------------------- 映射data目录// -e MYSQL_ROOT_PASSWORD=123456 ---------------------- 初始化root用户的明码// -e 是env的意思,环境变量// docker run -id -p 3307:3306 --name=mysql_c1 -v $PWD/config:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 /bin/bash// /bin/bash次要是为了解决容器启动后马上敞开的bug// 留神:第四步执行的目录是在第三步的目录中,即 ( /home/workspace/mysql = $PWD )(5) 进入mqsql容器,并启动mysqldocker exec -it mysql_c1 /bin/bashmysql -uroot -p123456// docker exec -it mysql_c1 /bin/bash ------- 交互式进入mysql_c1容器并执行命令/bin/bash// mysql -uroot -p123456 -------------------- 用户名root 明码123456(6) 当在(5)执行mysql -uroot -p123456时,1.报错:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'起因:没有启动mysql解决办法:1. 在mysql的容器中执行 /etc/init.d/mysql start --skip-grant-tables2. 在执行mysql -uroot -p 回车3. 回车后让输出明码,此时不输出任何明码间接回车2. 报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)解决办法:在mysql的容器中执行 /etc/init.d/mysql start --skip-grant-tables即:加上--skip-grant-tables(7) show database;create database db1;show databases;use db1;(8) 用Navicate连贯docker中的mysql报错:通过Navicat for MySQL近程连贯的时候报错mysql 1130的解决办法解决材料: https://www.cnblogs.com/happyyangyanghappy/p/10728699.html解决办法:mysql -u root -p mysql;use mysql; mysql;select 'host' from user where user='root'; mysql;update user set host = '%' where user ='root'; mysql;flush privileges; mysql;select 'host' from user where user='root';
centos目录构造
- /bin:( <font color=red>binary:二进制的</font> ) 寄存二进制可执行文件,<font color=red>罕用的命令个别都在这里</font>
- /etc:寄存系统管理和 <font color=red>配置文件</font>
- /usr:( usr:unix system resources 系统资源 ) 用于寄存 <font color=red>零碎应用程序</font>
- /root: 超级用户(系统管理员)的主目录(特权阶级^o^);
- /home:寄存所有用户文件的根目录,用户主目录的基点,如用户user的主目录就是/home/user,能够用~user示意
- /opt: 额定装置的可选利用程序包所搁置的地位。个别状况下,咱们能够把tomcat等都装置到这里
材料
入门 http://dockone.io/article/8350
yum命令 https://www.runoob.com/linux/...
centOS装置Docker教程 https://juejin.im/post/684490...
阮一峰 http://www.ruanyifeng.com/blo...
docker常用命令 https://www.cnblogs.com/DeepI...
rpm查看某个包的具体装置门路 https://blog.csdn.net/jslovey...
数据卷 https://www.imooc.com/article...
docker部署vue https://www.jianshu.com/p/377...
centos装置node的两种形式 https://blog.csdn.net/lu_embe...