1. Docker簡介:
docker是一個基于LXC的高級容器引擎。簡單地說,docker是一個輕量級的虛擬解決方案,或者說它是一個超輕量級的虛擬機(容器)。
Docker是一個開源的引擎,可以輕松的為任何應用創建一個輕量級的、可移植的、自給自足的容器。
Docker 的理念為“Build, Ship and Run Any App, Anywhere”
-
基本概念
- Docker Client:Docker提供給用戶的客戶端。
- Docker Daemon:Docker服務的守護進程。
- Docker Images:Docker的鏡像,一張 “只讀” 的系統CD。
- Docker Container:Docker的容器,Docker Images運行實例。
- Docker Registry : Docker Images的倉庫,Dock Hub https://www.dockerhub.com。
- 架構
- AUFS聯合文件系統
AUFS 是一種 Union File System(聯合文件系統),又叫 Another UnionFS,后來叫Alternative UnionFS,再后來叫成高大上的 Advance UnionFS。所謂 UnionFS,就是把不同物理位置的目錄合并mount到同一個目錄中。UnionFS的一個最主要的應用是,把一張CD/DVD和一個硬盤目錄給聯合 mount在一起,然后,你就可以對這個只讀的CD/DVD上的文件進行修改(當然,修改的文件存于硬盤上的目錄里)
- LXC
LXC 就是 Linux Container。 LXC 也是一種輕量的虛擬技術,Linux 原生支持的容器。可以說 docker 就是基于 LXC 發展起來的,提供 LXC 的高級封裝,發展標準的配置方法。
LXC可以在操作系統層次上為進程提供的虛擬的執行環境,一個虛擬的執行環境就是一個容器。可以為容器綁定特定的cpu和memory節點,分配特定比例的cpu時間、IO時間,限制可以使用的內存大小(包括內存和是swap空間),提供device訪問控制,提供獨立的namespace(網絡、pid、ipc、mnt、uts),主要使用了cgroup技術。
CGroup是Control Groups的縮寫,是Linux內核提供的一種可以限制、記錄、隔離進程組所使用的硬件資源的機制。
- 與虛擬機對比
2. Docker安裝
brew cask install docker
或到官網下載
https://store.docker.com/editions/community/docker-ce-desktop-mac
3. Docker使用
-
基本命令
- 查詢docker版本:
docker version
- 查看docker環境信息:
docker info
- 列出所有鏡像:
docker images
- 列出運行狀態的容器實例:
docker ps
- 從遠程摘取docker鏡像:
docker pull [鏡像名:版本號/tag]
- 提交docker修改內容:
docker commit [containerId] tag
- 交互模式啟動容器:
docker run -it -p 8080:8080 -v /usr/local:/var/jenkins_home --name jenkins jenkins:latest
- 后臺模式啟動容器:
docker run -d -p 8080:8080 -v /usr/local:/var/jenkins_home --name jenkins jenkins:latest
- 查看容器日志:
docker logs [containerId]
- 連接到docker容器終端上:
docker attach [containerId]
- 查看容器或鏡像詳細信息:
docker inspect [containerId/imageId]
- 在容器上執行命令:
docker exec [containerId] COMMAND [ARG...]
- 查詢docker版本:
4. Dockerfile
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像。它們簡化了從頭到尾的流程并極大的簡化了部署工作。Dockerfile從FROM命令開始,緊接著跟隨者各種方法,命令和參數。其產出為一個新的可以用于創建容器的鏡像
5. 容器編排
DockerCompse
Compose是用于定義和運行復雜Docker應用的工具。你可以在一個文件中定義一個多容器的應用,然后使用一條命令來啟動你的應用,然后所有相關的操作都會被自動完成。
DockerSwarm
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干臺Docker主機抽象為一個整體,并且通過一個入口統一管理這些Docker主機上的各種Docker資源。Swarm和Kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些。
Kubernetes
Kubernetes(通常寫成“k8s”)是最開始由google設計開發最后貢獻給Cloud Native Computing Foundation的開源容器集群管理項目。它的設計目標是在主機集群之間提供一個能夠自動化部署、可拓展、應用容器可運營的平臺。Kubernetes通常結合docker容器工具工作,并且整合多個運行著docker容器的主機集群。