歷史
- 2010 年幾個人基於PAAS平台創建的dotCloud。隨着雲的應用,大公司比如谷歌、微軟都涉足。所以dotCloud生死攸關。既無盈利又可惜自己的汗水付諸東流,所以他們選擇了開源。開源后就開始了逆襲之路。
- 2014年6月,第一個版本Docker1.0誕生。
- 目前社區版1.29。
概念
- 最開始docker官網(https://www.docker.com/), 最醒目的三個單詞即是:build、ship、run
- docker含義: docker衍生於虛擬機,所以,不管是虛擬機還是容器,其實都是對計算機資源隔離的不同實現罷了。包括對文件系統隔離、對網絡隔離。docker基於Ubuntu開發,本身技術不是什么新東西,但它制定的隔離使用標准,成功將服務與系統,服務與硬件進行隔離。
- docker架構:docker client + docker daemon + docker repository, 客戶端做構建鏡像,拉取鏡像的指令發出, 宿主機的進程運行容器,倉庫和maven倉庫的概念類似,主要存放已經構建OK的鏡像。
- 鏡像:鏡像這個詞也不是新鮮東西,我們最早接觸這個詞應該是安裝操作系統的時候,系統盤里的.iso文件就是一個系統鏡像。鏡像其實就是打包好的一個可以運行的程序,和我們windows里面的zip文件類似。要用哪個鏡像,直接就從docker的官方倉庫(https://hub.docker.com/)去拉取即可。
- 倉庫:存放鏡像。國內也有很多倉庫,阿里的、網易的。
- 容器:運行的鏡像即是一個容器。這里聯想上面的三個詞:build即是構建鏡像。ship即是運輸鏡像。run即是運行鏡像成容器。
- 宿主機:即運行docker的主機。
- 隔離:類似虛擬機,docker里面有自己的文件系統,也有隔離的網絡,所以宿主機的網絡端口0~65535 和docker里面的0~65535是可以獨立存在的。
原理
docker本質是運行的進程,和宿主機共享linux內核。那如何做到真正的隔離呢?其實是通過linux的namespace技術,對網絡、磁盤、內存的做到細粒度隔離。實際上docker是一個運行在宿主機的進程,和宿主機本身的進程處於平級關系,也都是相互競爭cpu、內存等資源。譬如宿主機PID為333的進程為docker實例,而docker通過namespace技術把docker實例和宿主機分隔開。 但docker又是通過什么做到每個docker實例之間的資源競爭不受影響呢?這就是google公司開源出來的cgroup技術。cgroup作用一句話即是:限制進程對系統資源的使用,不管是空間還是時間上的。
基本使用
配置源
用阿里雲的吧,快。在/etc/yum.repos.d/目錄下,創建docker.repo的文件:
[docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-source] name=Docker CE Stable - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge] name=Docker CE Edge - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-debuginfo] name=Docker CE Edge - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-source] name=Docker CE Edge - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test] name=Docker CE Test - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-debuginfo] name=Docker CE Test - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-source] name=Docker CE Test - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly] name=Docker CE Nightly - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-debuginfo] name=Docker CE Nightly - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-source] name=Docker CE Nightly - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
更新一下源:
yum -y update
安裝
docker的linux安裝非常簡單,一條命令即可。但內核要求3.10以上。
查看可用包列表:
yum list docker-ce --showduplicates | sort -r
安裝:
sudo yum install docker-ce-18.03.1.ce-1.el7.centos
- 加入開機啟動
systemctl start docker
systemctl enable docker
- 查看鏡像
docker images [options] [REPOSITORY[:TAG]]
- 拉取鏡像
docker pull [options] NAME[:TAG]
- 運行鏡像
docker run [options] IMAGE[:TAG] [COMMAND] [ARG..]
命令這玩意兒死記硬背沒用,多用就知道了。一定記住多用--help, 例 docker run --help。
網絡模式
- 橋接,默認
- host模式,和宿主機公用。
- none模式。
- container模式。
- 自定義模式。
springboot部署到docker
-
在本地的虛擬機創建一個構建的目錄,並把jar包傳上來。
2. Dockerfile文件編輯
Dockerfile的元素解釋,盜圖一張,請閱;
3. 構建build
命令: docker build -t liaoday-gis .
用docker images 查看:
4. 運行
命令: docker run -d -p 8888:8888 d0ebf323acfb
用docker run --help ,這里描述:
-d, --detach Run container in background and print container ID,即-d后台運行。
-p, --publish list Publish a container's port(s) to the host ,即后面容器的端口,映射前面宿主機的端口。
-P, --publish-all Publish all exposed ports to random ports, 即大P暴露容器的隨機端口給宿主機。
用docker ps 查看運行的容器:
5. 成功訪問
命令
##守護進程重啟 sudo systemctl daemon-reload ##重啟docker服務 sudo systemctl restart docker ## 關閉docker sudo systemctl stop docker ## 重啟docker服務 sudo service docker restart ## 關閉docker sudo service docker stop
參考
https://www.cnblogs.com/kaye/p/10508800.html