DevOps系列——Docker基礎知識總結

docker教程html

1. Docker簡介

1.1. Docker更名字

1.2. 文檔

1.2.1. 必看文檔

1.2.2. 社區技術類博客

1.2.3. 其餘文檔

1.3. 基礎概念

1.3.1. 名詞那些

2. Docker基礎知識點

2.1. Docker命令說明

2.2. Docker信息查詢

  • docker help:查看幫助信息
    • docker run —help:能夠查看某條命令的具體用法
  • docker info:查看docker的安裝信息
  • which docker:查看docker的執行路徑

2.3. 鏡像管理

  • docker pull <鏡像名:tag>:從官網拉取鏡像
  • docker search <鏡像名>:搜索在線可用鏡像名
  • docker images:查詢全部的鏡像,默認是最近建立的排在最上
  • docker rmi <鏡像名:tag>:刪除鏡像
  • docker rmi $(docker images -q -f dangling=true):批量刪除無用鏡像前端

2.4. 容器管理

  • docker ps:查看全部運行中容器
  • docker ps -a:查看全部容器
  • docker ps -l: 查看最後啓動的容器的信息
    • -l:最後的那個
  • docker top {容器ID|容器名稱}:顯示容器內運行的進程
  • docker run <鏡像名1> <鏡像名2> <鏡像名3>:同時運行幾個
  • docker run <鏡像名> apt-get install -y ping:在容器中安裝新程序
    • 必定要加-y,爲何不太記得了
  • docker run -it ubuntu /bin/bash:運行一個可交互的容器
    • -i:-i表示容許咱們對容器內的 (STDIN) 進行交互
    • -t:表示在新容器內指定一個僞終端或終端
    • 咱們在容器內還指定了一個新的命令:/bin/bash 。這將在容器內啓動 bash shell
  • docker run -e <名稱>=<參數> node:設置容器環境
  • docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done:執行後臺任務
  • docker run --name web training/webapp:爲容器起名字
  • docker run —rm <鏡像名> 用完就刪除,不能與-d一塊兒使用
  • docker exec -it sso-server-dev /bin/bash:docker啓動後執行一些命令操做
  • docker run —restart always node:掛了重啓
  • docker tag {容器ID|容器名稱} <鏡像名:tag>:給鏡像加tag
  • docker stop {容器ID|容器名稱}:中止容器
  • docker start {容器ID|容器名稱}:啓動容器
  • docker cp 7bb0e258aefe:/etc/debian_version .:從container中拷貝文件,當container已經關閉後,在裏面的文件還能夠拷貝出來。把容器中的/etc/debian_version拷貝到當前目錄下。

2.5. 容器日誌

  • docker inspect {容器ID|容器名稱}:docker容器的配置和狀態信息
  • docker inspect -f '{{ .NetworkSettings.IPAddress }}' {容器ID|容器名稱}:過濾信息
  • docker logs {容器ID|容器名稱}:查詢某個容器的全部操做記錄,標準輸出流
  • docker logs -f {容器ID|容器名稱}: 實時查看容易的操做記錄

2.6. 網絡端口映射

  • docker run -P <鏡像名>
    • -P:它將會把容器內部的5000端口映射到本地Docker主機的高位端口上(這個端口的一般範圍是 32768 至 61000)。
  • docker run -p <主機端口號>:<容器端口號> mongo:
    • 1:1 映射方式可以保證映射到本地主機端口的惟一性
  • docker run -p 127.0.0.1:5001:5002 mongo:指定綁定的網絡地址
  • docker run -p 80:5000 training/webapp python app.py:指定主機和容器端口號
  • docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:綁定udp端口
  • docker port mongo 5000:查詢容器內的端口號映射到哪一個本地地址,127.0.0.1:49155
  • docker port -p 1111:1111 -p 2222:2222 -p 3333:3333 mongo: -p可使用屢次

2.7. 容器連接

  • docker run -d -P --name web --link <容器名稱>:<別名> <鏡像名>
    • 以後你的項目中須要使用ip地址的地方均可以用別名代替了
