摘要:由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。持續(xù)交付和部署對開發(fā)和運(yùn)維人員來說,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行。如果安裝了這些版本,先卸載它們,以及相關(guān)的依賴項。設(shè)置源安裝所需要的包。
1. 背景 1.1 概述
Docker 使用 Google 公司推出的 Go 語言 進(jìn)行開發(fā)實現(xiàn),基于 Linux 內(nèi)核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術(shù),對進(jìn)程進(jìn)行封裝隔離,屬于 操作 系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容 器。最初實現(xiàn)是基于 LXC,從 0.7 版本以后開始去除 LXC,轉(zhuǎn)而使用自行開發(fā)的 libcontainer,從 1.11 開始,則進(jìn)一步演進(jìn)為使用 runC 和 containerd。
Docker 在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極 大的簡化了容器的創(chuàng)建和維護(hù)。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷。
1.2 為什么要使用 Docker作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢。
1. 更高效的利用系統(tǒng)資源由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開銷,Docker 對系統(tǒng)資源的利用 率更高。無論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高 效。因此,相比虛擬機(jī)技術(shù),一個相同配置的主機(jī),往往可以運(yùn)行更多數(shù)量的應(yīng)用。
2. 更快速的啟動時間傳統(tǒng)的虛擬機(jī)技術(shù)啟動應(yīng)用服務(wù)往往需要數(shù)分鐘,而 Docker 容器應(yīng)用,由于直接運(yùn)行于宿主 內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到秒級、甚至毫秒級的啟動時間。大大的節(jié)約 了開發(fā)、測試、部署的時間。
3. 一致的運(yùn)行環(huán)境開發(fā)過程中一個常見的問題是環(huán)境一致性問題。由于開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境不一 致,導(dǎo)致有些 bug 并未在開發(fā)過程中被發(fā)現(xiàn)。而 Docker 的鏡像提供了除內(nèi)核外完整的運(yùn)行 時環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性,從而不會再出現(xiàn) 「這段代碼在我機(jī)器上沒問題啊」 這 類問題。
4. 持續(xù)交付和部署對開發(fā)和運(yùn)維(DevOps)人員來說,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn) 行。
使用 Docker 可以通過定制應(yīng)用鏡像來實現(xiàn)持續(xù)集成、持續(xù)交付、部署。開發(fā)人員可以通過 Dockerfile 來進(jìn)行鏡像構(gòu)建,并結(jié)合 持續(xù)集成(Continuous Integration) 系統(tǒng)進(jìn)行集成測試, 而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合 持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進(jìn)行自動部署。
而且使用 Dockerfile 使鏡像構(gòu)建透明化,不僅僅開發(fā)團(tuán)隊可以理解應(yīng)用運(yùn)行環(huán)境,也方便 運(yùn)維團(tuán)隊理解應(yīng)用運(yùn)行所需條件,幫助更好的生產(chǎn)環(huán)境中部署該鏡像。
5. 更輕松的遷移由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易。Docker 可以在很多平臺 上運(yùn)行,無論是物理機(jī)、虛擬機(jī)、公有云、私有云,甚至是筆記本,其運(yùn)行結(jié)果是一致的。 因此用戶可以很輕易的將在一個平臺上運(yùn)行的應(yīng)用,遷移到另一個平臺上,而不用擔(dān)心運(yùn)行 環(huán)境的變化導(dǎo)致應(yīng)用無法正常運(yùn)行的情況。
6. 更輕松的維護(hù)和擴(kuò)展Docker 使用的分層存儲以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的 維護(hù)更新更加簡單,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得非常簡單。此外,Docker 團(tuán)隊同各 個開源項目團(tuán)隊一起維護(hù)了一大批高質(zhì)量的 官方鏡像,既可以直接在生產(chǎn)環(huán)境使用,又可以 作為基礎(chǔ)進(jìn)一步定制,大大的降低了應(yīng)用服務(wù)的鏡像制作成本。
7. 對比傳統(tǒng)虛擬機(jī)總結(jié)特性 | 容器 | 虛擬機(jī) |
---|---|---|
啟動 | 秒級 | 分鐘級 |
硬盤使用 | 一般為MB | 一般為GB |
性能 | 接近原生 | 弱于 |
系統(tǒng)支持量 | 單機(jī)支持上千個容器 | 一般幾十個 |
Cent OS 7
Docker 18.03.0-ce
2. 卸載舊版本老版本的Docker被稱為docker或docker-engine。如果安裝了這些版本,先卸載它們,以及相關(guān)的依賴項。
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine3. 安裝Docker 3.1 安裝Docker yum源
在新主機(jī)上首次安裝Docker CE之前,您需要設(shè)置Docker的yum源。之后,您可以從存儲庫安裝和更新Docker。
設(shè)置源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo3.2 安裝 Docker CE
sudo yum install docker-ce
已安裝Docker,但未啟動。
sudo systemctl start docker
由于國內(nèi)的網(wǎng)絡(luò)原因需要使用阿里的鏡像加速器,登錄自己的阿里云官網(wǎng),找到鏡像加速器,根據(jù)提示進(jìn)行配置
sudo docker run hello-world
輸入如下
Unable to find image "hello-world:latest" locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
輸出如下
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 # Docker-Engine版本 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
輸出如下
Containers: 0 # 容器數(shù) Running: 0 # 運(yùn)行容器數(shù) Paused: 0 # 暫停容器數(shù) Stopped: 0 # 停止容器數(shù) Images: 0 Server Version: 18.03.0-ce Storage Driver: overlay2 # 存儲去掉 Backing Filesystem: xfs # 磁盤文件系統(tǒng)格式 Supports d_type: true Native Overlay Diff: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: active NodeID: y6ulbxd4353ubvpi2p5g3d4zf Is Manager: true ClusterID: k19zirti3fcvq8fygqivg91lx Managers: 1 Nodes: 2 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Force Rotate: 0 Autolock Managers: false Root Rotation In Progress: false Node Address: 10.32.2.202 Manager Addresses: 10.32.2.202:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: cfd04396dc68220d1cecbe686a6cc3aa5ce3667c runc version: 4fc53a81fb7c994640722ac585fa9ca548971871 init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 3.10.0-514.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 8 Total Memory: 31.17GiB Name: localhost ID: E23S:ORX7:3KJA:2MPT:TRCU:VVAM:WOV6:6KUF:ABED:LWFQ:OHGJ:RQU6 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false3.3 開啟Docker Remote API
修改配置文件
vim /usr/lib/systemd/system/docker.service
找到ExecStart=/usr/bin/dockerd行,修改如下。
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
編輯配置文件vim /etc/profile,寫入一下內(nèi)容,執(zhí)行source /etc/profile刷新
export DOCKER_HOST=127.0.0.1:2375
執(zhí)行命令
systemctl daemon-reload systemctl restart docker
執(zhí)行curl http://127.0.0.1:2375/info驗證
輸出如下
{"ID":"HPZP:XIWJ:BZP7:YI47:UOLX:YLMM:LBF7:KV4E:Y2A7:ED6B:BHWB:FE4R","Containers":2,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":2,"Images":2,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","xfs"],["Supports d_type","true"],["Native Overlay Diff","true"]],"SystemStatus":null,"Plugins":{"Volume":["local"],"Network":["bridge","host","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","json-file","logentries","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"IPv4Forwarding":true,"BridgeNfIptables":true,"BridgeNfIp6tables":true,"Debug":false,"NFd":20,"OomKillDisable":true,"NGoroutines":33,"SystemTime":"2018-04-08T15:41:52.725705339+08:00","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"3.10.0-693.21.1.el7.x86_64","OperatingSystem":"CentOS Linux 7 (Core)","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":[],"AllowNondistributableArtifactsHostnames":[],"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":["https://0zs97su8.mirror.aliyuncs.com/"],"Secure":true,"Official":true}},"Mirrors":["https://0zs97su8.mirror.aliyuncs.com/"]},"NCPU":1,"MemTotal":1022570496,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"localhost","Labels":[],"ExperimentalBuild":false,"ServerVersion":"18.03.0-ce","ClusterStore":"","ClusterAdvertise":"","Runtimes":{"runc":{"path":"docker-runc"}},"DefaultRuntime":"runc","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"cfd04396dc68220d1cecbe686a6cc3aa5ce3667c","Expected":"cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"},"RuncCommit":{"ID":"4fc53a81fb7c994640722ac585fa9ca548971871","Expected":"4fc53a81fb7c994640722ac585fa9ca548971871"},"InitCommit":{"ID":"949e6fa","Expected":"949e6fa"},"SecurityOptions":["name=seccomp,profile=default"]}3.4 設(shè)置開啟啟動
sudo systemctl enable docker.service4. 安裝 Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
在上面寫的命令是本博客撰寫時的最新版本上面的命令是一個例子,有可能會過時,為了確保使用最新的版本,請前往Github Compose repository release查看最新版本
sudo chmod +x /usr/local/bin/docker-compose
輸出如下:
docker-compose version 1.20.1, build 5d8c71b
本文首發(fā)于凌風(fēng)博客:Docker CE for Linux 安裝
作者:凌風(fēng)
Docker 官方安裝文檔
Docker Compose官網(wǎng)安裝文檔
Docker — 從入門到實踐
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27294.html
摘要:如無論哪個服務(wù)器,下載的文件內(nèi)容是一樣的。如果需要啟動,通過命令執(zhí)行完后,再打開文件,可以看到的了。 docker的官網(wǎng):https://www.docker.com/官方文檔:https://docs.docker.com/github: https://github.com/docker/lab... Docker類似虛擬機(jī),是一個開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個輕量級的、...
摘要:下圖是與其他虛擬技術(shù)的對比圖。的目標(biāo)是,基于這個目標(biāo),將你需要發(fā)布的應(yīng)用組件及需要的環(huán)境配置都封裝成一個鏡像,然后基于鏡像創(chuàng)建容器并啟動運(yùn)行。這樣就可以達(dá)到組建級別的一次封裝,多次運(yùn)行。而默認(rèn)情況下,屬于用戶,需要權(quán)限才能訪問。 docker玩過很多次,但每次都是從零開始,所以這次而打算記錄下來,方便后面查詢。 docker的技術(shù)基礎(chǔ)是LXC虛擬化技術(shù),虛擬化技術(shù)有很多,有硬件層面和...
摘要:出于安全考慮,一般系統(tǒng)上不會直接使用用戶。因此,更好地做法是將需要使用的用戶加入用戶組。建立組將當(dāng)前用戶加入組退出當(dāng)前終端并重新登錄,進(jìn)行如下測試。無需使用管理員權(quán)限測試運(yùn)行運(yùn)行列出鏡像倉庫名標(biāo)簽鏡像創(chuàng)建時間占用空間 CentOS 7 安裝 Docker CE 1. docker安裝步驟(基于yum方式) 1.1 查看當(dāng)前l(fā)inux內(nèi)核版本 uname -r #linux內(nèi)核要求3.1...
摘要:在上運(yùn)行使用系統(tǒng)要求開啟虛擬化的硬件支持可以通過命令來檢查或者更高版本至少內(nèi)存安裝最新點(diǎn)擊下載安裝下載的文件安裝完成后,啟動使用鏡像加速地址使用自帶的使用的系統(tǒng)要求運(yùn)行或者以上版本支持硬件虛擬化技術(shù)并且已啟用虛擬化安裝點(diǎn)擊下載運(yùn)行在上運(yùn)行使 在Mac上運(yùn)行Docker 使用Docker for Mac 系統(tǒng)要求 開啟虛擬化的硬件支持,可以通過命令來檢查:sysctl kern.hv_...
閱讀 1228·2023-04-25 20:56
閱讀 2278·2023-04-25 14:42
閱讀 1035·2023-04-25 14:06
閱讀 2874·2021-10-14 09:42
閱讀 2150·2021-09-22 16:03
閱讀 994·2021-09-13 10:30
閱讀 1352·2019-08-29 15:41
閱讀 1811·2019-08-29 12:55