[部署02] Docker 部署vue項目

image

導航

[深入01] 執(zhí)行上下文
[深入02] 原型鏈
[深入03] 繼承
[深入04] 事件循環(huán)
[深入05] 柯里化 偏函數(shù) 函數(shù)記憶
[深入06] 隱式轉換 和 運算符
[深入07] 瀏覽器緩存機制(http緩存機制)
[深入08] 前端安全
[深入09] 深淺拷貝
[深入10] Debounce Throttle
[深入11] 前端路由
[深入12] 前端模塊化
[深入13] 觀察者模式 發(fā)布訂閱模式 雙向數(shù)據(jù)綁定
[深入14] canvas
[深入15] webSocket
[深入16] webpack
[深入17] http 和 https
[深入18] CSS-interview
[深入19] 手寫Promise
[深入20] 手寫函數(shù)

[react] Hooks

[部署01] Nginx
[部署02] Docker 部署vue項目
[部署03] gitlab-CI

[源碼-webpack01-前置知識] AST抽象語法樹
[源碼-webpack02-前置知識] Tapable
[源碼-webpack03] 手寫webpack - compiler簡單編譯流程
[源碼] Redux React-Redux01
[源碼] axios
[源碼] vuex
[源碼-vue01] data響應式 和 初始化渲染
[源碼-vue02] computed 響應式 - 初始化,訪問吼鳞,更新過程
[源碼-vue03] watch 偵聽屬性 - 初始化和更新
[源碼-vue04] Vue.set 和 vm.$set
[源碼-vue05] Vue.extend

[源碼-vue06] Vue.nextTick 和 vm.$nextTick

前置知識

一些單詞

prerequisites:先決條件
( meet the prerequisites 滿足前提條件 )

Community:社區(qū)的

associated:關聯(lián)的
( along with associated dependencies 以及相關的依賴關系 )

exactly:確切的
( "docker build" requires exactly 1 argument 確切的只需要1個參數(shù) )

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 ) 只能安裝已經(jīng)下載到本地機器上的 ( rpm包 )
  • <font color=red>( yum ) 能 ( 在線 - 線上 ) 下載并安裝rpm包检诗,能更新系統(tǒng)匈仗,且還能自動處理包與包之間的依賴問題</font>,這個是 rpm 工具所不具備的逢慌。

(2) yum 安裝的包的路徑

  • 注意查看時悠轩,使用的是 rpm 命令
  • rpm -qa 查詢所有安裝的rpm包,可以配合grep命令
  • rpm -ql 列出某個具體包的所有- 文件路徑
  • <font color=blue>rpm的默認安裝路徑</font>
    • /etc 一些設置文件放置的目錄如
    • /etc/crontab/usr/bin 一些可執(zhí)行文件
    • /usr/lib /usr/lib64 一些程序使用的動態(tài)函數(shù)庫
    • /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 ------------------ 列出這個包的所有文件的路徑
image
image

Docker

Docker三個基本概念 - Container Image Repository

  • Container 容器
  • Image 鏡像
  • Repository 倉庫
  • ( <font color=red>鏡像</font> ) 是Docker運行 ( <font color=red>容器</font> ) 的前提, ( <font color=red>倉庫</font> ) 是存放鏡像的場所炼列,( 可見鏡像 ) 更是 Docker 的核心
image

docker安裝

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


(2) 安裝Docker需要的相關插件
- yum-utils
- device-mapper-persistent-data
- lvm2
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2


