Docker安裝與部署


===========轉載自:https://www.cnblogs.com/wuy401120html/p/10239634.html=============================

一、Docker概述:

Docker: 本意是碼頭工人,言外之意是集裝箱;

Java號稱“一次編譯,到處運行”,因為java虛擬機解決平台的兼容性問題,所以有java虛擬機的地方就能跑java代碼;

Docker是:“一次封裝,到處運行”,因為docker決絕了應用環境的問題,安裝了docker的平台就能跑“docker包”,這樣就決絕了“開發環境能跑,一上線就崩”的尷尬。

一句話 應用打包工具

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
一個完整的Docker有以下幾個部分組成:
DockerClient客戶端
Docker Daemon守護進程
Docker Image鏡像
DockerContainer容器 [2]

Docker 是一個基於Linux容器(LXC-linux container)的高級容器引擎,基於go語言開發,
源代碼托管在 Github 上, 遵從Apache2.0協議開源。Docker的目標是實現輕量級的操作系統虛擬化解決方案。

學習Docker首先要了解幾個概念:

鏡像—Docker的鏡像和常見的系統ISO鏡像類似,包含了應用程序的信息;

容器—容器相當於一個可以運行起來的虛擬機,應用程序運行在容器中,Docker運行在“Docker”上;

倉庫—倉庫是存放鏡像的地方,有類似git的版本控制,同樣分為公開倉庫(Public)和私有倉庫(Private)兩種形式;

Docker支持大部分的Linux發行版,通過使用Docker容器,就可以在不同的操作系統,

不同的機器上運行自己的應用,不用關心硬件、運行環境之類的配置,應用程序的遷移變得非常簡單。

二、Docker和傳統虛擬化技術的對比

相比傳統虛擬機技術,Docker資源占用少,啟動更快,很大的方便了項目的部署和運維。
Docker是在操作系統層面上實現虛擬化,復用本地主機的操作系統,傳統方式是在硬件的基礎上,虛擬出多個操作系統,然后在系統上部署相關的應用。

下面的這張圖片參考相關博文,很形象的說明了Docker和VM之類的傳統虛擬化技術的區別:

 vs

 

就像一個集裝箱一樣,不管需要運送服裝還是化工產品,還是汽車,只需要放在集裝箱里面,不管到那個船上,也不管到那個鐵路上,我直接機械化的搬運就行了。很簡單

三、真正的部署一下Dock的開發環境

首先要安裝VMware 虛擬機和 並下載Centos 操作系統,然后安裝上 Linux 環境,

此處如果不懂的話,可直接百度,

安裝完之后,我這邊不能上網,后來做了一下配置:

參考:VMware 虛擬機 不能上網 CentOS 6.5 Windows 7上面安裝了VMware,然后安裝了CentOS系統,安裝完了無法上網;

然后可以上網了,好了linux環境 准備好了,開始安裝了

(1)直接使用yum 安裝 docker:

首先肯定是要機器中安裝了docker,如果沒安裝就是用yum install -y docker 命令安裝一下 

yum install -y docker

 

既然是部署web應用,那么當然少不了Tomcat了,所以我們應該先拉取Tomcat鏡像。

命令如下,(開始的時候,我還跑到網上去下載tomcat,后來發現,根本不需要,直接用docker拉取就行了) 

1
docker pull tomcat

  

這個鏡像有點大,所以可以事先拉取好,節省時間。

接下來我們就用Tomcat鏡像來啟動一個容器 

1
docker run -it --name webdemo -p  80 : 8080  tomcat /bin/bash

  docker run -i -t <IMAGE_ID> /bin/bash:-i:標准輸入給容器 -t:分配一個虛擬終端 /bin/bash:執行bash腳本

這里我們啟動一個交互式的容器,名字是webdemo,-p 80:8080表示將容器的8080端口映射到主機的80端口,這樣我們只要訪問主機的80端口就可以訪問到容器的服務了。

這里寫圖片描述

容器創建好了之后是會進入容器里面的,這時我們剛好可以看看內部的文件結構。那里有個webapps文件,我們只要把我們的web應用程序保存成war包的格式,然后再復制到這個文件中就可以了。因為Tomcat會自動幫我們解壓並且部署war包。

如何將文件從主機復制到容器中?

