精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從入門到精通的Docker詳細(xì)教程

SSDFans ? 來源:博客 ? 作者: 慘綠少年 ? 2021-11-02 15:22 ? 次閱讀

1 容器簡(jiǎn)介

1.1 什么是 Linux 容器

Linux容器是與系統(tǒng)其他部分隔離開的一系列進(jìn)程,從另一個(gè)鏡像運(yùn)行,并由該鏡像提供支持進(jìn)程所需的全部文件。容器提供的鏡像包含了應(yīng)用的所有依賴項(xiàng),因而在從開發(fā)到測(cè)試再到生產(chǎn)的整個(gè)過程中,它都具有可移植性和一致性。

更加詳細(xì)地來說,請(qǐng)您假定您在開發(fā)一個(gè)應(yīng)用。您使用的是一臺(tái)筆記本電腦,而且您的開發(fā)環(huán)境具有特定的配置。其他開發(fā)人員身處的環(huán)境配置可能稍有不同。您正在開發(fā)的應(yīng)用依賴于您當(dāng)前的配置,還要依賴于某些特定文件。與此同時(shí),您的企業(yè)還擁有標(biāo)準(zhǔn)化的測(cè)試和生產(chǎn)環(huán)境,且具有自身的配置和一系列支持文件。您希望盡可能多在本地模擬這些環(huán)境,而不產(chǎn)生重新創(chuàng)建服務(wù)器環(huán)境的開銷。

因此,您要如何確保應(yīng)用能夠在這些環(huán)境中運(yùn)行和通過質(zhì)量檢測(cè),并且在部署過程中不出現(xiàn)令人頭疼的問題,也無需重新編寫代碼和進(jìn)行故障修復(fù)?答案就是使用容器。容器可以確保您的應(yīng)用擁有必需的配置和文件,使得這些應(yīng)用能夠在從開發(fā)到測(cè)試、再到生產(chǎn)的整個(gè)流程中順利運(yùn)行,而不出現(xiàn)任何不良問題。這樣可以避免危機(jī),做到皆大歡喜。

雖然這只是簡(jiǎn)化的示例,但在需要很高的可移植性、可配置性和隔離的情況下,我們可以利用 Linux 容器通過很多方式解決難題。無論基礎(chǔ)架構(gòu)是在企業(yè)內(nèi)部還是在云端,或者混合使用兩者,容器都能滿足您的需求。

1.2 容器不就是虛擬化嗎

是,但也不竟然。我們用一種簡(jiǎn)單方式來思考一下:虛擬化使得許多操作系統(tǒng)可同時(shí)在單個(gè)系統(tǒng)上運(yùn)行。容器則可共享同一個(gè)操作系統(tǒng)內(nèi)核,將應(yīng)用進(jìn)程與系統(tǒng)其他部分隔離開。

圖-普通虛擬化技術(shù)和Docker的對(duì)比這意味著什么?首先,讓多個(gè)操作系統(tǒng)在單個(gè)虛擬機(jī)監(jiān)控程序上運(yùn)行以實(shí)現(xiàn)虛擬化,并不能達(dá)成和使用容器同等的輕量級(jí)效果。事實(shí)上,在僅擁有容量有限的有限資源時(shí),您需要能夠可以進(jìn)行密集部署的輕量級(jí)應(yīng)用。Linux 容器可從單個(gè)操作系統(tǒng)運(yùn)行,在所有容器中共享該操作系統(tǒng),因此應(yīng)用和服務(wù)能夠保持輕量級(jí),并行快速運(yùn)行。

1.3 容器發(fā)展簡(jiǎn)史

我們現(xiàn)在稱為容器技術(shù)的概念最初出現(xiàn)在 2000 年,當(dāng)時(shí)稱為 FreeBSD jail,這種技術(shù)可將 FreeBSD 系統(tǒng)分區(qū)為多個(gè)子系統(tǒng)(也稱為 Jail)。Jail 是作為安全環(huán)境而開發(fā)的,系統(tǒng)管理員可與企業(yè)內(nèi)部或外部的多個(gè)用戶共享這些 Jail。Jail 的目的是讓進(jìn)程在經(jīng)過修改的 chroot 環(huán)境中創(chuàng)建,而不會(huì)脫離和影響整個(gè)系統(tǒng) — 在 chroot 環(huán)境中,對(duì)文件系統(tǒng)、網(wǎng)絡(luò)和用戶的訪問都實(shí)現(xiàn)了虛擬化。

盡管 Jail 在實(shí)施方面存在局限性,但最終人們找到了脫離這種隔離環(huán)境的方法。但這個(gè)概念非常有吸引力。2001 年,通過 Jacques Gélinas 的 VServer 項(xiàng)目,隔離環(huán)境的實(shí)施進(jìn)入了 Linux 領(lǐng)域。正如 Gélinas 所說,這項(xiàng)工作的目的是“在高度獨(dú)立且安全的單一環(huán)境中運(yùn)行多個(gè)通用 Linux 服務(wù)器 [sic]。” 在完成了這項(xiàng)針對(duì) Linux 中多個(gè)受控制用戶空間的基礎(chǔ)性工作后,Linux 容器開始逐漸成形并最終發(fā)展成了現(xiàn)在的模樣。

2 什么是 Docker?

“Docker” 一詞指代多種事物,包括開源社區(qū)項(xiàng)目、開源項(xiàng)目使用的工具、主導(dǎo)支持此類項(xiàng)目的公司 Docker Inc. 以及該公司官方支持的工具。技術(shù)產(chǎn)品和公司使用同一名稱,的確讓人有點(diǎn)困惑。我們來簡(jiǎn)單說明一下:

IT 軟件中所說的 “Docker” ,是指容器化技術(shù),用于支持創(chuàng)建和使用 Linux 容器。

開源 Docker 社區(qū)致力于改進(jìn)這類技術(shù),并免費(fèi)提供給所有用戶,使之獲益。

Docker Inc. 公司憑借 Docker 社區(qū)產(chǎn)品起家,它主要負(fù)責(zé)提升社區(qū)版本的安全性,并將改進(jìn)后的版本與更廣泛的技術(shù)社區(qū)分享。此外,它還專門對(duì)這些技術(shù)產(chǎn)品進(jìn)行完善和安全固化,以服務(wù)于企業(yè)客戶。

借助 Docker ,您可將容器當(dāng)做重量輕、模塊化的虛擬機(jī)使用。同時(shí),您還將獲得高度的靈活性,從而實(shí)現(xiàn)對(duì)容器的高效創(chuàng)建、部署及復(fù)制,并能將其從一個(gè)環(huán)境順利遷移至另一個(gè)環(huán)境。

2.1 Docker 如何工作?

Docker 技術(shù)使用 Linux 內(nèi)核和內(nèi)核功能(例如 Cgroups 和 namespaces)來分隔進(jìn)程,以便各進(jìn)程相互獨(dú)立運(yùn)行。這種獨(dú)立性正是采用容器的目的所在;它可以獨(dú)立運(yùn)行多種進(jìn)程、多個(gè)應(yīng)用程序,更加充分地發(fā)揮基礎(chǔ)設(shè)施的作用,同時(shí)保持各個(gè)獨(dú)立系統(tǒng)的安全性。容器工具(包括 Docker)可提供基于鏡像的部署模式。這使得它能夠輕松跨多種環(huán)境,與其依賴程序共享應(yīng)用或服務(wù)組。Docker 還可在這一容器環(huán)境中自動(dòng)部署應(yīng)用程序(或者合并多種流程,以構(gòu)建單個(gè)應(yīng)用程序)。此外,由于這些工具基于 Linux 容器構(gòu)建,使得 Docker 既易于使用,又別具一格 —— 它可為用戶提供前所未有的高度應(yīng)用程訪問權(quán)限、快速部署以及版本控制和分發(fā)能力。