(3) 設置穩(wěn)定的存儲庫 - 倉庫
- 官方倉庫
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
- 阿里云倉庫:如果安裝太慢,用阿里云鏡像
$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    
    
    
(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
    - 2. 安裝指定版本
        - $ 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
image

docker常用命令

docker相關

docker相關

啟動docker --------------------- systemctl start docker   ( ctl是control的縮寫 )
停止docker --------------------- systemctl stop docker
重啟docker --------------------- systemctl restart docker
開機啟動docker ----------------- systemctl enable docker   ( <蠹狻G馔铩!;纭Q嫱!已亥! )
查看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 列出收藏數(shù)字不小于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 強制刪除某個鏡像虑椎,必須鏡像已經(jīng)創(chuàng)建的容器正在運行時使用
         -------------------------------- 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
列出最近創(chuàng)建的三個容器 -------------------------- docker ps -n 3
列出已經(jīng)停止的容器 ------------------------------ 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) 刪除全部容器
( 注意區(qū)分刪除鏡像 ------------------------------ docker rmi -f $(docker images -qa) 刪除全部鏡像
( 已經(jīng)在運行的容器泥技,或者鏡像創(chuàng)建的容器正在運行想刪除浆兰,用 -f 強制刪除 )

container容器相關 - 進階命令


以守護方式啟動容器 ------------------------ docker run -di --name 容器名稱 鏡像ID
// 不會進入容器,并且會返回容器ID

進入容器珊豹,并執(zhí)行命令 ---------------------- docker exec -it 容器ID | 容器名稱 執(zhí)行命令
// 進入容器 ------------------------------- docker attach 容器ID | 容器名稱

查看容器日志 ------------------------------ docker logs 容器ID | 容器名稱

查看容器進程 ------------------------------ docker top 容器ID | 容器名稱

宿主機拷貝文件到容器 ---------------------- docker cp 需要拷貝的文件或目錄 容器id|名稱 :容器目錄
容器文件拷貝到宿主機 ---------------------- docker cp 容器id|名稱:文件目錄|文件 宿主機目錄
image

例下圖:從宿主機中拷貝b.png到容器mycentos的tem文件中


image

例下圖:容器拷貝文件夾到宿主機


image

例下圖:以守護方式啟動容器 ------------------------ docker run -di --name 容器名稱 鏡像ID


image

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 新鏡像名稱
  • 提交后,就可以以這個鏡像創(chuàng)建容器了
docker commit -a='作者' -m='備注' 運行時的容器ID 新鏡像名稱
image

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
image

Dockerfile

  • Dockerfile語法
語法 說明
FROM 引用基礎鏡像 - from
MAINTAINER 維護者 - maintainer
name<郵箱或者電話>
LABEL 對鏡像的描述,類似于注釋 - label
name="xxxx" \
date="xxxx"
ENV 設置容器內的環(huán)境變量和常量
在其他地方通過 ( $ ) 來引用該環(huán)境變量的值
ARG 和ENV的作用相似吃溅,都是設置 - 環(huán)境變量
不同點:ARG 所設置的構建環(huán)境的環(huán)境變量溶诞,在將來容器運行時是不會存在這些環(huán)境變量的。但是不要因此就使用 ARG 保存密碼之類的信息决侈,因為 docker history 還是可以看到所有值的螺垢。

Dockerfile 中的 ARG 指令是定義參數(shù)名稱,以及定義其默認值赖歌。
該默認值可以在構建命令 docker build 中用 --build-arg <參數(shù)名>=<值> 來覆蓋
ARG 指令有生效范圍枉圃,如果在 FROM 指令之前指定妻熊,那么只能用于 FROM 指令中
WORKDIR 當前的工作目錄贞岭,即是進入容器后系吩,默認所在的當前目錄
RUN 在新建鏡像時執(zhí)行的命令 - run
比如 RUN yum -y install Vim 表示用yum來安裝 Vim 包
EXPOSE 暴露端口 - expose
CMD 設置容器啟動后默認執(zhí)行的命令和參數(shù)
比如 CMD /bin/bash
- 如果docker run的時候指定了其他CMD命令臣淤,Dockerfile中的CMD命令被忽略婉刀;如果定義了多個CMD巢钓,只有最后一個會執(zhí)行
- 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. 執(zhí)行命令
    • 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 看安裝好了沒
2. docker build

在根目錄下執(zhí)行
docker build -f dockerfile/dockerfile -t hanxian/woow_wu7:v1 .
3. build成功后搔耕,新建容器

docker run -it --name '隨便取' -p 2000:3000 e697c3799626
4. 驗證

ifconfig
// vim a.txt
// wq
image

RUN 和 CMD 和 ENTRYPOINT 三者的區(qū)別

  • <font color=blue>RUN</font> 執(zhí)行命令并創(chuàng)建新的 ( <font color=red>鏡像層</font> ),即在 ( <font color=blue>docker build</font> ) 時執(zhí)行的命令痰娱,RUN 經(jīng)常用于安裝軟件包弃榨。
  • <font color=blue>CMD</font> 設置 ( <font color=red>容器</font> ) 啟動后默認執(zhí)行的命令及其參數(shù),即在 ( <font color=blue>docker run</font> ) 時執(zhí)行的命令
    • <font color=red>但 CMD 能夠被 docker run 后面跟的命令行參數(shù)替換</font>
    • <font color=red>多條CMD命令梨睁,則只會執(zhí)行最后一條</font>
  • ENTRYPOINT 配置 ( <font color=red>容器</font> ) 啟動時運行的命令鲸睛。
    • 不會被 docker run 的命令行參數(shù)指定的指令所覆蓋
    • <font color=red> 當CMD和ENTRYPOINT同時存在時,CMD會被當做參數(shù)傳遞給ENTRYPOINT</font>
RUN CMD ENTRYPONT區(qū)別總結

(1) ( RUN ) 是構建鏡像時執(zhí)行的命令 ( docker build )坡贺,而 ( CMD和ENTRYPOINT ) 是容器啟動時執(zhí)行的命令 ( docker run )
(2) 三者都都支持 exec 和 shell 方式
(3) 常用方式:( 單獨的CMD ) 或者 ( 先ENTRYPOINT后面跟一個CMD )
(4) 多個CMD只有最后一個CMD生效
(5) 命令行帶參數(shù)官辈,CMD將失效而ENTRYPOINT不受影響


案例1:
CMD ["catalina.sh", "run"]
- "catalina.sh":可執(zhí)行文件
- "run":參數(shù)


案例2:
ENTRYPOINT ["docker-entrypoint.sh"] // --- ENTRYPOINT 和 CMD 的組合

EXPOSE 6379
CMD ["redis-server"] // ------------------ 因為上面有ENTRYPOINT,所以CMD中的值會作為ENTRYPOINT的參數(shù)

數(shù)據(jù)卷 volume

為什么需要數(shù)據(jù)卷

  • 不能在宿主機上很方便的訪問容器中的文件(數(shù)據(jù))
  • 外部機器 和 (宿主機中的容器) 不能交換文件
  • 無法在多個容器中共享數(shù)據(jù)
  • 刪除容器遍坟,容器中的數(shù)據(jù)將消失
  • <font color=red>為了解決以上問題拳亿,docker中引入了 數(shù)據(jù)卷 (data volume) 機制</font>

什么是數(shù)據(jù)卷

  • 數(shù)據(jù)卷是存在于一個或多個容器中的特定文件或文件夾,這個文件或文件夾以獨立于 docker 文件系統(tǒng)的形式存在于宿主機中
  • <font color=red>在宿主機中的共享的那個文件或者文件夾叫做數(shù)據(jù)卷</font>
  • <font color=red>數(shù)據(jù)卷的特點:其生存周期獨立于容器的生存周期</font>
  • 數(shù)據(jù)卷的掛載點愿伴,默認是本機 /var/lib/docker/volumes 下的一個目錄

如何用命令實現(xiàn)數(shù)據(jù)卷 - 配置數(shù)據(jù)卷volume

  • docker run -it --name xxxx -p 9000:8000 -v /root/data:/root/data_container 鏡像ID
    • 表示通過鏡像ID新建容器肺魁,并創(chuàng)建數(shù)據(jù)卷,并且做端口映射
    • 注意點:
      • -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 ) 創(chuàng)建容器
