⑴ docker是干什麼的
docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。簡言之,就是可以在Linux上鏡像使用的這么一個容器。
一個完整的Docker有以下幾個部分組成:DockerClient客戶端、Docker Daemon守護進程、Docker Image鏡像、DockerContainer容器
(1)dockerweb應用擴展閱讀:
docker的好處:
1、簡單易操作,簡化了以往復雜的應用程序安裝步驟,使用docker會變得非常簡便。
2、可兼容多種應用,Web 應用、後台應用、資料庫應用、大數據應用比如 Hadoop 集群、消息隊列等等都可以打包成鏡像部署。
3、省錢 docker結合雲可以做到高性能低價格。
⑵ Docker是什麼
Docker是世界領先的軟體容器平台。Docker使用Google公司推出的Go語言進行開發實現,基於Linux內核的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。 由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器,但docker本身並不是容器,它是創建容器的工具,是應用容器引擎。
Docke最初實現是基於LXC。LXC為Linux Container的簡寫。可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。相當於C++中的NameSpace。容器有效地將由單個操作系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。
docker並不是LXC替代品,docker底層使用了LXC來實現,LXC將linux進程沙盒化,使得進程之間相互隔離,並且能夠課哦內閣制各進程的資源分配。在LXC的基礎之上,docker提供了一系列更強大的功能。
Docker能夠自動執行重復性任務,例如搭建和配置開發環境,從而解放了開發人員以便他們專注在真正重要的事情上:構建傑出的軟體。
用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。
docker的三個概念:
鏡像(Image):類似於虛擬機中的鏡像,是一個包含有文件系統的面向Docker引擎的只讀模板。任何應用程序運行都需要環境,而鏡像就是用來提供這種運行環境的。例如一個Ubuntu鏡像就是一個包含Ubuntu操作系統環境的模板,同理在該鏡像上裝上Apache軟體,就可以稱為Apache鏡像。
容器(Container):類似於一個輕量級的沙盒,可以將其看作一個極簡的Linux系統環境(包括root許可權、進程空間、用戶空間和網路空間等),以及運行在其中的應用程序。Docker引擎利用容器來運行、隔離各個應用。容器是鏡像創建的應用實例,可以創建、啟動、停止、刪除容器,各個容器之間是是相互隔離的,互不影響。注意:鏡像本身是只讀的,容器從鏡像啟動時,Docker在鏡像的上層創建一個可寫層,鏡像本身不變。
倉庫(Repository):類似於代碼倉庫,這里是鏡像倉庫,是Docker用來集中存放鏡像文件的地方。注意與注冊伺服器(Registry)的區別:注冊伺服器是存放倉庫的地方,一般會有多個倉庫;而倉庫是存放鏡像的地方,一般每個倉庫存放一類鏡像,每個鏡像利用tag進行區分,比如Ubuntu倉庫存放有多個版本(12.04、14.04等)的Ubuntu鏡像。
docker的用途:
官方給的是bulid ship run,就是編譯、裝載、運行。就是實現了應用的封裝、部署、運行的生命周期管理只要在glibc的環境下,都可以運行。
諧雲自主研發的容器雲平台,是基於Docker和Kubernetes技術構建的一套完整IT標准化和自動化框架,以「面向終態、優化IT資源」為目標的新一代PaaS平台,能夠提高企業的IT管理能力,在降低運營成本和風險的同時,獲得更高的運維效率,保障業務穩定運行和高效迭代。
⑶ docker有個啥用啊
Docker是一個基於輕量級虛擬化技術的容器,整個項目基於Go語言開發,並採用了Apache 2.0協議。Docker可以將我們的應用程序打包封裝到一個容器中,該容器包含了應用程序的代碼、運行環境、依賴庫、配置文件等必需的資源,通過容器就可以實現方便快速並且與平台解耦的自動化部署方式,無論你部署時的環境如何,容器中的應用程序都會運行在同一種環境下。
舉個栗子,小明寫了一個CMS系統,該系統的技術棧非常廣,需要依賴於各種開源庫和中間件。如果按照純手動的部署方式,小明需要安裝各種開源軟體,還需要寫好每個開源軟體的配置文件。如果只是部署一次,這點時間開銷還是可以接受的,但如果小明每隔幾天就需要換個伺服器去部署他的程序,那麼這些繁瑣的重復工作無疑是會令人發狂的。這時候,Docker的用處就派上場了,小明只需要根據應用程序的部署步驟編寫一份dockerfile文件(將安裝、配置等操作交由Docker自動化處理),然後構建並發布他的鏡像,這樣,不管在什麼機器上,小明都只需要拉取他需要的鏡像,然後就可以直接部署運行了,這正是Docker的魅力所在。
那麼鏡像又是什麼呢?鏡像是Docker中的一個重要概念:
Image(鏡像):它類似於虛擬機中使用到的鏡像,由於任何應用程序都需要有它自己的運行環境,Image就是用來提供所需運行環境的一個模板。
Container(容器):Container是Docker提供的一個抽象層,它就像一個輕量級的沙盒,其中包含了一個極簡的Linux系統環境與運行在其中的應用程序。Container是Image的運行實例(Image本身是只讀的,Container啟動時,Docker會在Image的上層創建一個可寫層,任何在Container中的修改都不會影響到Image,如果想要在Image保存Container中的修改,Docker採用了基於Container生成新的Image層的策略),Docker引擎利用Container來操作並隔離每個應用(也就是說,每個容器中的應用都是互相獨立的)。
其實從Docker與Container的英文單詞原意中就可以體會出Docker的思想。Container可以釋義為集裝箱,集裝箱是一個可以便於機械設備裝卸的封裝貨物的通用標准規格,它的發明簡化了物流運輸的機械化過程,使其建立起了一套標准化的物流運輸體系。而Docker的意思為碼頭工人,可以認為,Docker就像是在碼頭上辛勤工作的工人,把應用打包成一個個具有某種標准化規格的"集裝箱"(其實這里指出的集裝箱對應的是Image,在Docker中Container更像是一個運行中的沙盒),當貨物運輸到目的地後,碼頭工人們(Docker)就可以把集裝箱拆開取出其中的貨物(基於Image來創建Container並運行)。這種標准化與隔離性可以很方便地組合使用多個Image來構建你的應用環境(Docker也提倡每個Image都遵循單一職責原則,也就是只做好一件事),或者與其他人共享你的Image
⑷ docker在web開發中得使用流程是怎樣的
docker在web開發中得使用流程概述:
1、創建java鏡像:
把所有的文件都放置在docker目錄下,分別為不同的功能創建不同的目錄。
$ sudo mkdir docker/java
$ sudo cd docker/java
接下來在該目錄下創建一個jdk的Dockerfile文件,具體內容如下:
# openjdk 6
# version 1.0
FROM ubuntu:14.04
MAINTAINER mhy "[email protected]"
RUN apt-get update
RUN apt-get install -y -q openjdk-7-jdk
WORKDIR /
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
CMD ["/bin/bash"]
創建完Dockerfile之後來生成一個jdk的鏡像
$ sudo docker build -t pobaby/java .
以上已經實現了一個簡單的基於Docker容器運行的Java Web程序。
⑸ dockerfile怎麼跑基於jsp的web應用
直接放到Webapps目錄下就可以了,步驟如下:Tomcat的Webapps目錄是Tomcat默認的應用目錄,務器啟動時,會載入所有這個目錄 下的應用。 也可以將JSP程序打包成一個war包放在目錄下,伺服器會自動解開這個war包
⑹ docker專項(六)利用docker Api提供web操作docker服務
在自動化部署的過程中,我們如果一直人為的輸入docker命令效率不高而且不好管理。那麼,我們可以使用docker提供的api來操作docker。
我們加入
docker對外的api就出來了
我們可以直接以web形式訪問
但是很明顯這樣子是不安全的,因為沒有許可權認證機制,我們可以通過常用的web框架間接操作docker
舉個例子
我們用goframe寫一個操作docker api的web服務
路由
goframe 控制器
操作docker服務類
跑起這個服務
訪問地址
⑺ 如何使用docker部署web應用
步驟一 - 創建Dockerfile
如下的Dockerfile可以滿足以上的要求:
**FROM** golang:1.6
*# Install beego and the bee dev tool*
**RUN** go get github.com/astaxie/beego && go get github.com/beego/bee
*# Expose the application on port 8080*
**EXPOSE** 8080
*# Set the entry point of the container to the bee command that runs the*
*# application and watches for changes*
**CMD** ["bee", "run"]
第一行,
FROM golang:1.6
將Go的官方映像文件作為基礎映像。該映像文件預安裝了 Go 1.6 . 該映像已經把 $GOPATH 的值設置到了 /go 。所有安裝在 /go/src 中的包將能夠被go命令訪問。
第二行,
RUN go get github.com/astaxie/beego && go get github.com/beego/bee
安裝 beego 包和 bee 工具。 beego 包將在應用程序中使用。 bee 工具用語在開發中再現地重新載入咱們的代碼。
第三行,
EXPOSE 8080
在開發主機上利用容器為應用程序開放8080埠。
最後一行,
CMD ["bee", "run"]
使用bee命令啟動應用程序的在線重新載入。
步驟二 - 構建image
一旦創建了Docker file,運行如下的命令來創建image:
docker build -t ma-image .
執行以上的命令將創建名為ma-image的image。該image現在可以用於使用該應用程序的任何人。這將確保這個團隊能夠使用一個統一的開發環境。
為了查看自己的系統上的image列表,運行如下的命令:
docker images
這行該命令將輸出與以下類似的內容:
REPOSITORY TAG IMAGE ID CREATED SIZE
ma-image latest 8d53aa0dd0cb 31 seconds ago 784.7 MB
golang 1.6 22a6ecf1f7cc 5 days ago 743.9 MB
注意image的確切名字和編號可能不同,但是,應該至少看到列表中有 golang 和 ma-image image。
步驟三 - 運行容器
一旦 ma-image 已經完成,可以使用以下的命令啟動一個容器:
docker run -it --rm --name ma-instance -p 8080:8080 \
-v /app/MathApp:/go/src/MathApp -w /go/src/MathApp ma-image
讓咱們分析一下上面的命令來看看它做了什麼。
。docker run命令用於從一個image上啟動一個容器
。-it 標簽以交互的方式啟動容器
。--rm 標簽在容器關閉後將會將其清除
。--name ma-instance 將容器命名為ma-instance
。-p 8080:8080 標簽允許通過8080埠訪問該容器
。-v /app/MathApp:/go/src/MathApp更復雜一些。它將主機的/app/MathApp映射到容器中的/go/src/MathApp。這將使得開發文件在容器的內部和外部都可以訪問。
。ma-image 部分聲明了用於容器的image。
執行以上的命令將啟動Docker容器。該容器為自己的應用程序開發了8080埠。無論何時做了變更,它都將自動地重構自己的應用程序。自己將在console(控制台)上看到以下的輸出:
bee :1.4.1
beego :1.6.1
Go :go version go1.6 linux/amd64
2016/04/10 13:04:15 [INFO] Uses 'MathApp' as 'appname'
2016/04/10 13:04:15 [INFO] Initializing watcher...
2016/04/10 13:04:15 [TRAC] Directory(/go/src/MathApp)
2016/04/10 13:04:15 [INFO] Start building...
2016/04/10 13:04:18 [SUCC] Build was successful
2016/04/10 13:04:18 [INFO] Restarting MathApp ...
2016/04/10 13:04:18 [INFO] ./MathApp is running...
2016/04/10 13:04:18 [asm_amd64.s:1998][I] http server Running on :8080
⑻ Docker-可視化管理工具總結-推薦使用Portainer
對於初學docker的小白,一款好的可視化工具有助於快速掌握docker基本形態和概念,下面針對docker可視化工具做些總結
UI For Docker是一個使用Docker Remote API 的web介面,目的是提供一個簡潔純凈的客戶端實現,為了連接和管理Docker; 該工具目前已經無人維護,建議使用下面介紹的portainer
docker run -it -d --name docker-web --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock docker.io/uifd/ui-for-docker
https://www.portainer.io/installation/
是一款Docker可視化管理工具,可讓您輕松構建和管理 Docker、Docker Swarm、Kubernetes 和 Azure ACI 中的容器。
Portainer 將管理容器的復雜性隱藏在易於使用的 UI 後面。通過消除使用 CLI、編寫 YAML 或理解清單的需要,Portainer 使部署應用程序和解決問題變得如此簡單,任何人都可以做到
Portainer 由兩個元素組成:Portainer 伺服器和 Portainer 代理。兩者都在您現有的容器化基礎設施上作為輕量級容器運行。Portainer 代理應該部署到集群中的每個節點,並配置為向 Portainer 伺服器容器報告。
單個 Portainer 伺服器將接受來自任意數量的 Portainer 代理的連接,從而提供從一個集中式界面管理多個集群的能力。為此,Portainer Server 容器需要數據持久性。Portainer 代理是無狀態的,數據被傳送回 Portainer 伺服器容器。
運行下面兩條命令即可。這些命令會創建一個Portainer專用的卷,然後在8000和9000埠創建容器並運行。
如果使用Portainer管理本地Docker主機的話,需要綁定/var/run/docker.sock (這里是個知識點,涉及docker 之間通信的問題,以及docker 里運行docker )
docker run --name portainer --restart always -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
然後在瀏覽器打開對應地址,就會發現成功運行了。第一次運行的時候需要設置賬號,然後選擇要管理的Docker主機。
注意:portainer/portainer 是 Portainer v1.24.x 的鏡像名,現在已棄用;從 2022 年 1 月開始,Portainer 2.0 的所有新版本都將在 portainer/portainer-ce 中發布
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.1
docker run -d -p 9000:9000 --name portainer --restart always -v portainer_data:/data portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT>
ps:-H 後面的remote是你想用portainert管理的docker
只能在創建 Portainer Server 容器時添加本地環境。部署 Portainer 後,您無法添加本地環境
第一次登陸會讓選擇管理的容器環境,這里可以選擇本機 ,通過掛載/var/run/docker.sock 和docker 守護進程通信(如圖所示), 關於這部分知識後面會總結分享出來。
之後就可以看到本機上運行的Docker容器了,點擊它們還可以進行容器的管理。
左邊的條目可以管理卷、創建容器、查看主機信息等等。基本上該有的功能都有了
通過該方式,可以將遠程機器添加到Portainer服務端,統一管理遠程機器上的容器環境
將 Docker Standalone 主機連接到 Portainer 時,可以使用兩種方法。您可以通過 TCP 直接連接到 Docker API,也可以在 Docker Standalone 主機上安裝 Portainer 代理並通過代理連接。
https://docs.portainer.io/v/ce-2.11/admin/environments/add/docker
1) 通過遠程訪問TCP:2375埠綁定環境
2) 通過Portainer Agent方式管理docker環境
https://docs.portainer.io/v/ce-2.11/start/install/agent/docker/linux
使用Agent需要在要監控的主機上創建一個portainer agent容器
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:2.11.1
在k8s集群上執行以下命令
url -L https://downloads.portainer.io/portainer-agent-ce211-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml
在遠程k8s集群上部署agent後,在Portainer server 上通過nodeport 或者 targetport 進行服務配置,完成k8s集群的連接配置。
https://github.com/jesseffield/lazydocker
LazyDocker是基於終端的一個可視化查詢工具,支持鍵盤操作和滑鼠點擊。相比Portainer來說可能不那麼專業,不過對於開發者來說可能反而更加好用了。因為一般開發者都是使用命令行來運行Docker,偶爾需要圖形化查看的時候,就可以使用LazyDocker這個工具。
Lazydocker 的具體特性如下:
當然如果發現LazyDocker挺好用,准備經常使用的話,還可以把它做成縮寫添加到shell配置文件中,這樣就可以將它變成一個簡單的命令。例如我用的是zsh,就將下面這樣添加到.zshrc文件中。以後就可以直接用lzd來調用LazyDocker了。
echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/.config/lazydocker:/.config/jesseffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc
然後就可以在終端中查看Docker容器、鏡像和卷的信息了。LazyDocker支持鍵盤操作和滑鼠點擊,直接用滑鼠點擊就可以查看對應信息了
Docker Desktop 是 Docker 官方自帶的客戶端。 https://docs.docker.com/desktop/windows/ ; 如果是windows用戶,想在Windows系統上運行docker容器,可以使用;