1. 程式人生 > >DockerOA信用盤原始碼搭建的架構AG真人介面與自制映象的釋出

DockerOA信用盤原始碼搭建的架構AG真人介面與自制映象的釋出


大家都OA信用盤原始碼搭建的架構AG真人介面聯絡方式:QQ:2747044651【征途原始碼論壇http://t.cn/Eyb4XkK】知道虛擬機器吧,windows 上裝個 linux 虛擬機器是大部分程式設計師的常用方案。公司生產環境大多也是虛擬機器,虛擬機器將物理硬體資源虛擬化,按需分配和使用,虛擬機器使用起來和真實作業系統一模一樣,當廢棄不用時直接刪除虛擬機器檔案即可回收資源,很方便集中管理。

由於虛擬機器非常龐大,同時對硬體資源的消耗也大,linux 發展出了另一種虛擬化技術,即 linux 容器(Linux Containers,縮寫為 LXC),它並不像虛擬機器那樣模擬一個完整的作業系統,卻提供虛擬機器一樣的效果。如果說虛擬機器是作業系統級別的隔離,那麼容器就是程序級別的隔離,可以想象這種級別隔離的優點,無疑是快速的,節省資源的。

docker 就是對 linux 容器的封裝,提供簡單實用的使用者介面,是目前最流行的 linux容器解決方案。

下面是百科的定義:

docker 是基於 Go 語言的開源的應用容器引擎,並遵從Apache2.0協議,docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

二. docker 解決什麼問題
1. 解決虛擬機器資源消耗問題。

伺服器作業系統之上執行著虛擬機器,虛擬機器上執行著客戶作業系統,客戶作業系統之上執行著使用者的應用程式,一臺伺服器 80% 的資源開銷都花費在了硬體虛擬化和客戶機作業系統本身。

圖1. 虛擬機器架構與容器架構區別

圖1. 虛擬機器架構與容器架構區別

如圖 1 所示,如果採用 docker 容器技術,容器上執行著虛擬伺服器,虛擬伺服器中執行著使用者的應用程式,虛擬伺服器和伺服器作業系統使用同一核心,虛擬伺服器的檔案系統使用物理伺服器的檔案系統,但做了隔離,看上去每個虛擬伺服器都有自己獨立的檔案系統;在物理伺服器上建立了虛擬網橋裝置,每個虛擬伺服器通過虛擬網橋裝置連線網路。虛擬伺服器直接使用物理伺服器的CPU、記憶體、硬碟,並不對硬體進行虛擬化,因此沒有硬體虛擬化和客戶機作業系統佔用的資源消耗,每一臺虛擬伺服器的效能接近於物理伺服器效能。

一臺普通家用電腦執行一個 Linux 虛擬機器可能已經非常卡,但是卻可以使用 docker 虛擬出幾十甚至上百臺虛擬的 linux 伺服器。如果換成效能強勁的伺服器,使用 docker 就可以提供私有云服務了。

2. 快速部署。

軟體開發的難題在於環境配置,在自己電腦上執行的軟體,換一臺機器可能就無法執行,除非保證作業系統的設定正確,各種元件和庫的正確安裝。比如部署一個 Java 開發的 web 系統,計算機必須安裝 Java 和正確的環境變數,可能還需要安裝 tomcat、nginx。換臺機器部署就要重來一次。

使用 docker 可以將應用程式及依賴打包在一個檔案裡(docker 映象檔案),執行這個檔案就會啟動虛擬伺服器,在虛擬伺服器啟動應用程式或服務,就像在真實在物理機上執行一樣,有了 docker,就可以一次部署,處處執行,也可以用於自動化釋出。

3. 提供一次性的環境。

比如,本地測試他人的軟體、持續整合的時候提供單元測試和構建的環境,啟動或關閉一個虛擬伺服器就像啟動或關閉一個程序一樣簡單和快速。

4. 提供彈性的雲服務。

因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

5. 組建微服務架構。

通過多個容器,一臺機器可以跑很多個虛擬伺服器,因此在一臺機器上就可以模擬出微服務架構,也可以模擬出分散式架構。

三. docker 安裝部署與使用
本文介紹 ubuntu 18.04 系統下的安裝與使用。其他作業系統請參考官方文件https://docs.docker.com/。

1. 安裝 docker 引擎
獲取最新版本的 Docker 安裝包

[email protected]:~$ wget -qO- https://get.docker.com/ | sh

執行上述命令,輸入當前使用者密碼,即可自動下載最新版的 docker 安裝包,並自動安裝。
安裝完成後有個提示:

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

sudo usermod -aG docker aaron

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
containers which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.

當要以非 root 使用者可以直接執行 docker 時,需要執行

sudo usermod -aG docker aaron

命令將使用者 aaron 新增到 docker 使用者組中,然後重新登陸,否則會報下面的錯誤:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

執行下列命令啟動 docker 引擎

[email protected]:~$ sudo service docker start

安裝成功後已預設設定開機啟動並自動啟動,如果要手動設定,執行下面命令:

sudo systemctl enable docker
sudo systemctl start docker

測試執行

[email protected]:~$ sudo docker run hello-world

2. 使用 docker
1. 理解 docker 的架構

使用前先了解下 docker 的架構,如下圖所示:

docker 架構圖

docker 架構圖

docker 鏡象(image) 是存放在 docker 倉庫(Registry)的檔案,是用於建立 docker 容器 的模板。

docker 容器 是獨立執行的一個或一組應用,可以理解為前述介紹的虛擬伺服器。

docker 主機 是一個物理或者虛擬的機器用於執行 docker 守護程序和容器。

docker 客戶端 通過命令列或者其他工具使用 docker API 與 docker 的守護程序通訊。
作為使用者,我們直接使用的是 docker 客戶端。

2. docker 命令

檢視docker 命令的幫助資訊

docker --help #docker 全部命令幫助資訊
docker COMMAND --help #docker 具體命令COMMAND的幫助資訊

檢視docker 資訊

docker info

可以看到容器的池、已用資料大小、總資料大小,基本容器大小、當前執行容器數量等。

搜尋映象,從網路中搜索別人做好的容器映象。

docker search ubuntu
docker search centos

ubuntu 映象

ubuntu 映象

從這裡可以看出有的映象已經集成了 php、java、ansible 等應用,我們也可以製作包含自己應用或服務的映象檔案,將此檔案傳給別人,別人即可直接使用 docker 開啟容器,不需要任何額外的操作,也不像虛擬機器那樣消耗資源,即可執行你的應用或服務,是不是非常方便?!

如果對軟體測試、介面測試、自動化測試、效能測試、LR指令碼開發、面試經驗交流。感興趣可以175317069,群內會有不定期的發放免費的資料連結,這些資料都是從各個技術網站蒐集、整理出來的,如果你有好的學習資料可以私聊發我,我會註明出處之後分享給大家。

從網路中下載別人做好的容器映象。

docker pull centos
docker pull ubuntu

匯入下載好的容器映象檔案

docker load < image_xxx.tar

檢視映象

docker images
docker images -a

檢查映象

docker inspect ubuntu

可以看到容器映象的基本資訊。

刪除映象,通過映象的 id 來指定刪除

docker rmi ubuntu

刪除全部映象

docker rmi $(docker images -q)

顯示映象歷史

docker history ubuntu

執行容器

Docker容器可以理解為在沙盒中執行的程序,這個沙盒包含了該程序執行所必須的資源,包括檔案系統、系統類庫、shell 環境等。但這個沙盒預設是不會執行任何程式的,需要在沙盒中執行一個程序來啟動某一個容器。這個程序是該容器的唯一程序,所以當該程序結束的時候,容器也會完全停止。

執行 ubuntu 容器並進入互動式環境

[email protected]:~$ docker run -i --name="ubuntu1" --hostname="ubuntu1" ubuntu /bin/sh
cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 ubuntu1
whoami
root
uname -a
Linux ubuntu1 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

上述命令我們建立了一個名字為 ubuntu1 的容器,設定容器的主機名為 ubuntu1,進入 /bin/sh 命令後我們列印了 hosts 檔案的內容,查看了核心版本(與本機作業系統版本一致),這裡可以使用各種 linux 命令,就像在新的作業系統中使用命令一個樣。同樣的方法,我們在新的終端建立一個 ubuntu2 的容器,並使用

docker ps

檢視正在執行的容器。

檢視正在執行的容器

檢視正在執行的容器

輸入 exit 退出容器。

docker run -d ubuntu

會出現一串長的字母數字組成的串,為容器的 id,請注意容器要有持續執行的程序存在,否則,容器會很快自動退出。

執行容器並指定MAC地址

docker run -d --name='centos3' --hostname='centos3' --mac-address="02:42:AC:11:00:24" docker-centos6.10-hadoop-spark

列出所有的容器

docker ps -a

列出最近一次啟動的容器

docker ps -l

檢查容器

docker inspect centos1

可以獲取容器的相關資訊。

獲取容器CID

docker inspect -f '{{.Id}}' centos1

獲取容器PID

docker inspect -f '{{.State.Pid}}' centos1

獲取容器IP

docker inspect -f '{{.NetworkSettings.IPAddress}}' centos1

獲取容器閘道器

docker inspect -f '{{.NetworkSettings.Gateway}}' centos1

獲取容器 MAC

docker inspect -f '{{.NetworkSettings.MacAddress}}' centos1

檢視容器 IP 地址

docker inspect -f '{{.NetworkSettings.IPAddress}}' centos1

連線容器

ssh 容器的 IP 地址

輸入密碼:123456

容器執行後,可以通過另一種方式進入容器內部

docker exec -it centos /bin/sh

檢視容器執行過程中的日誌

docker logs centos1

列出一個容器裡面被改變的檔案或者目錄,列表會顯示出三種事件,A 增加的;D 刪除的;C 被改變的

docker diff centos1

和初始容器映象專案,使用者或系統增加/修改/刪除了那些目錄檔案,都可以檢視到。

檢視容器里正在執行的程序