(2) 鏡像取名:c2
(3) 數(shù)據(jù)卷 ( 宿主目錄/root/data ) 對應 ( 容器目錄/root/data_container )
(4) 端口映射 3000:4000
(5) -p 是port的意思

volume 相關命令

命令 說明
docker volume create 創(chuàng)建數(shù)據(jù)卷
docker volume inspect 顯示數(shù)據(jù)卷的詳細信息
docker volume ls 列出所有的數(shù)據(jù)卷
docker volume prune 刪除所有未使用的 volumes鹅经,并且有 -f 選項
docker volume rm 刪除一個或多個未使用的 volumes寂呛,并且有 -f 選項
image
image
image

數(shù)據(jù)卷容器

  • 數(shù)據(jù)卷容器其實就是一個普通的容器,只是用來專門存儲數(shù)據(jù)的容器
  • 主要分為兩步
    • 第一步:創(chuàng)建啟動數(shù)據(jù)卷容器 c3 -v /volume
    • 第二步:創(chuàng)建啟動需要共享數(shù)據(jù)的業(yè)務容器 c1 c2 --volumes-from c3
  • 詳細過程
(1) 創(chuàng)建數(shù)據(jù)卷容器 c3
docker run -it --name=c3 -v /volume -p 1000:2000 5e35e350aded /bin/bash