因為我之前的終端在容器里面,這里我開啟第二個終端進行操作。我的war包文件我放在/mnt/的目錄下

這里寫圖片描述

從主機復制到容器 sudo docker cp host_path containerID:container_path

從容器復制到主機 sudo docker cp containerID:container_path host_path

將war包放入到docker下的tomcat中
首先你是需要把war包放入到centos系統中,本文中將一個test.war的項目放入centos系統的主目錄,這個通過ssh工具就可以放到centos中,大家應該都很熟悉。從centos中將test.war移動到docker下tomcat鏡像啟動的容器中。

docker cp test.war containerID:/usr/local/tomcat/webapps/

 

執行以下命令可進入容器內部:

docker exec -it tomcat001 /bin/bash

docker端口映射或啟動容器時報錯Error response from daemon: Container 7c5a2350c4cb2370d8aba94eef9cec4a6c2ac3207030

現象:

docker exec -it 7c5a2350c4cb /bin/bash
Error response from daemon: Container 7c5a2350c4cb2370d8aba94eef9cec4a6c2ac3207030961637072be82a4e9d64 is not running。

解決:

docker start 5ec54ba35b1e

我們這里用的命令是:

docker cp /mnt/webdemo.war a2f2091a661fa51e02c0be54f252fc46fc604932526b17038ccc267affcef12c:/usr/local/tomcat/webapps

 

其中那個長的字符串是容器的id,自己去查一下。 后面的路徑是容器的內部路徑,實在不懂可以復制過去,這里要注意:冒號后面沒有空格,我之前有空格,一直復制不過去。

接下來就是啟動Tomcat了。

war包已經導入容器中了,這個時候我們可以去第一個終端查看一下

這里寫圖片描述

可以看到war包已經導入了。但是這個時候Tomcat服務其實是沒有啟動的,下面我們就啟動Tomcat服務,讓Tomcat幫我們完成war包的解壓和部署。

這里寫圖片描述

這里我們進入bin目錄把目錄下的catalina.sh文件run起來,這樣Tomcat就跑起來了,而且Tomcat跑起來是在前端運行的,這也是我為什么打開第二個終端的原因。

最后我們可以在瀏覽器中查看效果:

這里寫圖片描述

 

我照着網上的應用去做,上面的都沒問題,成功了,不過后來把原來創建的容器ssh關閉了,然后又打開,

如何進入已經打開的容器呢,兩種方法

a:使用docker attach命令

docker attach db3 或者 docker attach d48b21a7e439
 
db3是后台容器的NAMES,d48b21a7e439是容器的進程ID  CONTAINER ID
然后就進去了這個容器的ssh界面。
但是它有一個缺點,只要這個連接終止,或者使用了exit命令,容器就會退出后台運行
 
 
b:使用docker exec命令
這個命令使用exit命令后,不會退出后台,一般使用這個命令,使用方法如下
 
docker exec -it db3 /bin/sh 或者 docker exec -it d48b21a7e439 /bin/sh

 

db3是后台容器的NAMES,d48b21a7e439是容器的進程ID  CONTAINER ID

 /bin/sh 是固定寫法
它也能進入這個容器
 
 

 

(1) 安裝 docker:

yum install -y docker

(2) 啟動 docker服務:

service docker start   //啟動docker service

如果想要關閉docker服務:

service docker stop

(3) 獲取鏡像:

sudo docker pull NAME[:TAG]
sudo docker pull centos:latest

 比如獲取tomcat 鏡像:

docker pull tomcat   //命令格式: docker pull NAME

(4) 羅列所有鏡像:

docker images

 (5)、刪除鏡像,從本地刪除一個已經下載的鏡像

sudo docker rmi IMAGE [IMAGE...]
sudo docker rmi centos:latest

 

(5)創建docker容器 並進入 webdemo1:

docker run -it --name webdemo1 -p 81:8080 tomcat /bin/bash

docker run -i -t <IMAGE_ID> /bin/bash:-i:標准輸入給容器 -t:分配一個虛擬終端 /bin/bash:執行bash腳本

注意:name前面是兩個-, 端口前面有-p, 后面有個tomcat;

