日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
從零開始了解Docker

從零開始了解docker

作者:佚名 2018-04-18 07:01:59

開發(fā)

前端

云計算 本文會簡單介紹下 Docker 的基礎概念,入門級使用方式和一些使用 Docker 能大大提升效率的場景。對 Docker 最簡單并且?guī)в幸欢ㄥe誤的認知就是 “Docker 是一種性能非常好的虛擬機”。

【編者的話】Docker 自開源以來受到了各大公司的廣泛關注,或許現在互聯網公司的運維體系不承載在 Docker(或 Pouch 等)之上都不好意思說自己的互聯網公司。

本文會簡單介紹下 Docker 的基礎概念,入門級使用方式和一些使用 Docker 能大大提升效率的場景。

原理

對 Docker 最簡單并且?guī)в幸欢ㄥe誤的認知就是 “Docker 是一種性能非常好的虛擬機”。

正如上面所說,這是有一定錯誤的說法。Docker 相比于傳統(tǒng)虛擬機的技術來說先進了不少,具體表現在 Docker 不是在宿主機上虛擬出一套硬件后再虛擬出一個操作系統(tǒng),而是讓 Docker 容器里面的進程直接運行在宿主機上(Docker 會做文件、網絡等的隔離),這樣一來 Docker 會 “體積更輕、跑的更快、同宿主機下可創(chuàng)建的個數更多”。

Docker 中有三個核心概念:Image、Container、Repository。

  • Image: 有領“好人卡”傾向的廣大程序猿一定對 鏡像 的概念不會陌生。但和 Windows 的那種 ISO 鏡像相比,Docker 中的鏡像是分層的,可復用的,而非簡單的一堆文件迭在一起(類似于一個壓縮包的源碼和一個 Git 倉庫的區(qū)別)。
  • Container: 容器的存在離不開鏡像的支持,他是鏡像運行時的一個載體(類似于實例和類的關系)。依托 Docker 的虛擬化技術,給容器創(chuàng)建了獨立的端口、進程、文件等“空間”,Container 就是一個與宿機隔離 “容器”。容器可宿主機之間可以進行 port、volumes、network 等的通信。
  • Repository: Docker 的倉庫和 Git 的倉庫比較相似,擁有倉庫名、tag。在本地構建完鏡像之后,即可通過倉庫進行鏡像的分發(fā)。常用的 Docker hub 有 https://hub.docker.com/ 、 https://cr.console.aliyun.com/ 等。

相關命令

1. 安裝

Docker 的安裝是非常便捷的,在 macOS、ubuntu 等下面都有一鍵式安裝工具或者腳本。更多可以參考 Docker 官方教程。

安裝后 Terminal 中敲下 docker,有使用說明出來的話大多情況下說明已經安裝成功了。

2. 尋找基礎鏡像

DockerHub 等網站都提供了眾多鏡像,一般情況下我們都會從它那找個鏡像作為基礎鏡像,然后再進行我們的后續(xù)操作。

這里我們以 Ubuntu 基礎鏡像為例,配置一個 node 環(huán)境。

因為 “鏈路太長” 的原因,國內訪問 Docker Hub 可能會比較慢,可以使用國內眾多廠商提供的鏡像加速器

3. 拉取基礎鏡像

利用 docker pull 命令即可從相關 hub 網站上拉取鏡像到本地。同時在拉的過程中就能看到是按照多個 “層” 去拉鏡像的。

  
 
 
 
  1. > docker pull ubuntu:18.04 
  2.  
  3. 18.04: Pulling from library/ubuntu 
  4. c448d9b1e62f: Pull complete 
  5. 0277fe36251d: Pull complete 
  6. 6591defe1cd9: Pull complete 
  7. 2c321da2a3ae: Pull complete 
  8. 08d8a7c0ac3c: Pull complete 
  9. Digest: sha256:2152a8e6c0d13634c14aef08b6cc74cbc0ad10e4293e53d2118550a52f3064d1 
  10. Status: Downloaded newer image for ubuntu:18.04 

