乐趣区

关于javascript:部署02-Docker-部署vue项目

导航

[[深刻 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

      1. 查问可用版本:

        • yum list docker-ce–show duplicates| sort-r
      1. 装置指定版本

        • $ 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

    ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5fb20273f6534775aed4b1e4ab7b8a28~tplv-k3u1fbpfcp-zoom-1.image)

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 login
    
    docker tag 镜像名 Repository/name:tag
    // 这个 Repository 是在 hub 上的 repository,name 也是在那里设置的,tag 名本人取比方 1.1.1 或者 v1 等
    
    docker push 镜像名: 标签号
    
    
    
    ----
    具体如下
    docker tag woow_wu7/tomcat hanxian/woow_wu7:v1
    git 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 centos
    
    MAINTAINER woow_wu7<woow.wu7@gmail.com>
    
    LABEL name="hanxian"
    
    ENV WORKPATH /
    WORKDIR $WORKPATH
    
    RUN yum -y install net-tools
    
    RUN yum -y install vim
    
    CMD /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

  1. 编写号 Dockerfile 文件
  2. 执行命令

    • docker build -f Dockerfile 的门路 -t 镜像的名字:标签 .
    • docker build -f 门路 /Dockerfile 文件名 -t Repository/name:tag.
    • 留神最初面的 .
  3. 构建镜像胜利后,就能够新建容器了 docker run -it --name 容器名称 -p 8888:7000 镜像 ID
  4. 验证 因为增加了一些包,所以应用 ifcofnig 或者 vim 看装置好了没

  5. docker build

    在根目录下执行
    docker build -f dockerfile/dockerfile -t hanxian/woow_wu7:v1 .

  6. 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 6379
CMD ["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
  • 具体过程

    (1) 创立数据卷容器 c3
    docker run -it --name=c3 -v /volume -p 1000:2000 5e35e350aded /bin/bash
    
    
    (2) 创立须要共享数据能够做映射的一般容器 c1
    docker 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.d2
2. 在 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
                  |----html3
html3 文件新建 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/project
git clone 下载我的项目
// 设置好 name,email 后能够通过 git config --global --list 查看
// 公钥的文件门路:/root/.ssh/id_rsa


(10) 装置 node - 用于打包,本地启动服务,执行 script 命令等
[1]
yum install epel-release
yum 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/hasaki
2. npm install 装置前端依赖
3. npm run build
4. 这样会生成一个文件夹 dist/


(12) 利用 docker 中的 nginx 镜像新建容器,启动 server
docker 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 

# build
npm 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 容器,并启动 mysql
docker exec -it mysql_c1 /bin/bash
mysql -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-tables
2. 在执行 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…

退出移动版