2.2 Docker 技術(shù)是否與傳統(tǒng)的 Linux 容器相同?

否。Docker 技術(shù)最初是基于 LXC 技術(shù)構(gòu)建(大多數(shù)人都會(huì)將這一技術(shù)與“傳統(tǒng)的” Linux 容器聯(lián)系在一起),但后來它逐漸擺脫了對(duì)這種技術(shù)的依賴。就輕量級(jí)虛擬化這一功能來看,LXC 非常有用,但它無法提供出色的開發(fā)人員或用戶體驗(yàn)。除了運(yùn)行容器之外,Docker 技術(shù)還具備其他多項(xiàng)功能,包括簡(jiǎn)化用于構(gòu)建容器、傳輸鏡像以及控制鏡像版本的流程。

傳統(tǒng)的 Linux 容器使用 init 系統(tǒng)來管理多種進(jìn)程。這意味著,所有應(yīng)用程序都作為一個(gè)整體運(yùn)行。與此相反,Docker 技術(shù)鼓勵(lì)應(yīng)用程序各自獨(dú)立運(yùn)行其進(jìn)程,并提供相應(yīng)工具以實(shí)現(xiàn)這一功能。這種精細(xì)化運(yùn)作模式自有其優(yōu)勢(shì)。

2.3 docker的目標(biāo)

docker的主要目標(biāo)是‘Build,Ship and Run any App,Angwhere’,構(gòu)建,運(yùn)輸,處處運(yùn)行構(gòu)建:做一個(gè)docker鏡像運(yùn)輸:docker pull運(yùn)行:?jiǎn)?dòng)一個(gè)容器每一個(gè)容器,他都有自己的文件系統(tǒng)rootfs.

3 安裝Docker

環(huán)境說明


		
			# 需要兩臺(tái)幾點(diǎn)進(jìn)行安裝 [root@docker01 ~]# cat /etc/redhat-release  CentOS Linux release 7.2.1511 (Core) [root@docker01 ~]# uname -r  3.10.0-327.el7.x86_64 [root@docker01 ~]# hostname -I 10.0.0.100172.16.1.100 [root@docker02 ~]# hostname -I 10.0.0.101172.16.1.101在兩個(gè)節(jié)點(diǎn)上都進(jìn)行操作

		
			wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo yum install docker-ce -y修改在docker01配置:

		
			# 修改啟動(dòng)文件,監(jiān)聽遠(yuǎn)程端口 vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://10.0.0.100:2375  systemctl daemon-reload systemctl enable docker.service systemctl restart docker.service # ps -ef檢查進(jìn)行,是否啟動(dòng)docker02測(cè)試

		
			[root@docker02 ~]# docker -H 10.0.0.100 info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.12.0-ce Storage Driver: devicemapper ···

3.1 Docker基礎(chǔ)命令操作

查看docker相關(guān)信息

		
			[root@docker01 ~]# docker version  Client: Version:  17.12.0-ce API version:  1.35 Go version:  go1.9.2 Git commit:  c97c6d6 Built:  Wed Dec 2720:10:142017 OS/Arch:  linux/amd64 Server: Engine: Version:  17.12.0-ce API version:  1.35 (minimum version 1.12) Go version:  go1.9.2 Git commit:  c97c6d6 Built:  Wed Dec 2720:12:462017 OS/Arch:  linux/amd64 Experimental:  false配置docker鏡像加速

		
			vi /etc/docker/daemon.json { 'registry-mirrors': ['https://registry.docker-cn.com'] }

3.2 啟動(dòng)第一個(gè)容器


		
			[root@docker01 ~]# docker run -d -p 80:80 nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx e7bb522d92ff: Pull complete 6edc05228666: Pull complete cd866a17e81f: Pull complete Digest: sha256:285b49d42c703fdf257d1e2422765c4ba9d3e37768d6ea83d7fe2043dad6e63d Status: Downloaded newer image for nginx:latest 8d8f81da12b5c10af6ba1a5d07f4abc041cb95b01f3d632c3d638922800b0b4d # 容器啟動(dòng)后,在瀏覽器進(jìn)行訪問測(cè)試參數(shù)說明
參數(shù) 說明
run 創(chuàng)建并運(yùn)行一個(gè)容器
-d 放入后臺(tái)
-p 端口映射
nginx 鏡像名稱

3.3 Docker鏡像生命周期

cde825ee-38be-11ec-82a8-dac502259ad0.jpg

4 docker鏡像相關(guān)操作

4.1 搜索官方倉庫鏡像


		
			[root@docker01 ~]# docker search centos NAME           DESCRIPTION          STARS  OFFICIAL        AUTOMATED centos          The official build of CentOS. 3992   [OK]    ansible/centos7-ansible  Ansible on Centos7       105列表說明
參數(shù) 說明
NAME 鏡像名稱
DESCRIPTION 鏡像說明
STARS 點(diǎn)贊數(shù)量
OFFICIAL 是否是官方的
AUTOMATED 是否是自動(dòng)構(gòu)建的

4.2 獲取鏡像

根據(jù)鏡像名稱拉取鏡像

		
			[root@docker01 ~]# docker pull centos Using default tag: latest latest: Pulling from library/centos af4b0a2388c6: Downloading 34.65MB/73.67MB查看當(dāng)前主機(jī)鏡像列表

		
			[root@docker01 ~]# docker image list  REPOSITORY     TAG         IMAGE ID      CREATED       SIZE centos       latest       ff426288ea90    3 weeks ago     207MB nginx        latest       3f8a4339aadd    5 weeks ago     108MB拉第三方鏡像方法

		
			docker pull index.tenxcloud.com/tenxcloud/httpd

4.3 導(dǎo)出鏡像


		
			[root@docker01 ~]# docker image list  REPOSITORY     TAG         IMAGE ID      CREATED       SIZE centos       latest       ff426288ea90    3 weeks ago     207MB nginx        latest       3f8a4339aadd    5 weeks ago     108MB # 導(dǎo)出 [root@docker01 ~]# docker image save centos > docker-centos.tar.gz

4.4 刪除鏡像


		
			[root@docker01 ~]# docker image rm centos:latest [root@docker01 ~]# docker image list  REPOSITORY     TAG         IMAGE ID      CREATED       SIZE nginx        latest       3f8a4339aadd    5 weeks ago     108MB

4.5 導(dǎo)入鏡像


		
			[root@docker01 ~]# docker image load -i docker-centos.tar.gz  e15afa4858b6: Loading layer 215.8MB/215.8MB Loaded image: centos:latest [root@docker01 ~]# docker image list  REPOSITORY     TAG         IMAGE ID      CREATED       SIZE centos       latest       ff426288ea90    3 weeks ago     207MB nginx        latest       3f8a4339aadd    5 weeks ago     108MB

4.6 查看鏡像的詳細(xì)信息


		
			[root@docker01 ~]# docker image inspect centos

5 容器的日常管理

5.1 容器的起/停

最簡(jiǎn)單的運(yùn)行一個(gè)容器

		
			[root@docker01 ~]# docker run nginx創(chuàng)建容器,兩步走(不常用)

		
			[root@docker01 ~]# docker create centos:latest /bin/bash bb7f32368ecf0492adb59e20032ab2e6cf6a563a0e6751e58930ee5f7aaef204 [root@docker01 ~]# docker start stupefied_nobel stupefied_nobel快速啟動(dòng)容器方法

		
			[root@docker01 ~]# docker run centos:latest /usr/bin/sleep 20;容器內(nèi)的第一個(gè)進(jìn)程必須一直處于運(yùn)行的狀態(tài),否則這個(gè)容器,就會(huì)處于退出狀態(tài)!查看正在運(yùn)行的容器

		
			[root@docker01 ~]# docker container ls  或 [root@docker01 ~]# docker ps  CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS        NAMES 8708e93fd767    nginx        'nginx -g 'daemon of…'6 seconds ago    Up 4 seconds    80/tcp       keen_lewin查看你容器詳細(xì)信息/ip

		
			[root@docker01 ~]# docker container inspect 容器名稱/id查看你所有容器(包括未運(yùn)行的)

		
			root@docker01 ~]# docker ps -a CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS           PORTS        NAMES 8708e93fd767    nginx        'nginx -g 'daemon of…'4minutes ago    Exited (0) 59 seconds ago            keen_lewin f9f3e6af7508    nginx        'nginx -g 'daemon of…'  5 minutes ago    Exited (0) 5 minutes ago            optimistic_haibt 8d8f81da12b5    nginx        'nginx -g 'daemon of…'  3 hours ago     Exited (0) 3 hours ago             lucid_bohr停止容器

		
			[root@docker01 ~]# docker stop 容器名稱/id  或 [root@docker01 ~]# docker container kill 容器名稱/id

5.2 進(jìn)入容器方法

啟動(dòng)時(shí)進(jìn)去方法

		
			[root@docker01 ~]# docker run -it #參數(shù):-it 可交互終端 [root@docker01 ~]# docker run -it nginx:latest /bin/bash root@79241093859e:/#退出/離開容器

		1 | ctrl+p & ctrl+q啟動(dòng)后進(jìn)入容器的方法啟動(dòng)一個(gè)docker

		
			[root@docker01 ~]# docker run -it centos:latest  [root@1bf0f43c4d2f /]# ps -ef  UID     PID  PPID C STIME TTY     TIME CMD root     10015:47 pts/000:00:00 /bin/bash root     131015:47 pts/000:00:00 ps -efattach進(jìn)入容器,使用pts/0 ,會(huì)讓所用通過此方法進(jìn)如放入用戶看到同樣的操作。

		
			[root@docker01 ~]# docker attach 1bf0f43c4d2f [root@1bf0f43c4d2f /]# ps -ef  UID     PID  PPID C STIME TTY     TIME CMD root     10015:47 pts/000:00:00 /bin/bash root     141015:49 pts/000:00:00 ps -ef自命名啟動(dòng)一個(gè)容器 --name

		
			[root@docker01 ~]# docker attach 1bf0f43c4d2f [root@1bf0f43c4d2f /]# ps -ef  UID     PID  PPID C STIME TTY     TIME CMD root     10015:47 pts/000:00:00 /bin/bash root     141015:49 pts/000:00:00 ps -efexrc 進(jìn)入容器方法(推薦使用)

		
			[root@docker01 ~]# docker exec -it clsn1 /bin/bash  [root@b20fa75b4b40 /]# 重新分配一個(gè)終端 [root@b20fa75b4b40 /]# ps -ef  UID     PID  PPID C STIME TTY     TIME CMD root     10016:11 pts/000:00:00 /bin/bash root     130016:14 pts/100:00:00 /bin/bash root     2613016:14 pts/100:00:00 ps -ef

5.3 刪除所有容器


		
			[root@docker01 ~]# docker rm -f `docker ps -a -q` # -f 強(qiáng)制刪除

5.4 啟動(dòng)時(shí)進(jìn)行端口映射

-p參數(shù)端口映射

		
			[root@docker01 ~]# docker run -d -p 8888:80 nginx:latest  287bec5c60263166c03e1fc5b0b8262fe76507be3dfae4ce5cd2ee2d1e8a89a9不同指定映射方法
參數(shù) 說明
-p hostPort:containerPort 端口映射 -p 8080:80
-p ipcontainerPort 配置監(jiān)聽地址 -p 10.0.0.10080
-p ip::containerPort 隨機(jī)分配端口 -p 10.0.0.100::80
-p hostPortudp 指定協(xié)議 -p 8080tcp
-p 81:80 –p 443:443 指定多個(gè)
隨機(jī)映射

		
			docker run -P (大P)# 需要鏡像支持

6 Docker 數(shù)據(jù)卷的管理

6.1 掛載時(shí)創(chuàng)建卷

掛載卷

		
			[root@docker01 ~]# docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest 079786c1e297b5c5031e7a841160c74e91d4ad06516505043c60dbb78a259d09容器內(nèi)站點(diǎn)目錄: /usr/share/nginx/html在宿主機(jī)寫入數(shù)據(jù),查看

		
			[root@docker01 ~]# echo 'http://www.nmtui.com' >/data/index.html [root@docker01 ~]# curl 10.0.0.100 http://www.nmtui.com設(shè)置共享卷,使用同一個(gè)卷啟動(dòng)一個(gè)新的容器

		
			[root@docker01 ~]# docker run -d -p 8080:80 -v /data:/usr/share/nginx/html nginx:latest  351f0bd78d273604bd0971b186979aa0f3cbf45247274493d2490527babb4e42 [root@docker01 ~]# curl 10.0.0.100:8080 http://www.nmtui.com查看卷列表

		
			[root@docker01 ~]# docker volume ls DRIVER       VOLUME NAME

6.2 創(chuàng)建卷后掛載

創(chuàng)建一個(gè)卷

		
			[root@docker01 ~]# docker volume create  f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521 [root@docker01 ~]# docker volume ls  DRIVER       VOLUME NAME local        f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521指定卷名

		
			[root@docker01 ~]# docker volume ls  DRIVER       VOLUME NAME local        clsn local        f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521查看卷路徑

		
			[root@docker01 ~]# docker volume inspect clsn  [  {    'CreatedAt': '2018-02-01T0025+08:00',    'Driver': 'local',    'Labels': {},    'Mountpoint': '/var/lib/docker/volumes/clsn/_data',    'Name': 'clsn',    'Options': {},    'Scope': 'local'  } ]使用卷創(chuàng)建

		
			[root@docker01 ~]# docker run -d -p 9000:80 -v clsn:/usr/share/nginx/html nginx:latest  1434559cff996162da7ce71820ed8f5937fb7c02113bbc84e965845c219d3503 # 宿主機(jī)測(cè)試 [root@docker01 ~]# echo 'blog.nmtui.com' >/var/lib/docker/volumes/clsn/_data/index.html  [root@docker01 ~]# curl 10.0.0.100:9000 blog.nmtui.com設(shè)置卷

		
			[root@docker01 ~]# docker run -d -P --volumes-from 079786c1e297 nginx:latest  b54b9c9930b417ab3257c6e4a8280b54fae57043c0b76b9dc60b4788e92369fb查看使用的端口

		
			[root@docker01 ~]# netstat -lntup  Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address      Foreign Address     State    PID/Program name   tcp    0   0 0.0.0.0:22       0.0.0.0:*        LISTEN   1400/sshd      tcp    0   0 10.0.0.100:2375     0.0.0.0:*        LISTEN   26218/dockerd    tcp6    0   0 :::9000         :::*          LISTEN   32015/docker-proxy  tcp6    0   0 :::8080         :::*          LISTEN   31853/docker-proxy  tcp6    0   0 :::80          :::*          LISTEN   31752/docker-proxy  tcp6    0   0 :::22          :::*          LISTEN   1400/sshd      tcp6    0   0 :::32769        :::*          LISTEN   32300/docker-proxy  [root@docker01 ~]# curl 10.0.0.100:32769 http://www.nmtui.com 

6.3 手動(dòng)將容器保存為鏡像

本次是基于docker官方centos 6.8 鏡像創(chuàng)建官方鏡像列表:https://hub.docker.com/explore/啟動(dòng)一個(gè)centos6.8的鏡像

		
			[root@docker01 ~]# docker pull centos:6.8 [root@docker01 ~]# docker run -it -p 1022:22 centos:6.8 /bin/bash # 在容器種安裝sshd服務(wù),并修改系統(tǒng)密碼 [root@582051b2b92b ~]# yum install openssh-server -y  [root@582051b2b92b ~]# echo 'root:123456' |chpasswd [root@582051b2b92b ~]# /etc/init.d/sshd start啟動(dòng)完成后鏡像ssh連接測(cè)試將容器提交為鏡像

		
			[root@docker01 ~]# docker commit brave_mcclintock centos6-ssh使用新的鏡像啟動(dòng)容器

		
			[root@docker01 ~]# docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D  5b8161fda2a9f2c39c196c67e2eb9274977e7723fe51c4f08a0190217ae93094在容器安裝httpd服務(wù)

		
			[root@5b8161fda2a9 /]# yum install httpd -y編寫啟動(dòng)腳本腳本

		
			[root@5b8161fda2a9 /]# cat init.sh  #!/bin/bash /etc/init.d/httpd start /usr/sbin/sshd -D [root@5b8161fda2a9 /]# chmod +x init.sh  # 注意執(zhí)行權(quán)限

注意執(zhí)行權(quán)限

再次提交為新的鏡像

		
			[root@docker01 ~]# docker commit 5b8161fda2a9 centos6-httpd  sha256:705d67a786cac040800b8485cf046fd57b1828b805c515377fc3e9cea3a481c1

啟動(dòng)鏡像,做好端口映射。并在瀏覽器中測(cè)試訪問

		
			[root@docker01 ~]# docker run -d -p 1222:22 -p 80:80 centos6-httpd /init.sh  46fa6a06644e31701dc019fb3a8c3b6ef008d4c2c10d46662a97664f838d8c2c

7 Dockerfile自動(dòng)構(gòu)建docker鏡像

官方構(gòu)建dockerffile文件參考//github.com/CentOS/CentOS-Dockerfiles

7.1 Dockerfile指令集

dockerfile主要組成部分:

			
				基礎(chǔ)鏡像信息 FROM centos:6.8 制作鏡像操作指令RUN yum insatll openssh-server -y 容器啟動(dòng)時(shí)執(zhí)行指令 CMD ['/bin/bash']
dockerfile常用指令:

			
				FROM 這個(gè)鏡像的媽媽是誰?(指定基礎(chǔ)鏡像) MAINTAINER 告訴別人,誰負(fù)責(zé)養(yǎng)它?(指定維護(hù)者信息,可以沒有) RUN 你想讓它干啥(在命令前面加上RUN即可) ADD 給它點(diǎn)創(chuàng)業(yè)資金(COPY文件,會(huì)自動(dòng)解壓) WORKDIR 我是cd,今天剛化了妝(設(shè)置當(dāng)前工作目錄) VOLUME 給它一個(gè)存放行李的地方(設(shè)置卷,掛載主機(jī)目錄) EXPOSE 它要打開的門是啥(指定對(duì)外的端口) CMD 奔跑吧,兄弟!(指定容器啟動(dòng)后的要干的事情)
dockerfile其他指令:

			
				COPY 復(fù)制文件 ENV 環(huán)境變量 ENTRYPOINT 容器啟動(dòng)后執(zhí)行的命令

7.2 創(chuàng)建一個(gè)Dockerfile

創(chuàng)建第一個(gè)Dockerfile文件

		
			# 創(chuàng)建目錄 [root@docker01 base]# cd /opt/base # 創(chuàng)建Dcokerfile文件,注意大小寫 [root@docker01 base]# vim Dockerfile FROM centos:6.8 RUN yum install openssh-server -y RUN echo 'root:123456' |chpasswd RUN /etc/init.d/sshd start CMD ['/usr/sbin/sshd','-D']構(gòu)建docker鏡像

		
			[root@docker01 base]# docker image build -t centos6.8-ssh .  -t 為鏡像標(biāo)簽打標(biāo)簽 . 表示當(dāng)前路徑使用自構(gòu)建的鏡像啟動(dòng)

		
			[root@docker01 base]# docker run -d -p 2022:22 centos6.8-ssh-b  dc3027d3c15dac881e8e2aeff80724216f3ac725f142daa66484f7cb5d074e7a

7.3 使用Dcokerfile安裝kodexplorer

Dockerfile文件內(nèi)容

		
			FROM centos:6.8 RUN yum install wget unzip php php-gd php-mbstring -y && yum clean all # 設(shè)置工作目錄,之后的操作都在這個(gè)目錄中 WORKDIR /var/www/html/ RUN wget -c http://static.kodcloud.com/update/download/kodexplorer4.25.zip RUN unzip kodexplorer4.25.zip && rm -f kodexplorer4.25.zip RUN chown -R apache.apache . CMD ['/usr/sbin/apachectl','-D','FOREGROUND']更多的Dockerfile可以參考官方方法。

8 Docker中的鏡像分層

參考文檔:http://www.maiziedu.com/wiki/cloud/dockerimageDocker 支持通過擴(kuò)展現(xiàn)有鏡像,創(chuàng)建新的鏡像。實(shí)際上,Docker Hub 中 99% 的鏡像都是通過在 base 鏡像中安裝和配置需要的軟件構(gòu)建出來的。

8.1 Docker 鏡像為什么分層

鏡像分層最大的一個(gè)好處就是共享資源。比如說有多個(gè)鏡像都從相同的 base 鏡像構(gòu)建而來,那么 Docker Host 只需在磁盤上保存一份 base 鏡像;同時(shí)內(nèi)存中也只需加載一份 base 鏡像,就可以為所有容器服務(wù)了。而且鏡像的每一層都可以被共享。如果多個(gè)容器共享一份基礎(chǔ)鏡像,當(dāng)某個(gè)容器修改了基礎(chǔ)鏡像的內(nèi)容,比如 /etc 下的文件,這時(shí)其他容器的 /etc 是不會(huì)被修改的,修改只會(huì)被限制在單個(gè)容器內(nèi)。這就是容器 Copy-on-Write 特性。

8.2 可寫的容器層

當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。

所對(duì)容器的改動(dòng) - 無論添加、刪除、還是修改文件都只會(huì)發(fā)生在容器層中。只有容器層是可寫的,容器層下面的所有鏡像層都是只讀的。

8.3 容器層的細(xì)節(jié)說明

鏡像層數(shù)量可能會(huì)很多,所有鏡像層會(huì)聯(lián)合在一起組成一個(gè)統(tǒng)一的文件系統(tǒng)。如果不同層中有一個(gè)相同路徑的文件,比如 /a,上層的 /a 會(huì)覆蓋下層的 /a,也就是說用戶只能訪問到上層中的文件 /a。在容器層中,用戶看到的是一個(gè)疊加之后的文件系統(tǒng)。文件操作說明

文件操作 說明
添加文件 在容器中創(chuàng)建文件時(shí),新文件被添加到容器層中。
讀取文件 在容器中讀取某個(gè)文件時(shí),Docker 會(huì)從上往下依次在各鏡像層中查找此文件。一旦找到,立即將其復(fù)制到容器層,然后打開并讀入內(nèi)存
修改文件 在容器中修改已存在的文件時(shí),Docker 會(huì)從上往下依次在各鏡像層中查找此文件。一旦找到,立即將其復(fù)制到容器層,然后修改之。
刪除文件 在容器中刪除文件時(shí),Docker 也是從上往下依次在鏡像層中查找此文件。找到后,會(huì)在容器層中記錄下此刪除操作。(只是記錄刪除操作)

只有當(dāng)需要修改時(shí)才復(fù)制一份數(shù)據(jù),這種特性被稱作 Copy-on-Write。可見,容器層保存的是鏡像變化的部分,不會(huì)對(duì)鏡像本身進(jìn)行任何修改。這樣就解釋了我們前面提出的問題:容器層記錄對(duì)鏡像的修改,所有鏡像層都是只讀的,不會(huì)被容器修改,所以鏡像可以被多個(gè)容器共享。

9 使用docker運(yùn)行zabbix-server

9.1 容器間的互聯(lián)

在運(yùn)行zabbix之前務(wù)必要了解容器間互聯(lián)的方法


		
			# 創(chuàng)建一個(gè)nginx容器 docker run -d -p 80:80 nginx # 創(chuàng)建容器,做link,并進(jìn)入容器中 docker run -it --link quirky_brown:web01 centos-ssh /bin/bash # 在容器中訪問nginx容器可以ping通 ping web01

命令執(zhí)行過程


		
			# 啟動(dòng)apache容器 [root@docker01 ~]# docker run -d httpd:2.4  3f1f7fc554720424327286bd2b04aeab1b084a3fb011a785b0deab6a34e56955 ^[[A[root@docker01 docker ps -a CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES 3f1f7fc55472    httpd:2.4'httpd-foreground'6 seconds ago    Up 5 seconds    80/tcp       determined_clarke # 拉取一個(gè)busybox 鏡像 [root@docker01 ~]# docker pull busybox  # 啟動(dòng)容器 [root@docker01 ~]# docker run -it --link determined_clarke:web busybox:latest  /bin/sh  / # # 使用新的容器訪問最初的web容器 / # ping web  PING web (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.058 ms ^C --- web ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.058/0.058/0.058 ms

9.2 啟動(dòng)zabbix容器

1、啟動(dòng)一個(gè)mysql的容器


		
			docker run --name mysql-server -t   -e MYSQL_DATABASE='zabbix'   -e MYSQL_USER='zabbix'   -e MYSQL_PASSWORD='zabbix_pwd'   -e MYSQL_ROOT_PASSWORD='root_pwd'   -d mysql:5.7   --character-set-server=utf8 --collation-server=utf8_bin

2、啟動(dòng)java-gateway容器監(jiān)控java服務(wù)


		
			docker run --name zabbix-java-gateway -t   -d zabbix/zabbix-java-gateway:latest

3、啟動(dòng)zabbix-mysql容器使用link連接mysql與java-gateway。


		
			docker run --name zabbix-server-mysql -t   -e DB_SERVER_HOST='mysql-server'   -e MYSQL_DATABASE='zabbix'   -e MYSQL_USER='zabbix'   -e MYSQL_PASSWORD='zabbix_pwd'   -e MYSQL_ROOT_PASSWORD='root_pwd'   -e ZBX_JAVAGATEWAY='zabbix-java-gateway'   --link mysql-server:mysql   --link zabbix-java-gateway:zabbix-java-gateway   -p 10051:10051   -d zabbix/zabbix-server-mysql:latest

4、啟動(dòng)zabbix web顯示,使用link連接zabbix-mysql與mysql。


		
			docker run --name zabbix-web-nginx-mysql -t   -e DB_SERVER_HOST='mysql-server'   -e MYSQL_DATABASE='zabbix'   -e MYSQL_USER='zabbix'   -e MYSQL_PASSWORD='zabbix_pwd'   -e MYSQL_ROOT_PASSWORD='root_pwd'   --link mysql-server:mysql   --link zabbix-server-mysql:zabbix-server   -p 80:80   -d zabbix/zabbix-web-nginx-mysql:latest

9.3 關(guān)于zabbix API

關(guān)于zabbix API可以參考官方文檔:https://www.zabbix.com/documentation/3.4/zh/manual/api獲取token方法


		
			# 獲取token [root@docker02 ~]# curl -s -X POST -H 'Content-Type:application/json' -d ' { 'jsonrpc': '2.0', 'method': 'user.login', 'params': { 'user': 'Admin', 'password': 'zabbix' }, 'id': 1 }' http://10.0.0.100/api_jsonrpc.php {'jsonrpc':'2.0','result':'d3be707f9e866ec5d0d1c242292cbebd','id':1} 

10 docker 倉庫(registry)

10.1 創(chuàng)建一個(gè)普通倉庫

1、創(chuàng)建倉庫


		
			docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry

2、修改配置文件,使之支持http


		
			[root@docker01 ~]# cat /etc/docker/daemon.json  { 'registry-mirrors': ['https://registry.docker-cn.com'], 'insecure-registries': ['10.0.0.100:5000'] }

重啟docker讓修改生效


		
			[root@docker01 ~]# systemctl restart docker.service

3、修改鏡像標(biāo)簽


		
			[root@docker01 ~]# docker tag busybox:latest 10.0.0.100:5000/clsn/busybox:1.0 [root@docker01 ~]# docker images REPOSITORY           TAG         IMAGE ID      CREATED       SIZE centos6-ssh           latest       3c2b1e57a0f5    18 hours ago    393MB httpd              2.42e202f453940    6 days ago     179MB 10.0.0.100:5000/clsn/busybox  1.05b0d59026729    8 days ago     1.15MB

4、將新打標(biāo)簽的鏡像上傳鏡像到倉庫


		
			[root@docker01 ~]# docker push  10.0.0.100:5000/clsn/busybox

10.2 帶basic認(rèn)證的倉庫

1、安裝加密工具


		
			[root@docker01 clsn]# yum install httpd-tools -y

2、設(shè)置認(rèn)證密碼


		
			mkdir /opt/registry-var/auth/ -p htpasswd -Bbn clsn 123456 > /opt/registry-var/auth/htpasswd

3、啟動(dòng)容器,在啟動(dòng)時(shí)傳入認(rèn)證參數(shù)


		
			docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -e 'REGISTRY_AUTH=htpasswd' -e 'REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm' -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

4、使用驗(yàn)證用戶測(cè)試


		
			# 登陸用戶 [root@docker01 ~]# docker login 10.0.0.100:5000  Username: clsn  Password: 123456 Login Succeeded # 推送鏡像到倉庫 [root@docker01 ~]# docker push 10.0.0.100:5000/clsn/busybox  The push refers to repository [10.0.0.100:5000/clsn/busybox] 4febd3792a1f: Pushed 1.0: digest: sha256:4cee1979ba0bf7db9fc5d28fb7b798ca69ae95a47c5fecf46327720df4ff352d size: 527 #認(rèn)證文件的保存位置 [root@docker01 ~]# cat .docker/config.json  {  'auths': {    '10.0.0.100:5000': {      'auth': 'Y2xzbjoxMjM0NTY='    },    'https://index.docker.io/v1/': {      'auth': 'Y2xzbjpIenNAMTk5Ng=='    }  },  'HttpHeaders': {    'User-Agent': 'Docker-Client/17.12.0-ce (linux)'  } }

至此,一個(gè)簡(jiǎn)單的docker鏡像倉庫搭建完成

11 docker-compose編排工具

11.1 安裝docker-compose

安裝docker-compose


		
			# 下載pip軟件 yum install -y python2-pip # 下載 docker-compose pip install docker-compose

國內(nèi)開啟pip 下載加速:http://mirrors.aliyun.com/help/pypi


		
			mkdir ~/.pip/ cat > ~/.pip/pip.conf <<'EOF' [global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com EOF

11.2 編排啟動(dòng)鏡像

1、創(chuàng)建文件目錄


		
			[root@docker01 ~]# mkdir /opt/my_wordpress/ [root@docker01 ~]# cd /opt/my_wordpress/

2、編寫編排文件


		
			[root@docker01 my_wordpress]# vim docker-compose.yml version: '3' services:  db:   image: mysql:5.7   volumes:    - /data/db_data:/var/lib/mysql   restart: always   environment:    MYSQL_ROOT_PASSWORD: somewordpress    MYSQL_DATABASE: wordpress    MYSQL_USER: wordpress    MYSQL_PASSWORD: wordpress  wordpress:   depends_on:    - db   image: wordpress:latest   volumes:    - /data/web_data:/var/www/html   ports:    - '8000:80'   restart: always   environment:    WORDPRESS_DB_HOST: db:3306    WORDPRESS_DB_USER: wordpress    WORDPRESS_DB_PASSWORD: wordpress

3、啟動(dòng)


		
			[root@docker01 my_wordpress]# docker-compose up #啟動(dòng)方法:docker-compose up #后臺(tái)啟動(dòng)方法:docker-compose up -d

4、瀏覽器上訪問http://10.0.0.100:8000進(jìn)行wordpress的安裝即可

11.3 haproxy代理后端docker容器

1、修改編排腳本


		
			[root@docker01 my_wordpress]# cat docker-compose.yml  version: '3' services:  db:   image: mysql:5.7   volumes:    - /data/db_data:/var/lib/mysql   restart: always   environment:    MYSQL_ROOT_PASSWORD: somewordpress    MYSQL_DATABASE: wordpress    MYSQL_USER: wordpress    MYSQL_PASSWORD: wordpress  wordpress:   depends_on:    - db   image: wordpress:latest   volumes:    - /data/web_data:/var/www/html   ports:    - '80'   restart: always   environment:    WORDPRESS_DB_HOST: db:3306    WORDPRESS_DB_USER: wordpress    WORDPRESS_DB_PASSWORD: wordpress

2、同時(shí)啟動(dòng)兩臺(tái)wordpress


		
			[root@docker01 my_wordpress]# docker-compose scale wordpress=2  WARNING: The scale command is deprecated. Use the up command with the --scale flag instead. Starting mywordpress_wordpress_1 ... done Creating mywordpress_wordpress_2 ... done

3、安裝haproxy


		
			[root@docker01 ~]# yum install haproxy -y

4、修改haproxy配置文件關(guān)于配置文件的詳細(xì)說明,參考:https://www.cnblogs.com/MacoLee/p/5853413.html


		
			[root@docker01 ~]#cp /etc/haproxy/haproxy.cfg{,.bak} [root@docker01 ~]# vim /etc/haproxy/haproxy.cfg global  log127.0.0.1 local2  chroot   /var/lib/haproxy  pidfile   /var/run/haproxy.pid  maxconn   4000  user    haproxy  group    haproxy  daemon  stats socket /var/lib/haproxy/stats level admin #支持命令行控制 defaults  mode          http  log           global  option         httplog  option         dontlognull  option http-server-close  option forwardfor    except 127.0.0.0/8  option         redispatch  retries         3  timeout http-request  10s  timeout queue1m  timeout connect     10s  timeout client     1m  timeout server     1m  timeout http-keep-alive 10s  timeout check      10s  maxconn         3000 listen stats  mode http  bind 0.0.0.0:8888  stats enable  stats uri   /haproxy-status  stats auth  admin:123456 frontend frontend_www_example_com  bind 10.0.0.100:8000  mode http  option httplog  log global  default_backend backend_www_example_com backend backend_www_example_com  option forwardfor header X-REAL-IP  option httpchk HEAD / HTTP/1.0  balance roundrobin  server web-node1 10.0.0.100:32768 check inter 2000 rise 30 fall 15  server web-node2 10.0.0.100:32769 check inter 2000 rise 30 fall 15

5、啟動(dòng)haproxy


		
			systemctl start haproxy systemctl enable haproxy

6、使用瀏覽器訪問hapeoxy監(jiān)聽的8000端口可以看到負(fù)載的情況

7、使用瀏覽器訪問 http://10.0.0.100:8888/haproxy-status可以看到后端節(jié)點(diǎn)的監(jiān)控狀況,

11.4 安裝socat 直接操作socket控制haproxy

1、安裝軟件


		
			yum install socat.x86_64 -y

2、查看幫助


		
			[root@docker01 web_data]# echo 'help'|socat stdio /var/lib/haproxy/stats

3、下線后端節(jié)點(diǎn)


		
			echo 'disable server backend_www_example_com/web-node2'|socat stdio /var/lib/haproxy/stats

4、上線后端節(jié)點(diǎn)


		
			echo 'enable server backend_www_example_com/web-node3'|socat stdio /var/lib/haproxy/stats

5、編寫php測(cè)試頁,放到/data/web_data下,在瀏覽器中訪問可以查看當(dāng)前的節(jié)點(diǎn)


		
			[root@docker01 web_data]# vim check.php       PHP測(cè)試        '

Hello World

'; ?> '訪問的服務(wù)器地址是:'.''.$_SERVER['SERVER_ADDR'].''.'
'
; echo'訪問的服務(wù)器域名是:'.''.$_SERVER['SERVER_NAME'].''.'
'
; ?>

12 重啟docker服務(wù),容器全部退出的解決辦法

12.1 在啟動(dòng)是指定自動(dòng)重啟


		
			docker run --restart=always

12.2 修改docker默認(rèn)配置文件


		
			# 添加上下面這行 'live-restore': true

docker server配置文件/etc/docker/daemon.json參考


		
			[root@docker02 ~]# cat /etc/docker/daemon.json  { 'registry-mirrors': ['https://registry.docker-cn.com'], 'graph': '/opt/mydocker', # 修改數(shù)據(jù)的存放目錄到/opt/mydocker/,原/var/lib/docker/ 'insecure-registries': ['10.0.0.100:5000'], 'live-restore': true }

重啟生效,只對(duì)在此之后啟動(dòng)的容器生效


		
			[root@docker01 ~]# systemctl restart docker.service

13 Docker網(wǎng)絡(luò)類型

13.1 docker的網(wǎng)絡(luò)類型

類型 說明
None 不為容器配置任何網(wǎng)絡(luò)功能,沒有網(wǎng)絡(luò) --net=none
Container 與另一個(gè)運(yùn)行中的容器共享Network Namespace,--net=container:containerID
Host 與主機(jī)共享Network Namespace,--net=host
Bridge Docker設(shè)計(jì)的NAT網(wǎng)絡(luò)模型(默認(rèn)類型)

Bridge默認(rèn)docker網(wǎng)絡(luò)隔離基于網(wǎng)絡(luò)命名空間,在物理機(jī)上創(chuàng)建docker容器時(shí)會(huì)為每一個(gè)docker容器分配網(wǎng)絡(luò)命名空間,并且把容器IP橋接到物理機(jī)的虛擬網(wǎng)橋上。

13.2 不為容器配置網(wǎng)絡(luò)功能

此模式下創(chuàng)建容器是不會(huì)為容器配置任何網(wǎng)絡(luò)參數(shù)的,如:容器網(wǎng)卡、IP、通信路由等,全部需要自己去配置。


		
			[root@docker01 ~]# docker run -it --network none busybox:latest /bin/sh  / # ip a 1: lo:  mtu 65536 qdisc noqueue  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo    valid_lft forever preferred_lft forever

13.3 與其他容器共享網(wǎng)絡(luò)配置(Container)

此模式和host模式很類似,只是此模式創(chuàng)建容器共享的是其他容器的IP和端口而不是物理機(jī),此模式容器自身是不會(huì)配置網(wǎng)絡(luò)和端口,創(chuàng)建此模式容器進(jìn)去后,你會(huì)發(fā)現(xiàn)里邊的IP是你所指定的那個(gè)容器IP并且端口也是共享的,而且其它還是互相隔離的,如進(jìn)程等。


		
			[root@docker01 ~]# docker run -it --network container:mywordpress_db_1 busybox:latest /bin/sh  / # ip a 1: lo:  mtu 65536 qdisc noqueue  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo    valid_lft forever preferred_lft forever 105: eth0@if106:  mtu 1500 qdisc noqueue  link/ether 02:4212:00:03 brd ffffff:ff  inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0    valid_lft forever preferred_lft forever

13.4 使用宿主機(jī)網(wǎng)絡(luò)

此模式創(chuàng)建的容器沒有自己獨(dú)立的網(wǎng)絡(luò)命名空間,是和物理機(jī)共享一個(gè)Network Namespace,并且共享物理機(jī)的所有端口與IP,并且這個(gè)模式認(rèn)為是不安全的。


		
			[root@docker01 ~]# docker run -it --network host busybox:latest /bin/sh

13.5 查看網(wǎng)絡(luò)列表


		
			[root@docker01 ~]# docker network list  NETWORK ID     NAME         DRIVER       SCOPE b15e8a720d3b    bridge        bridge       local 345d65b4c2a0    host         host        local bc5e2a32bb55    mywordpress_default  bridge       local ebf76eea91bb    none         null        local

13.6 用PIPEWORK為docker容器配置獨(dú)立IP

參考文檔:http://blog.csdn.net/design321/article/details/48264825官方網(wǎng)站:https://github.com/jpetazzo/pipework宿主環(huán)境:centos7.21、安裝pipework


		
			wget https://github.com/jpetazzo/pipework/archive/master.zip unzip master.zip cp pipework-master/pipework /usr/local/bin/ chmod +x /usr/local/bin/pipework

2、配置橋接網(wǎng)卡安裝橋接工具


		
			yum install bridge-utils.x86_64 -y

修改網(wǎng)卡配置,實(shí)現(xiàn)橋接


		
			# 修改eth0配置,讓br0實(shí)現(xiàn)橋接 [root@docker01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0  TYPE=Ethernet BOOTPROTO=static NAME=eth0 DEVICE=eth0 ONBOOT=yes BRIDGE=br0 [root@docker01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 TYPE=Bridge BOOTPROTO=static NAME=br0 DEVICE=br0 ONBOOT=yes IPADDR=10.0.0.100 NETMASK=255.255.255.0 GATEWAY=10.0.0.254 DNS1=223.5.5.5 # 重啟網(wǎng)絡(luò) [root@docker01 ~]# /etc/init.d/network restart

3、運(yùn)行一個(gè)容器鏡像測(cè)試:


		
			pipework br0 $(docker run -d -it -p 6880:80 --name httpd_pw httpd) 10.0.0.220/24@10.0.0.254

在其他主機(jī)上測(cè)試端口及連通性


		
			[root@docker01 ~]# curl 10.0.0.220 

It works!

[root@docker01 ~]# ping 10.0.0.220 -c 1 PING 10.0.0.220 (10.0.0.220) 56(84) bytes of data. 64 bytes from 10.0.0.220: icmp_seq=1 ttl=64 time=0.043 ms

4、再運(yùn)行一個(gè)容器,設(shè)置網(wǎng)路類型為none:


		
			pipework br0 $(docker run -d -it --net=none --name test httpd:2.4) 10.0.0.221/24@10.0.0.254

進(jìn)行訪問測(cè)試


		
			[root@docker01 ~]# curl 10.0.0.221 

It works!

5、重啟容器后需要再次指定:


		
			pipework br0 testduliip 172.16.146.113/24@172.16.146.1 pipework br0 testduliip01 172.16.146.112/24@172.16.146.1

Dcoker跨主機(jī)通信之overlay可以參考:http://www.cnblogs.com/CloudMan6/p/7270551.html

1.13.7 Docker跨主機(jī)通信之macvlan

創(chuàng)建網(wǎng)絡(luò)


		
			[root@docker01 ~]# docker network create --driver macvlan --subnet 10.1.0.0/24 --gateway 10.1.0.254 -o parent=eth0 macvlan_1 33a1f41dcc074f91b5bd45e7dfedabfb2b8ec82db16542f05213839a119b62ca

設(shè)置網(wǎng)卡為混雜模式


		
			ip link set eth0 promisc on

創(chuàng)建使用macvlan網(wǎng)絡(luò)容器


		
			[root@docker02 ~]# docker run -it --network macvlan_1 --ip=10.1.0.222 busybox /bin/sh

14 docker企業(yè)級(jí)鏡像倉庫harbor

容器管理


		
			[root@docker01 harbor]# pwd /opt/harbor [root@docker01 harbor]# docker-compose stop

1、安裝docker、docker-compose下載 harbor


		
			cd /opt && https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.3.0.tgz tar xf harbor-offline-installer-v1.3.0.tgz

2、修改主機(jī)及web界面密碼


		
			[root@docker01 harbor]# vim harbor.cfg   ···  hostname = 10.0.0.100  harbor_admin_password = Harbor12345   ··· 

3、執(zhí)行安裝腳本


		
			[root@docker01 harbor]# ./install.sh

瀏覽器訪問 http://10.0.0.11

添加一個(gè)項(xiàng)目
4、鏡像推送到倉庫的指定項(xiàng)目


		
			[root@docker02 ~]# docker tag centos:6.8 10.0.0.100/clsn/centos6.8:1.0 [root@docker02 ~]#  [root@docker02 ~]# docker images  REPOSITORY         TAG         IMAGE ID      CREATED       SIZE busybox           latest       5b0d59026729    8 days ago     1.15MB 10.0.0.100/clsn/centos6.81.06704d778b3ba    2 months ago    195MB centos           6.86704d778b3ba    2 months ago    195MB [root@docker02 ~]# docker login 10.0.0.100 Username: admin Password: Login Succeeded

5、推送鏡像


		
			[root@docker02 ~]# docker push 10.0.0.100/clsn/centos6.8  The push refers to repository [10.0.0.100/clsn/centos6.8] e00c9229b481: Pushing 13.53MB/194.5MB

6、在web界面里查看

14.1 使用容器的建議

  1. 不要以拆分方式進(jìn)行應(yīng)用程序發(fā)布
  2. 不要?jiǎng)?chuàng)建大型鏡像
  3. 不要在單個(gè)容器中運(yùn)行多個(gè)進(jìn)程
  4. 不要再鏡像內(nèi)保存憑證,不要依賴IP地址
  5. 以非root用戶運(yùn)行進(jìn)程
  6. 不要使用“最新”標(biāo)簽
  7. 不要利用運(yùn)行中的容器創(chuàng)建鏡像
  8. 不要使用單層鏡像
  9. 不要將數(shù)據(jù)存放在容器內(nèi)

14.2 關(guān)于Docker容器的監(jiān)控

容器的基本信息包括容器的數(shù)量、ID、名稱、鏡像、啟動(dòng)命令、端口等信息容器的運(yùn)行狀態(tài)統(tǒng)計(jì)各狀態(tài)的容器的數(shù)量,包括運(yùn)行中、暫停、停止及異常退出容器的用量信息統(tǒng)計(jì)容器的CPU使用率、內(nèi)存使用量、塊設(shè)備I/O使用量、網(wǎng)絡(luò)使用情況等資源的使用情況。
編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10824

    瀏覽量

    211140
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11225

    瀏覽量

    208920
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    454

    瀏覽量

    11814

原文標(biāo)題:收藏:Docker 從入門到精通

文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    《TSMaster開發(fā)入門精通》——?jiǎng)?chuàng)作者背后的故事...

    背后的故事由汽車行業(yè)暢銷書作者楊金升老師牽頭,同星智能研發(fā)團(tuán)隊(duì)和應(yīng)用支持團(tuán)隊(duì)全力參與的《TSMaster開發(fā)入門精通》書籍已由清華大學(xué)出版社印付。此書一經(jīng)上架,就獲得汽車行業(yè)人士的
    的頭像 發(fā)表于 09-02 08:01 ?281次閱讀
    《TSMaster開發(fā)<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>精通</b>》——?jiǎng)?chuàng)作者背后的故事...

    新書推薦 | TSMaster開發(fā)入門精通

    書名:TSMaster開發(fā)入門精通書號(hào):9787302667193作者:楊金升劉矗劉功申定價(jià):99.80元《CANoe開發(fā)
    的頭像 發(fā)表于 08-30 12:37 ?377次閱讀
    新書推薦 | TSMaster開發(fā)<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>精通</b>

    重磅!翹首以盼的《TSMaster開發(fā)入門精通》正式出版!

    TSMaster軟件,大家翹首以盼的《TSMaster開發(fā)入門精通》書籍于8月正式出版發(fā)售!《TSMaster開發(fā)
    的頭像 發(fā)表于 08-10 08:21 ?409次閱讀
    重磅!翹首以盼的《TSMaster開發(fā)<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>精通</b>》正式出版!

    手動(dòng)構(gòu)建Docker鏡像的方法

    不推薦使用docker commit命令,而應(yīng)該使用更靈活、更強(qiáng)大的dockerfile來構(gòu)建docker鏡像。
    的頭像 發(fā)表于 08-05 15:30 ?450次閱讀
    手動(dòng)構(gòu)建<b class='flag-5'>Docker</b>鏡像的方法

    ModBus TCP協(xié)議攻略:入門精通

    (ModBusRTU),現(xiàn)已發(fā)展采用TCP/IP等現(xiàn)代技術(shù),在樓宇自動(dòng)化、能源管理和工業(yè)自動(dòng)化等領(lǐng)域發(fā)揮關(guān)鍵作用。其簡(jiǎn)單性、魯棒性、易用性、開放性和集成能力使其成為
    的頭像 發(fā)表于 07-12 08:21 ?1984次閱讀
    ModBus TCP協(xié)議攻略:<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>精通</b>!

    關(guān)于Docker 的清理命令集錦

    這篇文章主要介紹了Docker 清理命令集錦,需要的朋友可以參考下 復(fù)制代碼代碼如下: docker kill $(docker ps -a -q) ?刪除所有已經(jīng)停止的容器 復(fù)制代碼代碼如下
    的頭像 發(fā)表于 06-13 15:56 ?317次閱讀

    LM358雙路運(yùn)算放大器工作原理詳解:入門精通

    LM358雙路運(yùn)算放大器的工作原理,幫助您入門精通,全部掌控這款芯片的特性與應(yīng)用。 一、LM358雙路運(yùn)算放大器概述 LM358是一款雙路標(biāo)準(zhǔn)運(yùn)算放大器,內(nèi)部包含兩個(gè)單獨(dú)的運(yùn)算放大
    的頭像 發(fā)表于 06-05 15:19 ?2555次閱讀

    [RK3588入門精通]系列內(nèi)容專欄目錄及介紹

    [RK3588入門精通] 專欄目錄及介紹
    的頭像 發(fā)表于 04-10 10:40 ?625次閱讀
    [RK3588<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>精通</b>]系列內(nèi)容專欄目錄及介紹

    精通Docker網(wǎng)絡(luò):Bridge驅(qū)動(dòng)深度解析

    除了使用 docker0 網(wǎng)橋外,用戶還可以使用自定義的網(wǎng)橋,然后通過 --bridge=BRIDGE 參數(shù)傳遞給 docker daemon。
    的頭像 發(fā)表于 03-31 15:58 ?1378次閱讀
    <b class='flag-5'>精通</b><b class='flag-5'>Docker</b>網(wǎng)絡(luò):Bridge驅(qū)動(dòng)深度解析

    ARM嵌入式Linux 系統(tǒng)開發(fā)入門精通

    ARM嵌入式Linux 系統(tǒng)開發(fā)入門精通
    發(fā)表于 03-10 18:44

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    什么是Docker? (1)Docker的架構(gòu) Docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可打包他們的應(yīng)用以及依賴包一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windo
    的頭像 發(fā)表于 03-07 13:48 ?759次閱讀
    ARM平臺(tái)實(shí)現(xiàn)<b class='flag-5'>Docker</b>容器技術(shù)

    PLC編程:入門精通的10個(gè)建議

    在監(jiān)控系統(tǒng)中,我們經(jīng)常需要在“手動(dòng)”和“自動(dòng)”等控制模式之間進(jìn)行切換。在程序設(shè)計(jì)中,我們可以使用MOV指令來實(shí)現(xiàn)這一需求。例如,當(dāng)選擇“手動(dòng)”模式時(shí),將常數(shù)1MOV一個(gè)寄存器VB10中
    發(fā)表于 01-21 10:08 ?4988次閱讀
    PLC編程:<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>精通</b>的10個(gè)建議

    快速了解STM32的ADC功能,入門精通

    快速了解STM32的ADC功能,入門精通 1.關(guān)于ADC輸入通道與GPIO口的輸入關(guān)系需要查看STM32芯片手冊(cè)(p31)而非數(shù)據(jù)手冊(cè)。 2.外部觸發(fā)源指的是觸發(fā)ADC采樣的觸發(fā)信
    發(fā)表于 01-15 09:16

    如何利用樹莓派安裝DockerDocker-compose呢?

    本文主要演示了樹莓派如何安裝DockerDocker-compose的過程。
    的頭像 發(fā)表于 12-14 16:19 ?2770次閱讀
    如何利用樹莓派安裝<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker</b>-compose呢?

    javaweb入門實(shí)戰(zhàn)

    JavaWeb是一門使用Java語言開發(fā)Web應(yīng)用程序的技術(shù),它廣泛應(yīng)用于各種網(wǎng)站和在線應(yīng)用程序的開發(fā)。對(duì)于想要學(xué)習(xí)和使用JavaWeb技術(shù)的開發(fā)者來說,入門實(shí)戰(zhàn)這條路并不是很容易,需要有系統(tǒng)性
    的頭像 發(fā)表于 12-03 11:44 ?1477次閱讀