(2) 創(chuàng)建需要共享數(shù)據(jù)可以做映射的普通容器 c1
docker run -it --name=c1 --volumes-from c3 -p 3000:4000 5e35e350aded /bin/bash
image
image
image

docker 鏡像加速器

  • 如下圖
  • 如何驗證已經(jīng)修改源成功瘾晃?
    • 執(zhí)行該命令cat /etc/docker/daemon.json 驗證registry-mirrors的值
image

Docker 部署 Vue項目 到服務器

(1) 一個ceontos系統(tǒng)的服務器


(2) 安裝docker


(3) docker pull nginx:tag ------------------------------------------------ 從遠程repository倉庫拉取nginx鏡像
// 查看所有鏡像 docker images -a
// 搜索某個鏡像 docker search -s 40 nginx
    // -s 40 表示收藏數(shù)不小于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中創(chuàng)建 default.conf 文件贷痪,里面是nginx的配置
在 html.d中創(chuàng)建 index-test.html 文件,隨便寫點東西
+++++ default.conf 內容如下 +++++ 
server {
    listen       80;
    server_name  localhost;
    # 原來的配置蹦误,匹配根路徑
    #location / {
    #    root   /usr/share/nginx/html;
    #    index  index.html index.htm;
    #}
    # 更該配置劫拢,匹配/路徑,修改index.html的名字强胰,用于區(qū)分該配置文件替換了容器中的配置文件
    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) 新建并執(zhí)行容器
    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 ----------------- 根據(jù)鏡像創(chuàng)建執(zhí)行容器
// 注意這里騰訊云可以訪問不到舱沧,因為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>

執(zhí)行命令
 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 - 用于打包涡真,本地啟動服務,執(zhí)行 script 命令等
[1]
yum install epel-release
yum install nodejs
// node -v 查看是否安裝成功肾筐,版本
// npm -v 查看npm版本哆料,注意node自帶npm
// 注意:這樣下載的node版本過低,需要升級B痤怼6唷!;I5湔蟆!D魇拧W嘲 !3潘狻4跆洹!Wぁ@暄邸!T〉巍M孛取!I浴K局尽L鹱稀!
// 升級方法: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) 優(yōu)化流程 創(chuàng)建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='./' ) 相對路徑
image
image
image

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的意思,環(huán)境變量
// 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
// 注意:第四步執(zhí)行的目錄是在第三步的目錄中瘸恼,即 ( /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容器并執(zhí)行命令/bin/bash
// mysql -uroot -p123456 -------------------- 用戶名root 密碼123456