// 實例
sudo docker run -d --name mongo mongo
sudo docker run -d -P --name web --link mongo:db node

$ docker ps
CONTAINER ID  IMAGE                     COMMAND               CREATED             STATUS             PORTS                    NAMES
349169744e49  training/postgres:latest  su postgres -c '/usr  About a minute ago  Up About a minute  5432/tcp                 db
aed84ee21bde  training/webapp:latest    python app.py         16 hours ago        Up 2 minutes       0.0.0.0:49154->5000/tcp  db/web,web

咱們鏈接容器作什麼?咱們發現鏈接的兩個容器是父子關係。這裏的父容器是db能夠訪問子容器web。爲此docker在容器之間打開一個安全鏈接隧道不須要暴露任何端口在容器外部。
你會注意到當你啓動db容器的時候咱們沒有使用-P或者-p標識。咱們鏈接容器的時候咱們不須要經過網絡給PostgreSQL數據庫開放端口。

2.8. 容器網絡

2.9. 管理容器數據

  • 整理的很好了:https://yq.aliyun.com/articles/138?spm=5176.100239.blogcont65145.33.iFVPLT
  • 數據卷python

    • 數據卷在容器建立的時候進行初始化。若是容器的鏡像在特定的Mount點下有數據,那麼已有的數據將被拷貝到指定目錄
    • docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
    • docker run --name jupiter-install -v $(pwd):/home -w /home --rm node_tools npm install
      • v是把當前文件夾的代碼徹底複製到容器中,-w的做用就是cd進咱們想要進入的目錄
  • 數據卷容器nginx

    • 果你但願在容器間共享卷,那麼就可使用數據型容器
  • 數據備份還原和遷移

2.10. 建立鏡像

2.10.1. 官方拉取

  • docker pull node:從官網下載node鏡像

2.10.2. Dockfile使用

  • docker build -t node-pomelo ./:經過Dockerfile建立鏡像
  • docker build -t node-pomelo -f Dockerfile.pomelo.env ./:經過配置文件指定Dockerfile文件

2.10.3. 鏡像增量

  • docker commit <容器id> <新鏡像名稱>
  • docker commit -m="註釋信息" -a="user信息" node:v2
  • docker history node:v2:查看鏡像提交歷史
    • 能夠在一些容器裏面動態的添加一些東西,而後打包成新的鏡像,該鏡像是原始鏡像與容器的整合
    • 不管容器裏作什麼操做,寫文件,刪文件。該容器的基本鏡像都不會有任何改變。這是由於Docker從父鏡像創建增量鏡像,只存儲每一個容器的更改。所以,若是你有一個300MB的父鏡像,若是你在容器中安裝了50MB的額外應用或服務,你的容器只有50MB,父鏡像仍是300MB。可是可使用Dockfile或commit命令來,把增量鏡像和父鏡像一塊兒生成一個新的鏡像。

2.10.4. 從零開始建立純鏡像

2.10.4.1. 簡單介紹

2.10.4.1.1. 術語介紹git

  • 在 Docker 的術語裏,一個只讀層被稱爲鏡像,一個鏡像是永久不會變的。
  • 因爲 Docker 使用一個統一文件系統,Docker 進程認爲整個文件系統是以讀寫方式掛載的。可是全部的變動都發生頂層的可寫層,而下層的原始的只讀鏡像文件並未變化。因爲鏡像不可寫,因此鏡像是無狀態的。

2.10.4.1.2. 父鏡像web

  • 每個鏡像均可能依賴於由一個或多個下層的組成的另外一個鏡像。咱們有時說,下層那個鏡像是上層鏡像的父鏡像。

2.10.4.1.3. 基礎鏡像redis

  • 一個沒有任何父鏡像的鏡像,謂之基礎鏡像。

2.10.4.1.4. 鏡像IDmongodb

  • 全部鏡像都是經過一個 64 位十六進制字符串 (內部是一個 256 bit 的值)來標識的。爲簡化使用,前 12 個字符能夠組成一個短ID,能夠在命令行中使用。短ID仍是有必定的碰撞機率,因此服務器老是返回長ID。

