摘要:如無論哪個(gè)服務(wù)器,下載的文件內(nèi)容是一樣的。如果需要啟動(dòng),通過命令執(zhí)行完后,再打開文件,可以看到的了。
docker的官網(wǎng):https://www.docker.com/
官方文檔:https://docs.docker.com/
github: https://github.com/docker/lab...
Docker類似虛擬機(jī),是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上。
Docker分兩個(gè)版本,CE(Community Edition)和EE(Enterprise Edition)。CE版本是免費(fèi)的,如果我們學(xué)習(xí)或者一般應(yīng)用,CE足夠。EE版本在安全性上有很大提升,是收費(fèi)版本,可以試用一定時(shí)間。
Docker容器和虛擬機(jī)的主要區(qū)別在于,虛擬機(jī)管理程序?qū)φ麄€(gè)設(shè)備進(jìn)行抽象處理,而容器只是對(duì)操作系統(tǒng)內(nèi)核進(jìn)行抽象處理。相對(duì)于虛擬機(jī),容器可以“丟棄沒有用的99.9%的虛擬機(jī)垃圾,剩下一個(gè)小巧簡潔的膠囊式容器,里面含有你的應(yīng)用程序”。
主要概念5個(gè)概念:
鏡像(Docker Image)
可以看成是Java中的類。鏡像可以用來創(chuàng)建Docker容器。可以通過命令“dock images”查看本地的所有鏡像。
容器(Docker Container)
Image的一個(gè)運(yùn)行實(shí)例就是一個(gè)Container,可以看成是Java中的對(duì)象,通過類實(shí)例化而來。一個(gè)Image可以有多個(gè)Container,每個(gè)Container都是相互隔離的。可以通過命令“docker ps”查看正在運(yùn)行的Container(或者通過docker ps -a查看所有Container)。
倉庫(Docker Repository/Registry)
同maven倉庫,它用來存放第三方庫。Docker的倉庫用來存放鏡像,且也可分為公開倉庫和私有倉庫,比如公開倉庫:https://hub.docker.com/ https://store.docker.com/。
Docker客戶端(Docker client)
命令行工具,用于與Docker后臺(tái)交互。
Docker后臺(tái)(Docker daemon)
宿主機(jī)上運(yùn)行的Docker后臺(tái)服務(wù),管理容器的構(gòu)建、運(yùn)行、分發(fā)等。
這里以Docker CE版本和CentOS7(虛擬機(jī))系統(tǒng)為例,簡單介紹Docker。
安裝安裝方式有3種,1)在線安裝;2)下載安裝包手動(dòng)安裝;3)通過官方提供的自動(dòng)腳本安裝。
下載安裝包手動(dòng)安裝比較簡單,適合上不了網(wǎng)的機(jī)器。自動(dòng)腳本安裝不推薦,這里舉例在線安裝。
# 首先卸載舊的版本(如果有的話)
$ sudo yum remove docker docker-common docker-selinux docker-engine
如果沒有,則會(huì)提示如下:
No Match for argument: docker No Match for argument: docker-common No Match for argument: docker-selinux No Match for argument: docker-engine No Packages marked for removal
# 安裝依賴的包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 設(shè)置Docker的repository。后續(xù)通過該repository安裝和更新
$ sudo yum-config-manager --add-repo https://download.docker.com/l...
Loaded plugins: fastestmirror, langpacks adding repo from: https://download.docker.com/linux/centos/docker-ce.repo grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo
*注:如果國內(nèi)服務(wù)器,可以將https://download.docker.com/linux/ 替換為 https://mirrors.aliyun.com/docker-ce/linux/。如:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
無論哪個(gè)服務(wù)器,下載的docker-ce.repo文件內(nèi)容是一樣的。*
生成了/etc/yum.repos.d/docker-ce.repo文件,可以查看里面的內(nèi)容,默認(rèn)只有[docker-ce-stable]是啟用的,即enabled=1,其他如docker-ce-edge、docker-ce-test等都是禁用的。
如果需要啟動(dòng)docker-ce-edge,通過命令:
$ sudo yum-config-manager --enable docker-ce-edge
執(zhí)行完后,再打開/etc/yum.repos.d/docker-ce.repo文件,可以看到docker-ce-edge的enabled=1了。
如果要禁用,通過命令:
$ sudo yum-config-manager --disable docker-ce-edge
# 安裝最新版的Docker CE(或指定版本)
$ sudo yum install docker-ce
如果在生產(chǎn)環(huán)境,往往不是安裝最新版本,而是安裝指定版本,那么可以先通過如下命令查看版本:
$ yum list docker-ce --showduplicates|sort -r
然后取上面輸出內(nèi)容中標(biāo)紅的部分,即:$ sudo yum install docker-ce-17.12.0.ce
# 啟動(dòng)Docker。啟動(dòng)好后,客戶端命令就和該docker daemon交互了
$ sudo systemctl start docker
# 檢查docker是否已正確安裝
$ sudo docker run hello-world
該命令會(huì)下載一個(gè)test鏡像,并在容器中運(yùn)行。輸出如下,表示已正確安裝:
Unable to find image "hello-world:latest" locally ... Hello from Docker! This message shows that your installation appears to be working correctly. ...
# 查看Docker版本
$ docker -v
Docker version 17.12.0-ce, build c97c6d6
# 配置docker用戶
【linux下除非必要,否則別用root】如果不是root用戶,運(yùn)行docker命令需要sudo。可以增加docker用戶至docker組。命令:
# 創(chuàng)建用戶組docker(如果已經(jīng)創(chuàng)建了,則不用再創(chuàng)建)
$ sudo groupadd docker
# 用戶$USER替換成真實(shí)用戶,添加用戶至docker組
$ sudo usermod -aG docker $USER
然后退出重新登錄(可能需要重啟)。
# 使用國內(nèi)的鏡像加速
$ sudo docker pull registry.docker-cn.com/library/redis:latest
下載latest版本。
或者按下列步驟(注:daemon.json不存在的話,則新建。該文件用來存放docker命令行選項(xiàng),key-value形式):
# 1 這一步可以不要,如果/etc/docker已存在 sudo mkdir -p /etc/docker # 2 這一步將registry-mirrors內(nèi)容寫入到daemon.json。如果daemon.json不存在則創(chuàng)建。(我的默認(rèn)沒有這個(gè)文件) sudo tee /etc/docker/daemon.json <<-"EOF" { "registry-mirrors": ["https://registry.docker-cn.com"] } EOF # 3 重新載入systemd,掃描新的或有變動(dòng)的單元 sudo systemctl daemon-reload # 4 重啟docker sudo systemctl restart docker
推薦用這種方式。做了一下測試,在daemon.json中把地址改為國外registry.docker.com,速度明顯慢很多。
至此,docker已在CentOS7上安裝完成。
簡單使用注:Docker分客戶端和服務(wù)端,即C/S模式,上面步驟安裝完后,本機(jī)就有了Docker Client和Docker Daemon。我們輸入的docker命令,都是通過客戶端與Docker Daemon交互的。
# 下載一個(gè)鏡像alpine(輕量級(jí)的Linux發(fā)行版)
$ docker pull alpine
可以通過search命令查詢有哪些鏡像,比如:$ docker search alpine
# 下載完之后,查看本地已有的鏡像
$ docker images
注:可以通過 docker rmi 鏡像名或鏡像ID 刪除鏡像。如果鏡像被容器使用了,則會(huì)提示無法刪除。需要先停止并刪除容器。如果沒有容器使用,也刪除不了,比如報(bào)錯(cuò):
Error response from daemon: conflict: unable to delete 6c6084ed97e5 (cannot be forced) - image has dependent child images
可以試試用 名稱:TAG,如:
$ docker rmi alpine:3.5
# 根據(jù)鏡像創(chuàng)建一個(gè)鏡像的運(yùn)行實(shí)例,即容器
$ docker run alpine ls -l
這里是運(yùn)行alpine鏡像的一個(gè)容器,并執(zhí)行l(wèi)s -l命令
# 進(jìn)入容器內(nèi)的交互模式。可通過exit命令退出
$ docker run -it alpine /bin/sh
進(jìn)入交互模式后,就可以在該Container中運(yùn)行一些命令了。
# 查看容器
# 查看當(dāng)前正運(yùn)行的容器
$ docker ps
# 查看所有容器(包含未運(yùn)行的)
$ docker ps -a
到這里,簡單使用介紹完畢。接下來,部署一個(gè)web服務(wù)。
運(yùn)行一個(gè)web服務(wù)目前為止,還沒看到一個(gè)網(wǎng)站的例子,下面介紹。步驟如下:
注:這里仍然直接用公開庫的例子static-site
# 下載鏡像
$ docker run -d dockersamples/static-site
# 啟動(dòng)該鏡像的一個(gè)容器
$ docker run --name static-site -e AUTHOR="Your Name" -d -P dockersamples/static-site
# 查看該容器服務(wù)的訪問端口
$ docker port static-site
# 打開瀏覽器,訪問服務(wù)
上圖中,可以看出80端口映射的是32773端口。隨意瀏覽器中輸入地址:http://192.168.0.12:32773(IP替換成你的實(shí)際IP),顯示如下:
# 停止和刪除容器
$ docker stop static-site
$ docker rm static-site
至此,我們訪問了一個(gè)部署在Docker容器中的簡單服務(wù)了。
部署一個(gè)Java web應(yīng)用如果我們的應(yīng)用采用的是微服務(wù)架構(gòu),那么可以將各個(gè)微服務(wù)通過Docker來部署,簡單又快捷。這里以一個(gè)Java Web應(yīng)用部署為例說明。
# 下載一個(gè)Tomcat鏡像
$ docker pull tomcat
默認(rèn)下載最新版的Tomcat
# 啟動(dòng)tomcat鏡像的一個(gè)實(shí)例容器
$ docker run -p 5000:8080 --name tomcat-container1 tomcat
這里的-p 5000:8080表示將容器內(nèi)的8080端口映射到宿主機(jī)的5000端口上,通過5000來訪問該tomcat服務(wù)。啟動(dòng)完成后,會(huì)在當(dāng)前控制臺(tái)輸出日志。會(huì)看到:
org.apache.catalina.startup.Catalina.start Server startup in 1365 ms
表示啟動(dòng)成功。
# 瀏覽器中輸入地址
比如我這里:http://192.168.0.12:5000,會(huì)顯示熟悉的Tomcat界面。
# 新開一個(gè)控制臺(tái),進(jìn)入container中,準(zhǔn)備部署war包
$ docker exec -it tomcat-container1 /bin/sh
進(jìn)入之后,就可以查看tomcat的目錄了。
注意這里是docker exec,不是docker run。docker run是啟動(dòng)新的容器。
# 將war包放在宿主機(jī)某個(gè)位置,然后拷貝到容器中
$ docker cp /var/ftp/pub/TestWebApp.war tomcat-container1:/usr/local/tomcat/webapps
表示將宿主機(jī)上/var/ftp/pub/TestWebApp.war拷貝到容器中的/usr/local/tomcat/webapps下。
要查看容器中的具體位置,可以在進(jìn)入容器后運(yùn)行pwd命令查看,比如我這里為/usr/local/tomcat
注意,docker用戶需要有war包的讀取權(quán)限,否則拷貝時(shí)會(huì)報(bào)錯(cuò):
ERRO[0000] Can"t add file /var/ftp/pub/TestWebApp.war to tar: open /var/ftp/pub/TestWebApp.war: permission denied ERRO[0000] Can"t close tar writer: archive/tar: missed writing 869 bytes Error response from daemon: Error processing tar file(exit status 1): unexpected EOF
war包放到webapp下后,會(huì)自動(dòng)加載,通過瀏覽器訪問即可。如:http://192.168.0.12:5000/TestWebApp/
一個(gè)簡單的war包就部署好了。
如果我們的web應(yīng)用采用了mysql, redis等,那么分別把相應(yīng)的鏡像下載下來,然后配置映射端口,并啟動(dòng)。我們通過宿主機(jī)的IP加端口,就可以訪問各個(gè)服務(wù)了。不建議把所有服務(wù)放到一個(gè)容器里面,升級(jí)、維護(hù)都不方便。
我們知道,一個(gè)鏡像可以啟動(dòng)多個(gè)容器,容器間互不干擾。所以,在上面tomcat例子中,我們可以再啟動(dòng)一個(gè)實(shí)例容器,名稱為tomcat-container2,端口號(hào)映射到宿主機(jī)的5002端口:
$ docker run -p 5002:8080 --name tomcat-container2 tomcat
啟動(dòng)成功后,再開一個(gè)終端,進(jìn)入tomcat-container2容器:
$ docker exec -it tomcat-container2 /bin/sh
進(jìn)入容器后,cd到webapps目錄,發(fā)現(xiàn)并沒有剛才上傳的TestWebApp.war,這也說明,兩個(gè)容器是相互獨(dú)立的。
# 鏡像備份和恢復(fù)
# 打包鏡像為tomcat.tar,保存在當(dāng)前目錄
$ docker save -o tomcat.tar tomcat
# 將tar包拷貝到另一臺(tái)機(jī)器上(也安裝了Docker),然后執(zhí)行加載tar包命令
$ docker load -i tomcat.tar
# 可以通過docker images查看新加載進(jìn)來的tomcat鏡像,然后創(chuàng)建該鏡像示例(容器)即可
$ docker run -it tomcat /bin/sh
# 容器備份和恢復(fù)
容器備份比鏡像備份多了幾個(gè)步驟。
# 查看需要備份的容器
$ docker ps -a
# 創(chuàng)建該容器的快照
$ docker commit -p 3f14281c89b5 tomcat-container1-backup
# 查看新的容器快照的鏡像
$ docker images
接下來,步驟同上面的鏡像備份和恢復(fù)。
# 將鏡像打包成tar包
$ docker save -o tomcat-container1-backup.tar tomcat-container1-backup
# 將tar包拷貝到另一臺(tái)機(jī)器上(也安裝了Docker),然后執(zhí)行加載tar包命令
$ docker load -i tomcat-container1-backup.tar
# 可以通過docker images查看新加載進(jìn)來的tomcat鏡像,然后運(yùn)行該鏡像容器,進(jìn)入交互模式。注意這里并沒有啟動(dòng)tomcat服務(wù)
$ docker run -it tomcat-container1-backup /bin/sh
進(jìn)入到webapps目錄,可以看到,之前放在容器中的TestWebApp.war也在。
# 再啟動(dòng)一個(gè)新的容器,映射端口5000,來訪問一下tomcat
$ docker run -it -p 5000:8080 tomcat-container1-backup
# 通過瀏覽器訪問
我這里的地址為: http://192.168.0.13:5000/TestWebApp/
這里舉例Ubuntu容器安裝wget工具。我們先把所有的容器停止和刪除,當(dāng)然也可以一個(gè)一個(gè)刪:
$ docker stop docker ps -a -q
$ docker rm docker ps -a -q
# 首先獲取一個(gè)ubuntu的docker鏡像。如果已有,則略過
$ docker pull ubuntu
# 啟動(dòng)ubuntu實(shí)例容器,并進(jìn)入容器
$ docker run -it ubuntu
# 輸入wget,會(huì)報(bào)命令未找到。
# 輸入apt-get install wget安裝命令,報(bào)錯(cuò)E: Unable to locate package wget
出現(xiàn)如上錯(cuò)誤,需要先執(zhí)行apt-get update,然后再apt-get install wget
# wget安裝好之后,可以執(zhí)行如下命令
# wget https://segmentfault.com/
會(huì)現(xiàn)在index.html文件至當(dāng)前目錄,通過cat可查看文件內(nèi)容。(未安裝vi)
wget安裝完成。
總結(jié)$ docker run -it tomcat-container1-backup /bin/sh
這個(gè)命令是啟動(dòng)容器,并進(jìn)入交互模式。退出交互模式后,該容器自動(dòng)停止。
$ docker run -it tomcat-container1-backup
這個(gè)命令是直接啟動(dòng)tomcat容器,Ctrl+c退出
$ docker start inspiring_clarke
啟動(dòng)已有的容器,容器名稱為inspiring_clarke
$ docker rename jovial_wright test1
容器重命名為test1,創(chuàng)建容器時(shí)如果不指定名稱,會(huì)自動(dòng)生成名稱,比如這里的jovial_wright
$ docker stop nostalgic_bardeen
停止正在運(yùn)行的容器,容器名稱nostalgic_bardeen
$ docker rm inspiring_clarke
刪除容器,容器名稱inspiring_clarke
$ docker rmi e8301a85400c
刪除鏡像,鏡像ID為e8301a85400c
$ docker images
查看本地所有鏡像
$ docker ps
查看正在運(yùn)行的容器
$ docker ps -a
查看所有創(chuàng)建的容器
到這里,對(duì)Docker應(yīng)該有一個(gè)大致了解了。要更深入掌握,比如自己制作鏡像等,請(qǐng)參考網(wǎng)上其他資料。
不錯(cuò)的資料參考:
https://blog.lab99.org/post/d...
http://www.zdnet.com/article/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/27198.html
摘要:一核心組件客戶端和服務(wù)端鏡像容器二關(guān)鍵概念以鏡像為基礎(chǔ),在鏡像的基礎(chǔ)上創(chuàng)建運(yùn)行容器,可以簡單的理解為容器是鏡像運(yùn)行時(shí)的表現(xiàn)。 一、docker核心組件 docker客戶端和服務(wù)端 docker鏡像 registry docker容器 二、關(guān)鍵概念 docker以鏡像為基礎(chǔ),在鏡像的基礎(chǔ)上創(chuàng)建、運(yùn)行容器,可以簡單的理解為容器是鏡像運(yùn)行時(shí)的表現(xiàn)。 三、docker基本命令 容器相關(guān) 1、d...
摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會(huì)繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...
閱讀 3104·2021-08-03 14:05
閱讀 2147·2019-08-29 15:35
閱讀 685·2019-08-29 13:30
閱讀 3173·2019-08-29 13:20
閱讀 2537·2019-08-23 18:15
閱讀 1804·2019-08-23 14:57
閱讀 2222·2019-08-23 13:57
閱讀 1318·2019-08-23 12:10