(6) 當在(5)執(zhí)行mysql -uroot -p123456時,
1.
報錯:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
原因:沒有啟動mysql
解決辦法:
1. 在mysql的容器中執(zhí)行 /etc/init.d/mysql start --skip-grant-tables
2. 在執(zhí)行mysql -uroot -p 回車
3. 回車后讓輸入密碼东帅,此時不輸入任何密碼直接回車

2. 報錯ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解決辦法:在mysql的容器中執(zhí)行 /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'; 
image
image
image
image

centos目錄結構

  • /bin:( <font color=red>binary:二進制的</font> ) 存放二進制可執(zhí)行文件压固,<font color=red>常用的命令一般都在這里</font>
  • /etc:存放系統(tǒng)管理和 <font color=red>配置文件</font>
  • /usr:( usr:unix system resources 系統(tǒng)資源 ) 用于存放 <font color=red>系統(tǒng)應用程序</font>
  • /root: 超級用戶(系統(tǒng)管理員)的主目錄(特權階級o);
  • /home:存放所有用戶文件的根目錄靠闭,用戶主目錄的基點帐我,如用戶user的主目錄就是/home/user,可以用~user表示
  • /opt: 額外安裝的可選應用程序包所放置的位置愧膀。一般情況下拦键,我們可以把tomcat等都安裝到這里
image

資料

入門 http://dockone.io/article/8350
yum命令 https://www.runoob.com/linux/linux-yum.html
centOS安裝Docker教程 https://juejin.im/post/6844903990002450439
阮一峰 http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
docker常用命令 https://www.cnblogs.com/DeepInThought/p/10896790.html
rpm查看某個包的具體安裝路徑 https://blog.csdn.net/jsloveyou/article/details/94601163
數(shù)據(jù)卷 https://www.imooc.com/article/26316
docker部署vue http://www.reibang.com/p/3771b155283b
centos安裝node的兩種方式 https://blog.csdn.net/lu_embedded/article/details/79138650

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市檩淋,隨后出現(xiàn)的幾起案子芬为,更是在濱河造成了極大的恐慌,老刑警劉巖蟀悦,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媚朦,死亡現(xiàn)場離奇詭異,居然都是意外死亡日戈,警方通過查閱死者的電腦和手機询张,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涎拉,“玉大人瑞侮,你說我怎么就攤上這事」呐。” “怎么了半火?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長季俩。 經(jīng)常有香客問我钮糖,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任店归,我火速辦了婚禮阎抒,結果婚禮上,老公的妹妹穿的比我還像新娘消痛。我一直安慰自己且叁,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布秩伞。 她就那樣靜靜地躺著逞带,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纱新。 梳的紋絲不亂的頭發(fā)上展氓,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音脸爱,去河邊找鬼遇汞。 笑死,一個胖子當著我的面吹牛簿废,可吹牛的內容都是我干的空入。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼捏鱼,長吁一口氣:“原來是場噩夢啊……” “哼执庐!你這毒婦竟也來了酪耕?” 一聲冷哼從身側響起导梆,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迂烁,沒想到半個月后看尼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡盟步,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年藏斩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片却盘。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡狰域,死狀恐怖,靈堂內的尸體忽然破棺而出黄橘,到底是詐尸還是另有隱情兆览,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布塞关,位于F島的核電站抬探,受9級特大地震影響,放射性物質發(fā)生泄漏帆赢。R本人自食惡果不足惜小压,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一线梗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怠益,春花似錦仪搔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孩饼,卻和暖如春髓削,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镀娶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工立膛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梯码。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓宝泵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親轩娶。 傳聞我的和親對象是個殘疾皇子儿奶,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容