2.10.4.2. 思路

  • http://www.widuu.com/chinese_docker/articles/baseimages.html
  • http://www.cnblogs.com/alexkn/p/3879540.html
  • 大概的思路就是將整個系統打一個rar,而後用docker把這個壓縮包導入,再建立一個image
  • 不過不推薦這麼用,應該是一層一層的加東西,若是打包一個純原始的image,那麼不只很大,並且不符合分離的這種思想
  • 網上的一些單獨的node,mongodb,nginx都是很是小的,咱們能夠找官方推薦的那些比較純淨的,不要找那種集成的,而後把下載的東西記錄一下

2.11. 容器遷器

  • docker save debian02 > /root/debian02.tar:debian02:鏡像打成壓縮包
  • docker load < debian02.tar:在另外的機器上導入鏡像
  • docker images:查看存在的鏡像
  • docker容器遷移簡單方便,能夠任意的拷貝部署,之後不再怕新部署環境了,一堆依賴裝的想死有木有。
  • save和export的對比參考地址:

2.12. 發佈到鏡像網站

2.12.1. Docker Hub

docker hub的自動化構建docker

2.12.2. 阿里Docker Hub

  • 網址:https://dev.aliyun.com
  • ``發佈到dockerhub
    • docker login
      • 這個命令將提示你輸入用戶名和密碼。你的用戶信息將被紀錄在~/.docker/config.json文件中。
    • docker push yourname/newimage
    • 發佈鏡像到dockerhub:docker push shiguoqing/imagename

2.12.3. 鏡像加速

2.12.4. 經常使用鏡像介紹

  • 同一技術有不少鏡像,最好選官方認證的鏡像
  • 這些鏡像的網址介紹了該鏡像的構成和使用說明
  • mongo
  • node
  • redis

2.13. Docker開機自啓動

2.13.1. docker的自啓動

  • 首先須要瞭解你所使用的系統用的什麼啓動管理工具,在ubuntu 15.04及其以上版本使用的是systemd,在14.10及其如下使用的是upstart。在15.04及以上版本須要執行:
  • 啓動服務:sudo service docker restart
  • 中止服務:sudo service docker stop
  • 自啓動:systemctl enable docker
  • 參考文檔:https://yq.aliyun.com/articles/132?spm=5176.100239.blogcont65145.27.SRH5q8

2.13.2. docker中容器的自啓動

  • docker run -i -t node /etc/rc.local
    • 在容器中把全部須要開機自的啓動命令放在/etc/rc.local中,就能夠達到當docker啓動的時候多容器自動啓動

3. DockerFile文件

3.1. 爲何要用DockerFile

  • 配置文件的優勢:標準,可知,可複用
  • 你用了配置文件別人纔敢用你的鏡像,不然別人不放心你的鏡像中是否安裝了一些不安全的東西

3.2. 文檔

4. Docker Compose實現自動化部署

5. Swarm實現集羣

6. Docker的監控

7. Docker部署

7.1. 藍綠部署

7.2. 灰度發佈

8. 特別感謝

  •  

9. 免責說明

  • 本文檔中的部份內容摘自網上的衆多博客,僅做爲本身知識的補充和整理,並分享給其餘須要的coder,不會用於商用。
  • 由於不少博客的地址看完沒有及時作保存,因此不少不會在這裏標明出處,很是感謝各位大牛的分享,也但願你們理解。
  • 若是原文做者感受不適,能夠及時聯繫我shiguoqing999@163.com,我將及時刪除爭議部份內容

10. 追責聲明

  • 若有大段引用超過全文50%的內容,請在文檔結尾標明原文出處:龍馬行空-石國慶-https://my.oschina.net/u/1416844/blog,不然將視爲抄襲,予以法律追究,請各位尊重我的知識產權。

我的公衆號

  • 你們能夠關注個人公衆號,我會舉辦線下代碼操練活動

    

  • 本人提供全部前端知識的付費諮詢服務,本諮詢可提高企業核心競爭力
  • 價格請郵箱聯繫:shiguoqing999@163.com,有願意提供場地的公司也能夠聯繫我,會有優惠
相關文章
相關標籤/搜索