這里我們啟動一個交互式的容器,名字是webdemo1,-p 81:8080表示將容器的8080端口映射到主機的81端口,這樣我們只要訪問主機的81端口就可以訪問到容器的服務了。如果還想創建其他的容器,那么名稱 要改,而且不能再掛載到主機的81上了,可以82上掛載;

(6)啟動一個停止的容器:

docker start webdemo

(7) 羅列所有的docker容器:包含了啟動的Docker和沒有啟動的容器Docker

docker ps -a;

(8) 啟動容器:

docker start webdemo

可能端口會被占用,我們可以先把運行的docker實例停掉,然后再刪掉,

docker kill webdemo

docker rm webdemo

 

(9) 進入其中一個容器:使用docker exec命令

這個命令使用exit命令后,不會退出后台,一般使用這個命令,使用方法如下
docker exec -it webdemo /bin/bash

(10)拷貝文件

從主機復制到容器 sudo docker cp host_path containerID:container_path

從容器復制到主機 sudo docker cp containerID:container_path host_path

請注意,以上這兩個命令都是在主機中執行的,不能再容器中執行

docker cp /root/software/docker.war webdemo:/
docker cp demo:/abc.txt  /root/software/

(10) 在容器中啟動tomcat:  

cd /usr/local/tomcat/bin
./catalina.sh run

(11)記住一個服務器可以有多個容器,但是一個服務器只需要安裝一個tomcat,然后每個容器可以掛載到不同的tomcat的端口上面,就是這關系。前台訪問:

http://192.168.163.128:80/docker  //這是第一個容器webdemo

http://192.168.163.128:81/docker; //這是第二個容器webdemo1

 

Docker的優點:

 Docker五大優勢:持續集成、版本控制、可移植性、隔離性和安全性

【編者的話】 隨着Docker技術的不斷成熟,越來越多的企業開始考慮使用Docker。Docker有很多的優勢,本文主要講述了Docker的五個最重要優勢,即持續集成、版本控制、可移植性、隔離性和安全性。

對於Docker,應該不需要進行詳細的介紹了。它是最火熱的開源項目之一,通過在容器中增加一個抽象層(a layer of abstraction),就可以將應用程序部署到容器中。在看似穩定而成熟的場景下,使用Docker的好處越來越多。在這篇文章中,我不談論Docker是什么或者Docker是怎么工作的,取而代之,我會提出使用這個不斷成長的平台的五大好處。

持續部署與測試

Docker在開發與運維的世界中具有極大的吸引力,因為它能保持跨環境的一致性。在開發與發布的生命周期中,不同的環境具有細微的不同,這些差異可能是由於不同安裝包的版本和依賴關系引起的。然而,Docker可以通過確保從開發到產品發布整個過程環境的一致性來解決這個問題*Docker容器通過相關配置,保持容器內部所有的配置和依賴關系始終不變。最終,你可以在開發到產品發布的整個過程中使用相同的容器來確保沒有任何差異或者人工干預。

使用Docker,你還可以確保開發者不需要配置完全相同的產品環境,他們可以在他們自己的系統上通過VirtualBox建立虛擬機來運行Docker容器。Docker的魅力在於它同樣可以讓你在亞馬遜EC2實例上運行相同的容器。如果你需要在一個產品發布周期中完成一次升級,你可以很容易地將需要變更的東西放到Docker容器中,測試它們,並且使你已經存在的容器執行相同的變更。這種靈活性就是使用Docker的一個主要好處。和標准部署與集成過程一樣,Docker可以讓你構建、測試和發布鏡像,這個鏡像可以跨多個服務器進行部署。哪怕安裝一個新的安全補丁,整個過程也是一樣的。你可以安裝補丁,然后測試它,並且將這個補丁發布到產品中。

多雲平台

Docker最大的好處之一就是可移植性。在過去的幾年里,所有主流的雲計算提供商,包括亞馬遜AWS和谷歌的GCP,都將Docker融入到他們的平台並增加了各自的支持。Docker容器能運行在亞馬遜的EC2實例、谷歌的GCP實例、Rackspace服務器或者VirtualBox這些提供主機操作系統的平台上。舉例來說,如果運行在亞馬遜EC2實例上的Docker容器能夠很容易地移植到其他幾個平台上,比如說VirtualBox,並且達到類似的一致性和功能性,那這將允許你從基礎設施層中抽象出來。除了AWS和GCP,Docker在其他不同的IaaS提供商也運行的非常好,例如微軟的Azure、OpenStack和可以被具有不同配置的管理者所使用的Chef、Puppet、Ansible等。

