摘要:由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。持續交付和部署對開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。如果安裝了這些版本,先卸載它們,以及相關的依賴項。設置源安裝所需要的包。
1. 背景 1.1 概述
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基于 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬于 操作 系統層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容 器。最初實現是基于 LXC,從 0.7 版本以后開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和 containerd。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極 大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。
1.2 為什么要使用 Docker作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。
1. 更高效的利用系統資源由于容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用 率更高。無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高 效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用。
2. 更快速的啟動時間傳統的虛擬機技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由于直接運行于宿主 內核,無需啟動完整的操作系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約 了開發、測試、部署的時間。
3. 一致的運行環境開發過程中一個常見的問題是環境一致性問題。由于開發環境、測試環境、生產環境不一 致,導致有些 bug 并未在開發過程中被發現。而 Docker 的鏡像提供了除內核外完整的運行 時環境,確保了應用運行環境一致性,從而不會再出現 「這段代碼在我機器上沒問題啊」 這 類問題。
4. 持續交付和部署對開發和運維(DevOps)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運 行。
使用 Docker 可以通過定制應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過 Dockerfile 來進行鏡像構建,并結合 持續集成(Continuous Integration) 系統進行集成測試, 而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。
而且使用 Dockerfile 使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便 運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
5. 更輕松的遷移由于 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺 上運行,無論是物理機、虛擬機、公有云、私有云,甚至是筆記本,其運行結果是一致的。 因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行 環境的變化導致應用無法正常運行的情況。
6. 更輕松的維護和擴展Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的 維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單。此外,Docker 團隊同各 個開源項目團隊一起維護了一大批高質量的 官方鏡像,既可以直接在生產環境使用,又可以 作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。
7. 對比傳統虛擬機總結特性 | 容器 | 虛擬機 |
---|---|---|
啟動 | 秒級 | 分鐘級 |
硬盤使用 | 一般為MB | 一般為GB |
性能 | 接近原生 | 弱于 |
系統支持量 | 單機支持上千個容器 | 一般幾十個 |
Cent OS 7
Docker 18.03.0-ce
2. 卸載舊版本老版本的Docker被稱為docker或docker-engine。如果安裝了這些版本,先卸載它們,以及相關的依賴項。
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源
在新主機上首次安裝Docker CE之前,您需要設置Docker的yum源。之后,您可以從存儲庫安裝和更新Docker。
設置源
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
由于國內的網絡原因需要使用阿里的鏡像加速器,登錄自己的阿里云官網,找到鏡像加速器,根據提示進行配置
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 # 容器數 Running: 0 # 運行容器數 Paused: 0 # 暫停容器數 Stopped: 0 # 停止容器數 Images: 0 Server Version: 18.03.0-ce Storage Driver: overlay2 # 存儲去掉 Backing Filesystem: xfs # 磁盤文件系統格式 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,寫入一下內容,執行source /etc/profile刷新
export DOCKER_HOST=127.0.0.1:2375
執行命令
systemctl daemon-reload systemctl restart docker
執行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 設置開啟啟動
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
本文首發于凌風博客:Docker CE for Linux 安裝
作者:凌風
Docker 官方安裝文檔
Docker Compose官網安裝文檔
Docker — 從入門到實踐
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27294.html
摘要:如無論哪個服務器,下載的文件內容是一樣的。如果需要啟動,通過命令執行完后,再打開文件,可以看到的了。 docker的官網:https://www.docker.com/官方文檔:https://docs.docker.com/github: https://github.com/docker/lab... Docker類似虛擬機,是一個開源的引擎,可以輕松的為任何應用創建一個輕量級的、...
摘要:下圖是與其他虛擬技術的對比圖。的目標是,基于這個目標,將你需要發布的應用組件及需要的環境配置都封裝成一個鏡像,然后基于鏡像創建容器并啟動運行。這樣就可以達到組建級別的一次封裝,多次運行。而默認情況下,屬于用戶,需要權限才能訪問。 docker玩過很多次,但每次都是從零開始,所以這次而打算記錄下來,方便后面查詢。 docker的技術基礎是LXC虛擬化技術,虛擬化技術有很多,有硬件層面和...
摘要:出于安全考慮,一般系統上不會直接使用用戶。因此,更好地做法是將需要使用的用戶加入用戶組。建立組將當前用戶加入組退出當前終端并重新登錄,進行如下測試。無需使用管理員權限測試運行運行列出鏡像倉庫名標簽鏡像創建時間占用空間 CentOS 7 安裝 Docker CE 1. docker安裝步驟(基于yum方式) 1.1 查看當前linux內核版本 uname -r #linux內核要求3.1...
摘要:在上運行使用系統要求開啟虛擬化的硬件支持可以通過命令來檢查或者更高版本至少內存安裝最新點擊下載安裝下載的文件安裝完成后,啟動使用鏡像加速地址使用自帶的使用的系統要求運行或者以上版本支持硬件虛擬化技術并且已啟用虛擬化安裝點擊下載運行在上運行使 在Mac上運行Docker 使用Docker for Mac 系統要求 開啟虛擬化的硬件支持,可以通過命令來檢查:sysctl kern.hv_...
閱讀 1215·2023-04-25 20:56
閱讀 2255·2023-04-25 14:42
閱讀 1020·2023-04-25 14:06
閱讀 2858·2021-10-14 09:42
閱讀 2135·2021-09-22 16:03
閱讀 978·2021-09-13 10:30
閱讀 1342·2019-08-29 15:41
閱讀 1789·2019-08-29 12:55