Docker主要知識點彙總

1.什麼是Docker?

Docker是一種新的容器化技術,爲應用開發和部署提供“一站式”容器解決方案,能幫助開發者高效快速的構建應用,實現“Build,Ship and Run Any App, Anywhere”,從而達到“一次構建,到處運行”的目的。是一個容器化平臺,它以容器的形式將您的應用程序及其所有依賴項打包在一起,以確保您的應用程序在任何環境中無縫運行。

2.Docker 有什麼特色?

物美價廉;輕量級和便攜化;低CPU 和內存使用,啓動、運行、關閉速度快,可以用來作爲雲計算的基礎
對於開發和部署來說,Docker可以:更快速的交付和部署應用環境;更高效的資源利用率;更便捷的遷移和擴展性;更便捷的應用更新管理

 2.Docker與虛擬機的區別?

Docker和虛擬機都是基於軟件的平臺虛擬化技術,其中:

虛擬機屬於完全虛擬化,即模擬完整的底層硬件環境特權指令的執行,客戶操作系統無需進行修改。比如我們常用的VirtualBox,VMWare Workstation和Parallels Desktop等虛擬化軟件。
Docker和其它容器技術便是操作系統級虛擬化,即直接通過內核創建虛擬的操作系統實例(內核和庫),來隔離不同的進程和資源。
也就是說,Docker容器不需要額外的虛擬機管理軟件和虛擬機操作系統層,直接在宿主機操作系統層面上實現虛擬化,從而達到輕量級,高效的目的。

3.Docker核心概念

 Docker底層組成:
Namespace:隔離技術的第一層,確保 Docker 容器內的進程看不到也影響不到 Docker 外部的進程。
Control Groups:LXC 技術的關鍵組件,用於進行運行時的資源限制。
UnionFS(文件系統):容器的構件塊,創建抽象層,從而實現 Docker 的輕量級和運行快速的特性。

Docker的主要構成:
Docker Client:用戶和 Docker 守護進程進行通信的接口,也就是 docker 命令。
Docker Daemon:宿主機上用於用戶應答用戶請求的服務。
Registry:註冊服務器,註冊服務器是存放倉庫(Repository)的具體服務器。

Docker的三元素:
Container:用於運行應用程序的容器,包含操作系統、用戶文件和元數據,相當於鏡像Images的一個運行實例,Docker容器包括應用程序及其所有依賴項,但與其他容器共享內核,在主機操作系統的用戶空間中作爲獨立進程運行。Docker容器不依賴於任何特定的基礎架構:它們可以在任何計算機,任何基礎架構和任何雲中運行。
Images:只讀的 Docker 容器模板,簡言之就是系統鏡像文件。Docker鏡像是Docker容器的源代碼,Docker鏡像用於創建容器。使用build命令創建鏡像
DockerFile:進行鏡像創建的指令文件。Dockerfile實際上是由一行行命令組成的,讓用戶可以方便的創建自定義鏡像。Dockerfile大體由四部分組成:指明基礎鏡像指令:FROM;維護者信息指令:MAINTAINER;鏡像操作指令:RUN、EVN、ADD和WORKDIR等;容器啓動時的執行指令:CMD、ENTRYPOINT和USER等

下邊就是一個Dockerfile的例子

FROM python:2.7
MAINTAINER <[email protected]>
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]

1. 從dockerhub上pull下python 2.7的基礎鏡像。
 2. 維護者的信息
 3. copy當前目錄到容器中的 /app目錄下  複製本地主機的<src>(Dockerfile所在目錄的相對路徑)到容器裏<dest>
 4. 指定工作路徑爲/app
 5. 安裝依賴
 6. 暴露5000端口
 7. 啓動app

4.Docker常用命令

1.檢查安裝 docker info
2. 查看本地鏡像 docker images
3. 下載鏡像 docker pull <image name>

4. 運行鏡像 docker run <image name>
輸入 
docker run busybox /bin/echo Hello Docker

輸出
Hello Docker
這條命令是運行 busybox 鏡像中的 /bin/echo 命令,參數是 Hello Docker

其他標誌:

-i 保證容器的stdin開啓
-t 爲容器生成一個tty終端
-d 表示後臺運行
--rm=true 容器終止後刪除
--name name 表示 container 的名稱
-v 將目錄掛載到 container
--privileged=true 防止沒有權限訪問掛載的目錄
-p 9998:80 指定端口映射
--link name:container 與其他 container 鏈接.
--icc=true 去除 container 之間不互通. 需要放在 run 前面.


5.刪除鏡像 docker rmi
docker rmi <ID>/<name>
刪除所有未打 tag 的鏡像

docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')
刪除所有鏡像

docker rmi $(docker images -q)
6. 查看本地容器 docker ps
7. 查詢輸出docker logs <ID>/<name>

8. 啓動容器docker start
docker start <ID>/<name>
9. 停止容器docker stop
docker stop <ID>/<name>
10. 重啓容器docker restart
docker restart <ID>/<name>
11.刪除容器 docker rm
docker rm <ID>/<name>
刪除所有 Docker 容器

docker rm $(docker ps -a -q)
12.保存容器docker commit
docker commit -m='A new image' --author='Aomine' 614122c0aabb aoct/apache2
將當前的 Docker 容器保存爲一個名爲 aoct/apache2 的鏡像。-m指定創建鏡像的提交信息,--author指定鏡像作者,接着是容器ID、目標鏡像倉庫、鏡像名。

13. 鏡像上傳docker push
創建docker hub賬戶,將本地的image push 到hub上,這樣其他人也可以使用了。首先我們先tag 一個image,然後將其push到我們的repo裏。

docker tag id {username}/{images_name}:v1
docker push {username}/{images_name}


14. 獲取鏡像歷史docker history
docker history <image-name>
只能對本地存在的 Docker 鏡像執行這個命令。

15.進入容器
當我們使用 -d參數運行了一個Container的時候,有時候我們需要進入這個容器進行一些操作。例如有這樣的一個情況,我們運行了一個app在一個容器裏,我們想進入容器看看,這個app運行的狀態,查看log。那們如何進入呢?

1.docker attach <ID>/<name>
$ docker run -d --name demo ubuntu /usr/bin/top -b
$ docker attach demo
2.docker exec <ID>/<name>
    docker exec -i -t webapp /bin/bash
docker attach 和 docker exec區別

docker attach讓用戶可以進入Container查看輸出等等操作,但是並不會另外啓動一個進程! 如果你用CTRL-c來退出,同時這個信號會kill Container(默認情況)

docker exec會啓動另外一個進程來進入Container,這裏的操作是在這個進程下的。如果你用CTRL-c來退出,不會kill 原來的Container

16.鏡像的導入與導出load & save
使用 load 從 stdin 導入一個 tar 格式的鏡像或者倉庫,然後用 save 將 tar 鏡像輸出到 stdout。

docker save -o <output file> <image>或者docker save <image> > <output file>
docker load -i <file name>或者docker load < <file name>
例如:

命令 # docker save -o a.tar suse
命令 # docker load -i a.tar
17.容器導入import
用於導入 URL / 文件,從本地導入需要 - 參數。docker import [OPTIONS] URL|- [REPOSITORY[:TAG]]、URL/-二選一。
18.容器導出export
和 import 相反,export 將容器導出成 tar 壓縮包。

命令 # docker run -i -t -d suse:minimal /bin/bash

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章