Docker(一):Docker入門教程

2021-01-10 純潔的微笑

如今Docker的使用已經非常普遍,特別在一線網際網路公司。使用Docker技術可以幫助企業快速水平擴展服務,從而到達彈性部署業務的能力。在雲服務概念興起之後,Docker的使用場景和範圍進一步發展,如今在微服務架構越來越流行的情況下,微服務+Docker的完美組合,更加方便微服務架構運維部署落地。

本文詳細解釋介紹Docker入門相關內容,後期重點關注Docker在微服務體系中的使用。在了解Docker之前我們先考慮幾個問題:1、Docker是什麼?2、為什麼要使用Docker,它有什麼優勢?帶著這些問題我們來看看下面的內容。

什麼是Docker?

Docker 是世界領先的軟體容器平臺。開發人員利用 Docker 可以消除協作編碼時「在我的機器上可正常工作」的問題。運維人員利用 Docker 可以在隔離容器中並行運行和管理應用,獲得更好的計算密度。企業利用 Docker 可以構建敏捷的軟體交付管道,以更快的速度、更高的安全性和可靠的信譽為 Linux 和 Windows Server 應用發布新功能。

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Docker 將應用程式與該程序的依賴,打包在一個文件裡面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裡運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。

總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。

Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 項目後來還加入了 Linux 基金會,並成立推動 開放容器聯盟。

Docker 自開源後受到廣泛的關注和討論,至今其 GitHub 項目已經超過 4 萬 6 千個星標和一萬多個 fork。甚至由於 Docker 項目的火爆,在 2013 年底,dotCloud 公司決定改名為 Docker。Docker 最初是在 Ubuntu 12.04 上開發實現的;Red Hat 則從 RHEL 6.5 開始對 Docker 進行支持;Google 也在其 PaaS 產品中廣泛應用 Docker。

為什麼要使用Docker

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。

具體說來,Docker 在如下幾個方面具有較大的優勢。

1、更快速的交付和部署

對開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。

開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速迭代應用程式,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程式是如何創建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。

2、更高效的虛擬化

Docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實現更高的性能和效率。

3、更輕鬆的遷移和擴展

Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、伺服器等。 這種兼容性可以讓用戶把一個應用程式從一個平臺直接遷移到另外一個。

4、更簡單的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。

Docker vs VM

從下圖可以看出,VM是一個運行在宿主機之上的完整的作業系統,VM運行自身作業系統會佔用較多的CPU、內存、硬碟資源。Docker不同於VM,只包含應用程式以及依賴庫,基於libcontainer運行在宿主機上,並處於一個隔離的環境中,這使得Docker更加輕量高效,啟動容器只需幾秒鐘之內完成。由於Docker輕量、資源佔用少,使得Docker可以輕易的應用到構建標準化的應用中。但Docker目前還不夠完善,比如隔離效果不如VM,共享宿主機作業系統的一些基礎庫等;網絡配置功能相對簡單,主要以橋接方式為主;查看日誌也不夠方便靈活。

Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。

作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。Docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機方式要快得多;Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。

相關概念

Docker是CS架構,主要有兩個概念:

Docker daemon: 運行在宿主機上,Docker守護進程,用戶通過Docker client(Docker命令)與Docker daemon交互Docker client: Docker 命令行工具,是用戶使用Docker的主要方式,Docker client與Docker daemon通信並將結果返回給用戶,Docker client也可以通過socket或者RESTful api訪問遠程的Docker daemon

了解了Docker的組成,再來了解一下Docker的三個主要概念:

Docker image:鏡像是只讀的,鏡像中包含有需要運行的文件。鏡像用來創建container,一個鏡像可以運行多個container;鏡像可以通過Dockerfile創建,也可以從Docker hub/registry上下載。Docker container:容器是Docker的運行組件,啟動一個鏡像就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程序運行在一個相對安全的環境中。Docker hub/registry: 共享和管理Docker鏡像,用戶可以上傳或者下載上面的鏡像,官方地址為 https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。鏡像就相當於打包好的版本,鏡像啟動之後運行在容器中,倉庫就是裝存儲鏡像的地方。

Docker安裝

建議在linux環境下安裝Docker,window環境搭建比較複雜且容易出錯,使用Centos7+yum來安裝Docker環境很方便。

Docker 軟體包已經包括在默認的 CentOS-Extras 軟體源裡。因此想要安裝 docker,只需要運行下面的 yum 命令:

yum install docker安裝完成後,使用下面的命令來啟動 docker 服務,並將其設置為開機啟動:

service docker startchkconfig docker onLCTT 譯註:此處採用了舊式的 sysv 語法,如採用CentOS 7中支持的新式 systemd 語法,如下:

service docker startchkconfig docker on測試

docker version輸入上述命令,返回docker的版本相關信息,證明docker安裝成功。

Hello World

下面,我們通過最簡單的 image 文件"hello world",感受一下 Docker。

因為國內連接 Docker 的官方倉庫很慢,因此我們在日常使用中會使用Docker 中國加速器。通過 Docker 官方鏡像加速,中國區用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像託管於中國大陸,本地用戶現在將會享受到更快的下載速度和更強的穩定性,從而能夠更敏捷地開發和交付 Docker 化應用。

Docker 中國官方鏡像加速可通過 registry.docker-cn.com訪問。該鏡像庫只包含流行的公有鏡像,私有鏡像仍需要從美國鏡像庫中拉取。

修改系統中docker對應的配置文件即可,如下:

vi /etc/docker/daemon.json#添加後{"registry-mirrors":["https://registry.docker-cn.com"],"live-restore":true}運行下面的命令,將 image 文件從倉庫抓取到本地。

docker pull library/hello-world上面代碼中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在倉庫裡面的位置,其中library是 image 文件所在的組,hello-world是 image 文件的名字。

抓取成功以後,就可以在本機看到這個 image 文件了。

docker pull image_name查看宿主機上的鏡像,Docker鏡像保存在/var/lib/docker目錄下:

docker images刪除鏡像

docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30查看當前有哪些容器正在運行

docker ps查看所有容器

docker ps -a啟動、停止、重啟容器命令:

docker start container_name/container_iddocker stop container_name/container_iddocker restart container_name/container_id後臺啟動一個容器後,如果想進入到這個容器,可以使用attach命令:

docker attach container_name/container_id刪除容器的命令:

docker rm container_name/container_id查看當前系統Docker信息

docker info從Docker hub上下載某個鏡像:

docker pull centos:latestdocker pull centos:latest執行docker pull centos會將Centos這個倉庫下面的所有鏡像下載到本地repository。

相關焦點

  • Docker 引擎的 Swarm 模式:入門教程
    在這篇教程中,我將帶你體驗一下編排後的 Docker 將能做的事情。這篇文章並不是包含所有細節(如 BnB 一般)或是讓你對其全知全能,但它能帶你踏上你的集群之路。在我的帶領下開始吧。我們的目標平臺是 CentOS 7.2,有趣的是在我寫這篇教程的時候,它的軟體倉庫中只有 1.10 版的 Docker,也就是說我必須手動更新以使用 Swarm。我們將在另一篇教程中討論這個問題。接下來我們還有一個跟進的指南,其中涵蓋了如何將新的節點加入我們現有的集群(LCTT 譯註:指剛剛建立的單節點集群),並且我們將使用 Fedora 進行一個非對稱的配置。
  • Docker篇-Docker快速入門
    的安裝和使用1、安裝docker2、docker安裝redis3、docker基本概念和常用命令如果有老版本的docker可以先卸載:一、安裝我們使用官網的sh腳本安裝 curl -fsSL https://()get.docker.com| bash -s docker --mirror Aliyun
  • Docker 入門教程
    一、Docker的優點1.簡化配置虛擬機的最大好處是能在你的硬體設施上運行各種配置不一樣的平臺(軟體, 系統), Docker在降低額外開銷的情況下提供了同樣的功能. 它能讓你將運行環境和配置放在代碼匯總然後部署, 同一個Docker的配置可以在不同的環境環境中使用, 這樣就降低了硬體要求和應用環境之間耦合度.
  • Docker 極簡入門教程
    Docker 極簡入門教程富本文我們就來探索一下 Docker 的神秘世界,從零到一掌握 Docker 的基本原理與實踐操作。別再守著前端那一畝三分地,是時候該開疆擴土了。一、講個故事為了更好的理解 Docker 是什麼,我們先來講個故事:我需要蓋一個房子,於是我搬石頭、砍木頭、畫圖紙、
  • 雲計算核心技術Docker教程: Docker 倉庫管理
    當然不止 docker hub,只是遠程的服務商不一樣,操作都是一樣的。在Docker Hub可以免費註冊一個 Docker 帳號。然後登錄需要輸入用戶名和密碼,登錄成功後,我們就可以從 docker hub 上拉取自己帳號下的全部鏡像。登陸命令如下:# docker login
  • 雲計算核心技術Docker教程: Docker鏡像使用
    當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以使用 docker images 來列出本地主機上的鏡像。
  • 雲計算核心技術Docker教程:Docker鏡像使用
    來源:TechWeb.com.cn當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以使用 docker images 來列出本地主機上的鏡像。
  • 雲計算核心技術Docker教程:Docker 容器連接
    下面我們來實現通過埠連接到一個 docker 容器。我們創建了一個 python 應用的容器。命令如下:# docker run -d -P training/webapp python app.py另外,我們可以指定容器綁定的網絡地址,比如綁定 127.0.0.1。
  • 最新Docker附帶的入門培訓教程
    您已經啟動了本教程的容器!讓我們首先解釋一下您剛剛運行的命令。如果您忘記了,請使用以下命令:Docker run -d -p 80:80 docker/getting-started您會注意到一些標誌被使用。
  • 雲計算核心技術Docker教程: Docker 安裝mysql
    本文通過docker安裝mysql。1.查找鏡像:$ docker search mysql2、拉取 MySQL 鏡像,這裡我們拉取官方的最新版本的鏡像:$ docker pull mysql:latest
  • 雲計算核心技術Docker教程: Docker 安裝nginx
    本文通過docker安裝Nginx。1.首先我們還用 docker search nginx 命令來查看可用版本:2.取最新版的 Nginx 鏡像,這裡我們拉取官方的最新版本的鏡像:$ docker pull nginx:latest
  • 雲計算核心技術Docker教程:Docker 安裝nginx
    本文通過docker安裝Nginx。1.首先我們還用 docker search nginx 命令來查看可用版本:2.取最新版的 Nginx 鏡像,這裡我們拉取官方的最新版本的鏡像:$ docker pull nginx:latest3.查看本地鏡像,使用以下命令來查看是否已安裝了 nginx:$ docker images4.運行容器,安裝完成後,我們可以使用以下命令來運行
  • 雲計算核心技術Docker教程:Docker容器使用
    docker 客戶端非常簡單 ,我們可以直接輸入 docker 命令來查看到 Docker 客戶端的所有命令選項。可以通過命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
  • 雲計算核心技術Docker教程: Dockerfile文件使用
    # docker build -t nginx:test ..表示上下文路徑上下文路徑,是指 docker 在構建鏡像,有時候想要使用到本機的文件(比如複製),docker build 命令得知這個路徑後,會將路徑下的所有內容打包。解析:由於 docker 的運行模式是 C/S。我們本機是 C,docker 引擎是 S。
  • 入門必備,Docker常見命令總結
    本文中將拋開常見教程中的預先的一大堆理論說明,直接從上手操作開始。如果你學會了文中所列舉的命令,則證明已經初步學會了docker入門技能,更多知識你可以在此基礎上再深入學習。docker是最常見的一種容器技術,Docker由Docker daemon(監聽程序)、Docker鏡像(層)和Docker存儲(卷)和Docker網絡的構成。一個容器就是指由docker運行時基於docker鏡像創建的一個docker實例。創建容器要創建一個容器,使用create命令, [鏡像名]替換為需要運行的鏡像的名稱。
  • 雲計算核心技術Docker教程:Docker Machine 使用 - 金融界
    使用docker-machine命令,可以啟動、審查、停止、重啟託管的docker 也可以升級Docker客戶端和守護程序並配置docker客戶端和宿主機通信。Docker Machine 也可以集中管理所以得docker主機。
  • 雲計算核心技術Docker教程: Docker 安裝 Redis
    本文介紹通過docker安裝redis。1.我們用 docker search redis 命令來查看可用版本:2.取最新版的 Redis 鏡像,這裡我們拉取官方的最新版本的鏡像:$ docker pull redis:latest
  • 雲計算核心技術Docker教程:Docker 安裝 Redis
    本文介紹通過docker安裝redis。1.我們用 docker search redis 命令來查看可用版本:2.取最新版的 Redis 鏡像,這裡我們拉取官方的最新版本的鏡像:$ docker pull redis:latest3.查看本地鏡像,使用以下命令來查看是否已安裝了 redis:$ docker images在上圖中可以看到我們已經安裝了最新版本
  • 雲計算核心技術Docker教程:Docker使用鏡像加速
    來源:TechWeb.com.cn使用docker在國內從 DockerHub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。1,使用Docker 官方加速器 https://registry.docker-cn.com 直接從該鏡像加速地址進行拉取。
  • 雲計算核心技術Docker教程: Docker使用鏡像加速
    使用docker在國內從 DockerHub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。1,使用Docker 官方加速器 https://registry.docker-cn.com 直接從該鏡像加速地址進行拉取。