環境標准化和版本控制

通過上面的討論,Docker容器可以在不同的開發與產品發布生命周期中確保一致性,進而標准化你的環境。除此之外,Docker容器還可以像git倉庫一樣,可以讓你提交變更到Docker鏡像中並通過不同的版本來管理它們。設想如果你因為完成了一個組件的升級而導致你整個環境都損壞了,Docker可以讓你輕松地回滾到這個鏡像的前一個版本。這整個過程可以在幾分鍾內完成,如果和虛擬機的備份或者鏡像創建流程對比,那Docker算相當快的,它可以讓你快速地進行復制和實現冗余。此外,啟動Docker就和運行一個進程一樣快。

隔離性

Docker可以確保你的應用程序與資源是分隔開的。幾個月前,Gartner發表了一篇報告,這份報告說明了運行Docker 容器進行資源隔離的效果和虛擬機(VM)管理程序一樣的好,但是管理與控制方面還需要進行完善。

我們考慮這樣一個場景,你在你的虛擬機中運行了很多應用程序,這些應用程序包括團隊協作軟件(例如Confluence)、問題追蹤軟件(例如JIRA)、集中身份管理系統(例如Crowd)等等。由於這些軟件運行在不同的端口上,所以你必須使用Apache或者Nginx來做反向代理。到目前為止,一切都很正常,但是隨着你的環境向前推進,你需要在你現有的環境中配置一個內容管理系統(例如Alfresco)。這時候有個問題發生了,這個軟件需要一個不同版本的Apache Tomcat,為了滿足這個需求,你只能將你現有的軟件遷移到另一個版本的Tomcat上,或者找到適合你現有Tomcat的內容管理系統(Alfresco)版本。

對於上述場景,使用Docker就不用做這些事情了。Docker能夠確保每個容器都擁有自己的資源,並且和其他容器是隔離的。你可以用不同的容器來運行使用不同堆棧的應用程序。除此之外,如果你想在服務器上直接刪除一些應用程序是比較困難的,因為這樣可能引發依賴關系沖突。而Docker可以幫你確保應用程序被完全清除,因為不同的應用程序運行在不同的容器上,如果你不在需要一款應用程序,那你可以簡單地通過刪除容器來刪除這個應用程序,並且在你的宿主機操作系統上不會留下任何的臨時文件或者配置文件。

除了上述好處,Docker還能確保每個應用程序只使用分配給它的資源(包括CPU、內存和磁盤空間)。一個特殊的軟件將不會使用你全部的可用資源,要不然這將導致性能降低,甚至讓其他應用程序完全停止工作。

安全性

如上所述,Gartner也承認Docker正在快速地發展。從安全角度來看,Docker確保運行在容器中的應用程序和其他容器中的應用程序是完全分隔與隔離的,在通信流量和管理上賦予你完全的控制權。Docker容器不能窺視運行在其他容器中的進程。從體系結構角度來看,每個容器只使用着自己的資源(從進程到網絡堆棧)。

作為緊固安全的一種手段,Docker將宿主機操作系統上的敏感掛載點(例如/proc和/sys)作為只讀掛載點,並且使用一種寫時復制系統來確保容器不能讀取其他容器的數據。Docker也限制了宿主機操作系統上的一些系統調用,並且和SELinux與AppArmor一起運行的很好。此外,在Docker Hub上可以使用的Docker鏡像都通過數字簽名來確保其可靠性。由於Docker容器是隔離的,並且資源是受限制的,所以即使你其中一個應用程序被黑,也不會影響運行在其它Docker容器上的應用程序。

 

###################

第一步,安裝docker需要的依賴
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
1
2
3
第二步,下載docker的repo文件
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
1
2
3
第三步,安裝docker
sudo yum install docker-ce
1
第四步,啟動docker
sudo service docker start
1
或者

sudo systemctl start docker
---------------------
作者:暴沸
來源:CSDN
原文:https://blog.csdn.net/baofeidyz/article/details/80652668
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

####################################


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM