摘要:容器類似虛擬機,可以支持的操作包括啟動,停止,刪除等。交互式可以分配一個虛擬終端并關(guān)聯(lián)到任何容器的標準輸入上,例如運行一個一次性交互。
Docker Docker 核心概念及入門 什么是docker
Docker是一個開放源代碼軟件項目,讓應(yīng)用程序布署在軟件貨柜下的工作可以自動化進行,借此在Linux操作系統(tǒng)上,提供一個額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動管理機制。Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心名字空間(namespaces),來創(chuàng)建獨立的容器(containers)。這可以在單一Linux實體下運作,避免啟動一個虛擬機造成的額外負擔。Linux核心對名字空間的支持完全隔離了工作環(huán)境中應(yīng)用程序的視野,包括進程樹、網(wǎng)絡(luò)、用戶ID與掛載文件系統(tǒng),而核心的cgroup提供資源隔離,包括CPU、存儲器、block I/O與網(wǎng)絡(luò)。從0.9版本起,Dockers在使用抽象虛擬是經(jīng)由libvirt的LXC與systemd - nspawn提供界面的基礎(chǔ)上,開始包括libcontainer庫做為以自己的方式開始直接使用由Linux核心提供的虛擬化的設(shè)施,
Docker 版本簡介Docker有兩個版本:
社區(qū)版(CE)
企業(yè)版(EE)
Docker Community Edition(CE)非常適合希望開始使用Docker并嘗試使用基于容器的應(yīng)用程序的個人開發(fā)人員和小型團隊。
Docker企業(yè)版(EE)專為企業(yè)開發(fā)和IT團隊而設(shè)計,他們可以在生產(chǎn)中大規(guī)模構(gòu)建,發(fā)布和運行業(yè)務(wù)關(guān)鍵型應(yīng)用程序
功能 | 社區(qū)版 | 企業(yè)版基礎(chǔ)版 | 企業(yè)版標準 | 企業(yè)版高級版 |
---|---|---|---|---|
容器引擎和內(nèi)置編排,網(wǎng)絡(luò),安全性 | 是 | 是 | 是 | 是 |
經(jīng)過認證的基礎(chǔ)設(shè)施,插件和ISV容器 | 否 | 是 | 是 | 是 |
圖像管理 | 否 | 否 | 是 | 是 |
容器應(yīng)用管理 | 否 | 否 | 是 | 是 |
圖像安全掃描 | 否 | 否 | 否 | 是 |
容器技術(shù)
Linux容器技術(shù)很早就有了,比較有名的是被集成到主流Linux內(nèi)核中的LXC項目。容器通過對操作系統(tǒng)的資源訪問進行限制,構(gòu)建成獨立的資源池,讓應(yīng)用運行在一個相對隔離的空間里,同時容器間也可以進行通信。容器技術(shù)對比虛擬化技術(shù),容器比虛擬化更輕量級,對資源的消耗小很多。容器操作也更快捷,啟動和停止都要比虛擬機快。但Docker容器需要與主機共享操作系統(tǒng)內(nèi)核,不能像虛擬機那樣運行獨立的內(nèi)核。
Docker是一個基于LXC技術(shù)構(gòu)建的容器引擎,基于GO語言開發(fā),遵循Apache2.0協(xié)議開源。Docker的發(fā)展得益于為使用者提供了更好的容器操作接口。包括一系列的容器,鏡像,網(wǎng)絡(luò)等管理工具,可以讓用戶簡單的創(chuàng)建和使用容器。
Docker支持將應(yīng)用打包進一個可以移植的容器中,重新定義了應(yīng)用開發(fā),測試,部署上線的過程,核心理念就是 Build once, Run anywhere。Docker容器技術(shù)的典型應(yīng)用場景是開發(fā)運維上提供持續(xù)集成和持續(xù)部署的服務(wù)。
鏡像
Docker的鏡像概念類似于虛擬機里的鏡像,是一個只讀的模板,一個獨立的文件系統(tǒng),包括運行容器所需的數(shù)據(jù),可以用來創(chuàng)建新的容器。鏡像可以基于Dockerfile構(gòu)建,Dockerfile是一個描述文件,里面包含若干條命令,每條命令都會對基礎(chǔ)文件系統(tǒng)創(chuàng)建新的層次結(jié)構(gòu)。用戶可以通過編寫Dockerfile創(chuàng)建新的鏡像,也可以直接從類似github的Docker Hub上下載鏡像使用。
容器
Docker容器是由Docker鏡像創(chuàng)建的運行實例。Docker容器類似虛擬機,可以支持的操作包括啟動,停止,刪除等。每個容器間是相互隔離的,但隔離的效果比不上虛擬機。容器中會運行特定的應(yīng)用,包含特定應(yīng)用的代碼及所需的依賴文件。
在Docker容器中,每個容器之間的隔離使用Linux的 CGroups 和 Namespaces技術(shù)實現(xiàn)的。其中 CGroups 對CPU,內(nèi)存,磁盤等資源的訪問限制,Namespaces 提供了環(huán)境的隔離。
倉庫
如果你使用過 git 和 github 就很容易理解Docker的倉庫概念。Docker倉庫相當于一個 github 上的代碼庫。
Docker 倉庫是用來包含鏡像的位置,Docker提供一個注冊服務(wù)器(Registry)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。Docker運行中使用的默認倉庫是 Docker Hub 公共倉庫。倉庫支持的操作類似 git,創(chuàng)建了新的鏡像后,我們可以 push 提交到倉庫,也可以從指定倉庫 pull 拉取鏡像到本地。
Docker有下面這些組成
1.Docker 服務(wù)器守護程序(server daemon),用于管理所有的容器。
2.Docker 命令行客戶端,用于控制服務(wù)器守護程序。
3.Docker 鏡像:查找和瀏覽 docker 容器鏡像。
Docker特性
文件系統(tǒng)隔離:每個進程容器運行在完全獨立的根文件系統(tǒng)里。
資源隔離:可以使用cgroup為每個進程容器分配不同的系統(tǒng)資源,例如CPU和內(nèi)存。
網(wǎng)絡(luò)隔離:每個進程容器運行在自己的網(wǎng)絡(luò)命名空間里,擁有自己的虛擬接口和IP地址。
寫時復制:采用寫時復制方式創(chuàng)建根文件系統(tǒng),這讓部署變得極其快捷,并且節(jié)省內(nèi)存和硬盤空間。
日志記錄:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用于實時檢索或批量檢索。
變更管理:容器文件系統(tǒng)的變更可以提交到新的映像中,并可重復使用以創(chuàng)建更多的容器。無需使用模板或手動配置。
交互式Shell:Docker可以分配一個虛擬終端并關(guān)聯(lián)到任何容器的標準輸入上,例如運行一個一次性交互shell。
Docker兩個基礎(chǔ)概念images與container
Container和Image 在Docker的世界里,Image是指一個只讀的層(Layer),這里的層是AUFS里的概念,最直觀的方式就是看一下docker官方給出的圖:
Docker使用了一種叫AUFS的文件系統(tǒng),這種文件系統(tǒng)可以讓你一層一層地疊加修改你的文件,最底下的文件系統(tǒng)是只讀的,如果需要修改文件,AUFS 會增加一個可寫的層(Layer),這樣有很多好處,例如不同的Container可以共享底層的只讀文件系統(tǒng)(同一個Kernel),使得你可以跑N多 個Container而不至于你的硬盤被擠爆了!這個只讀的層就是Image!而如你所看到的,一個可寫的層就是Container。
那Image和Container的區(qū)別是什么?很簡單,他們的區(qū)別僅僅是一個是只讀的層,一個是可寫的層,你可以使用docker commit 命令,將你的Container變成一個Image,也就是提交你所運行的Container的修改內(nèi)容,變成一個新的只讀的Image,這非常類似于git commit命令。
前置準備和安裝Docker(基于CentOS 7 安裝 Docker CE)Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,安裝前需要驗證 CentOS 版本是否支持 Docker。
# 命令查看你當前的內(nèi)核版本 $ uname -r # 更新yum $ sudo yum makecache fast # 安裝yum-utils $ sudo yum install yum-utils # 使用以下命令設(shè)置穩(wěn)定存儲庫 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 卸載舊版本(如果安裝過舊版本的話) $ sudo yum remove docker docker-common docker-selinux docker-engine # 安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅(qū)動依賴的 $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 安裝Docker $ sudo yum install docker-ce # 啟動、停止、重啟Docker服務(wù) $ systemctl start | stop | restart docker.service # 設(shè)置開機啟動、關(guān)閉服務(wù) $ systemctl enable | disable docker.service # 驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了) $ docker version [root@localhost ~]# docker version Client: Version: 18.03.0-ce API version: 1.37 Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:09:15 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.0-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:13:03 2018 OS/Arch: linux/amd64 Experimental: false [root@localhost ~]# # docker通過運行hello-world 映像驗證是否已正確安裝。 $ sudo docker run hello-worldDocker的常用操作
# 搜索鏡像(我這里搜索的是tomcat的鏡像) $ docker search tomcat # 下載鏡像(在搜索出來的鏡像列表中選擇一個下載,我這里下載的是官方提供的centos鏡像,速度會有點慢,耐心等待) $ docker pull tomcat # 列出本機的鏡像 $ docker images # 基于image創(chuàng)建一個容器,運行完畢后并退出 $ docker run [centos] /bin/echo "Hello world" # 運行一個交互式容器,-t表示指定一個容器內(nèi)的偽tty。 # -i表示創(chuàng)建一個交互式連接,命令運行后,將會進入shell交互式界面,可執(zhí)行任意的命令. $ docker run -t -i centos /bin/bash # 創(chuàng)建一個帶名字的容器 $ docker run -d --name myweb centos /bin/bash # 開始/停止/強制停止/重啟一個的容器 $ docker start/stop/kill/restart [container] # 刪除一個容器 $ docker rm [container] # 進入容器內(nèi)容 $ docker exec -it [container] /bin/bash # 列出正在運行的容器,[-a]列出所有狀態(tài)下的容器,[-l]只列出最后一個啟動的容器。 $ docker ps [-a] [-l]docker容器的常用軟件安裝過程 docker中運行mysql
# -p 3306:3306:表示在這個容器中使用3306端口(第二個)映射到本機的端口號也為3306(第一個) # 創(chuàng)建一個容器 docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[password] -v /xxx/mysql:/var/lib/mysql -v /etc/my.cnf:/etc/my.cnf mysql:5.7.23 # 創(chuàng)建用戶 create user "user"@"%" identified by "password"; # 授權(quán) grant replication slave on *.* to "user"@"%"; # 刷新 flush privileges;docker中運行redis
# 運行一個docker容器 docker run -d --name redis -p 6379:6379 -v /xxx/redis:/data redis redis-server --appendonly yes --requirepass "[password]" # 參數(shù)詳解 docker run # 端口映射 宿主機:容器 -p 6379:6379 # 映射數(shù)據(jù)目錄 rw 為讀寫 -v /xxx/data:/data:rw # 掛載配置文件 ro 為readonly -v /xxx/conf/redis.conf:/etc/redis/redis.conf:ro # 給與一些權(quán)限 --privileged=true # 給容器起個名字 --name redis # 開啟數(shù)據(jù)持久化 --appendonly yes # deamon 運行 服務(wù)使用指定的配置文件 -d redis redis-server /xxx/conf/redis.confdocker中運行nexus
docker run -d -p 8080:8080 --name nexus -v /xxx/nexus:/var/nexus-data --restart=always sonatype/nexus3docker中運行Jenkins
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /xxx/jenkins:/var/jenkins_home jenkinsdocker中安裝gitlab
docker run --detach --hostname 120.76.77.230 --publish 444:443 --publish 8088:8088 --publish 25:22 --name gitlab --restart always --volume /xxx/gitlab/config:/etc/gitlab --volume /xxx/gitlab/logs:/var/log/gitlab --volume /xxx/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/27793.html
摘要:在之前公眾號的數(shù)人云工程師手記基于的集群管理開發(fā)實踐對的服務(wù)發(fā)現(xiàn)及負載均衡有詳細的介紹。服務(wù)名稱為服務(wù)命名,必須為英文或數(shù)字。 本文是數(shù)人云9月22日線上微信群分享的文章實錄。數(shù)人云容器管理面板Crane開源以來,很多小伙伴對它還不是非常了解,數(shù)人云工程師金鑫從Crane技術(shù)背景、環(huán)境準備和使用步驟等方面為大家做了詳細的介紹,并整理大家常見的問題逐一進行了解答。 引言 Docker1....
摘要:是一個基于的命令行工具,可使用和來制作精美的電子書,并非關(guān)于的教程。使用制作電子書,必備兩個文件和。今天,我就教大家如何使用快速制作應(yīng)用,該應(yīng)用是基于鏡像制作,可以隨意運行在任何一個安裝有的主機上。首先安裝安裝完成后,地址欄輸入即可訪問。 GitBook 是一個基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 來制作精美的電子書,GitBook 并...
閱讀 1551·2021-11-25 09:43
閱讀 2332·2019-08-30 15:55
閱讀 1465·2019-08-30 13:08
閱讀 2666·2019-08-29 10:59
閱讀 810·2019-08-29 10:54
閱讀 1551·2019-08-26 18:26
閱讀 2545·2019-08-26 13:44
閱讀 2653·2019-08-23 18:36