執(zhí)行 docker images 即可看到本地所有的鏡像。

  
 
 
 
  1. > docker images 
  2. REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE 
  3. ubuntu                   18.04               58c12a55082a        44 hours ago   

4. 創(chuàng)建一個 Docker 容器

docker create 命令通過鏡像去創(chuàng)建一個容器,同時吐出容器 ID。

  
 
 
 
  1. > docker create --name ubuntuContainer ubuntu:18.04 
  2. 0da83bc6515ea1df100c32cccaddc070199b72263663437b8fe424aadccf4778 

用 docker start 即可運行改容器。

  
 
 
 
  1. > docker start ubuntuContainer 

用 docker ps 即可查看運行中的 container。

  
 
 
 
  1. > docker ps 
  2. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 
  3. 9298a27262da        ubuntu:18.04        "/bin/bash"         4 minutes ago       Up Abou 

用 docker exec 即可進入該 container。

  
 
 
 
  1. > docker exec -it 9298 
  2. root@9298a27262da:/# ls 
  3. bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
  4. root@9298a27262da:/# exit 

用 docker run 可以一步到位創(chuàng)建并運行一個容器,然后進入該容器。

  
 
 
 
  1. > docker run -it --name runUbuntuContainer ubuntu:18.04 /bin/bash 
  2. root@57cdd61d4383:/# ls 
  3. bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
  4. root@57cdd61d4383:/# 
  5. docker ps 可以查到已經成功運行了 runUbuntuContainer 
  6. > docker ps 
  7. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 
  8. 57cdd61d4383        ubuntu:18.04        "/bin/bash"         9 seconds ago       Up 8 seconds                            runUbuntuContainer 
  9. 9298a27262da        ubuntu:18.04        "/bin/bash"         9 minutes ago       Up 6  

5. 在容器里安裝 Node 環(huán)境

進入容器之后一切操作和普通環(huán)境一致,我們安裝個簡單的 node 環(huán)境。

  
 
 
 
  1. > apt-get update 
  2. > apt-get install wget 
  3. > wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash 
  4. 安裝完之后可能當前 session 讀不到 nvm 命令,可以 exit 之后再進入中終端環(huán)境 
  5. > nvm install 8.0.0 
  6. > node -v 

6. commit 容器,創(chuàng)建新鏡像

和 Ghost 裝 Windows 一樣,很多時候,我們期望能定制自己的鏡像,在里面安裝一些基礎環(huán)境(比如上文中的 node),然后制作出自己要的基礎鏡像。這個時候 docker commit 就派上用場了。

  
 
 
 
  1. > docker commit --author "rccoder" --message "curl+node" 9298 rccoder/myworkspace:v1 
  2. sha256:68e83119eefa0bfdc8e523ab4d16c8cf76770dbb08bad1e32af1c872735e6f71 
  3. 通過 docker images 就能看到新制作的 rccoder/myworkspace 就躺在這里了 
  4. >docker images 
  5. REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE 
  6. rccoder/myworkspace      v1              e0d73563fae8        20 seconds ago      196MB 

接著,試一下我們新創(chuàng)建的鏡像?

  
 
 
 
  1. > docker run -it --name newWorkSpace rccoder/myworkspace:v1 /bin/bash 
  2. root@9109f6985735:/# node -v 
  3. 8.0.0 

看起來沒問題。

7. push 鏡像到 docker hub

鏡像制作好了,怎么共享出去讓別人使用呢?這里以 push 到 docker hub 為例。

第一步是先去 docker hub 注冊一個賬號,然后在終端上登錄賬號,進行 push。

  
 
 
 
  1. > docker login 
  2. > docker push rccoder/myworkspace:v1 
  3. The push refers to repository [docker.io/rccoder/myworkspace] 
  4. c0913fec0e19: Pushing [=>                                                 ]  2.783MB/116.7MB 
  5. bb1eed35aacf: Mounted from library/ubuntu 
  6. 5fc1dce434ba: Mounted from library/ubuntu 
  7. c4f90a44515b: Mounted from library/ubuntu 
  8. a792400561d8: Mounted from library/ubuntu 
  9. 6a4e481d02df: Waiting 

8. 是時候使用 Dockerfile 了

用 Docker 進行持續(xù)集成?相比在了解 Docker 之前肯定聽過這個事情,那就意外著需要從某個地方拷貝代碼,然后執(zhí)行(對,聽上去有點 travis-ci 的那種感覺)。

是時候該 Dockerfile 出場了!

Dockerfile 是一個由一堆命令+參數構成的腳本,使用 docker build 即可執(zhí)行腳本構建鏡像,自動的去做一些事(同類似于travis-ci 中的 .travis.yml)。

Dockerfile 的格式統(tǒng)統(tǒng)為:

  
 
 
 
  1. # Comment 
  2. INSTRUCTION arguments 

必須以 FROM BASE_IMAGE 開頭指定基礎鏡像。

更詳細的規(guī)范與說明請參考 Dockerfile reference。這里我們以基于上面的 rccoder/myworkspace:v1 作為基礎鏡像,然后在根目錄創(chuàng)建 a 目錄為例。

Dockerfile 如下:

  
 
 
 
  1. FROM rccoder/myworkspace:v1 
  2. RUN mkdir a 

然后執(zhí)行:

  
 
 
 
  1. > docker build -t newfiledocker:v1 . 
  2. Sending build context to Docker daemon  3.584kB 
  3. Step 1/2 : FROM rccoder/myworkspace:v1 
  4. ---> 68e83119eefa 
  5. Step 2/2 : RUN mkdir a 
  6. ---> Running in 1127aff5fbd3 
  7. Removing intermediate container 1127aff5fbd3 
  8. ---> 25a8a5418af0 
  9. Successfully built 25a8a5418af0 
  10. Successfully tagged newfiledocker:v1 
  11. 新建基于 newfiledocker 的容器并在終端中打開,發(fā)現里面已經有 a 文件夾了。 
  12. > docker docker run -it newfiledocker:v1 /bin/bash 
  13. root@e3bd8ca19ffc:/# ls 
  14. a  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv

借助 Dockerfile 的能力,Docker 留下了無限的可能。

能做什么

說了這么一堆,那實際生產環(huán)境中 Docker 能做什么呢?常用的可能有下面這些(歡迎在評論中補充)

1. 多環(huán)境的部署切換

業(yè)務開發(fā)中往往需要區(qū)分開發(fā)環(huán)境與線上環(huán)境,利用 Docker 能原封不動的將開發(fā)環(huán)境中的 代碼與環(huán)境原封不動無污染的 遷移到線上環(huán)境,配合一定的自動化流程即可實現自動的發(fā)布。

2. 前端云構建

因為 node_modules 的蛋疼問題,同一個倉庫下不同人開發(fā)往往會遇到不同的人使用不同的 包版本 且自己根本不知道與別人不一樣,最終導致發(fā)布之后產生線上問題。利用 Docker 可以在云端新建容器,遠程無污染、低成本構建代碼,實現不同人用的一定是同一個版本。

3. 復雜環(huán)境一鍵配置

某些場景下可能會配一些超級復雜的環(huán)境(比如:大一同學配 Java 環(huán)境),這個時候可以利用 Docker 對環(huán)境配置做封裝,直接生成鏡像,讓大家低成本使用。

4. 持續(xù)集成單元測試

類似于 travis-ci 這種

5. 同應用多版本隔離、文件隔離

比如這個項目依賴 node 6,那個項目依賴 node 8(只是舉例子,硬盤夠大的話還是建議通過 nodeinstall 解決);同一臺服務器上跑了 100 個 wordpress 程序(可以用 Docker 建立隔離開,防止互相污染)。

6. 省錢

嗯,低成本安全超售(大霧)。


網頁名稱:從零開始了解Docker
URL網址:http://m.5511xx.com/article/dpecspg.html