一篇文章讓你快速入門Docker


在這裏插入圖片描述

前言 Hello,你們好,我是ChinaManor,今天週末恰好有時間, 因此想爲你們寫一篇Docker的快速入門文章。

Docker 是什麼?

Docker 是一個開源的應用容器引擎,基於 Go 語言 並聽從 Apache2.0 協議開源。
Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。
容器是徹底使用沙箱機制,相互之間不會有任何接口(相似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本以後分爲 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),咱們用社區版就能夠了。docker

Docker 架構

Docker 包括三個基本概念:數據庫

鏡像(Image):Docker 鏡像(Image),就至關因而一個 root 文件系統。好比官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
容器(Container):鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。
倉庫(Repository):倉庫可當作一個代碼控制中心,用來保存鏡像。
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和建立Docker容器。編程

Docker 容器經過 Docker 鏡像來建立。ubuntu

容器與鏡像的關係相似於面向對象編程中的對象與類。centos

在這裏插入圖片描述

Docker的應用場景

Web 應用的自動化打包和發佈。bash

自動化測試和持續集成、發佈。服務器

在服務型環境中部署和調整數據庫或其餘的後臺應用。markdown

從頭編譯或者擴展示有的 OpenShift 或 Cloud Foundry 平臺來搭建本身的 PaaS 環境。架構

Docker 的優勢

Docker 是一個用於開發,交付和運行應用程序的開放平臺。Docker 使您可以將應用程序與基礎架構分開,從而能夠快速交付軟件。藉助 Docker,您能夠與管理應用程序相同的方式來管理基礎架構。經過利用 Docker 的方法來快速交付,測試和部署代碼,您能夠大大減小編寫代碼和在生產環境中運行代碼之間的延遲。app

一、快速,一致地交付您的應用程序
Docker 容許開發人員使用您提供的應用程序或服務的本地容器在標準化環境中工做,從而簡化了開發的生命週期。

容器很是適合持續集成和持續交付(CI / CD)工做流程,請考慮如下示例方案:

您的開發人員在本地編寫代碼,並使用 Docker 容器與同事共享他們的工做。
他們使用 Docker 將其應用程序推送到測試環境中,並執行自動或手動測試。
當開發人員發現錯誤時,他們能夠在開發環境中對其進行修復,而後將其從新部署到測試環境中,以進行測試和驗證。
測試完成後,將修補程序推送給生產環境,就像將更新的鏡像推送到生產環境同樣簡單。
二、響應式部署和擴展
Docker 是基於容器的平臺,容許高度可移植的工做負載。Docker 容器能夠在開發人員的本機上,數據中心的物理或虛擬機上,雲服務上或混合環境中運行。

Docker 的可移植性和輕量級的特性,還可使您輕鬆地完成動態管理的工做負擔,並根據業務需求指示,實時擴展或拆除應用程序和服務。

三、在同一硬件上運行更多工做負載
Docker 輕巧快速。它爲基於虛擬機管理程序的虛擬機提供了可行、經濟、高效的替代方案,所以您能夠利用更多的計算能力來實現業務目標。Docker 很是適合於高密度環境以及中小型部署,而您能夠用更少的資源作更多的事情。

Docker 安裝 CentOS

CentOS(Community Enterprise Operating System)是 Linux 發行版之一,它是來自於 Red Hat Enterprise Linux(RHEL) 依照開放源代碼規定發佈的源代碼所編譯而成。因爲出自一樣的源代碼,所以有些要求高度穩定性的服務器以 CentOS 替代商業版的 Red Hat Enterprise Linux 使用。

一、查看可用的 CentOS 版本
訪問 CentOS 鏡像庫地址:https://hub.docker.com/_/centos?tab=tags&page=1。

能夠經過 Sort by 查看其餘版本的 CentOS 。默認是最新版本 centos:latest 。

在這裏插入圖片描述
你也能夠在下拉列表中找到其餘你想要的版本:

在這裏插入圖片描述
二、拉取指定版本的 CentOS 鏡像,這裏咱們安裝指定版本爲例(centos7):

$ docker pull centos:centos7

在這裏插入圖片描述

三、查看本地鏡像
使用如下命令來查看是否已安裝了 centos7:

$ docker images

在這裏插入圖片描述

四、運行容器,而且能夠經過 exec 命令進入 CentOS 容器。

$ docker run -itd --name centos-test centos:centos7

在這裏插入圖片描述

五、安裝成功
最後咱們能夠經過 docker ps 命令查看容器的運行信息:
在這裏插入圖片描述

Docker Hello World

Docker 容許你在容器內運行應用程序, 使用 docker run 命令來在容器內運行一個應用程序。

輸出Hello world

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

在這裏插入圖片描述

各個參數解析:

docker: Docker 的二進制執行文件。

run: 與前面的 docker 組合來運行一個容器。

ubuntu:15.10 指定要運行的鏡像,Docker 首先從本地主機上查找鏡像是否存在,若是不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。

/bin/echo 「Hello world」: 在啓動的容器裏執行的命令

以上命令完整的意思能夠解釋爲:Docker 以 ubuntu15.10 鏡像建立一個新容器,而後在容器裏執行 bin/echo 「Hello world」,而後輸出結果。

運行交互式的容器
咱們經過 docker 的兩個參數 -i -t,讓 docker 運行的容器實現"對話"的能力:

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

各個參數解析:

-t: 在新容器內指定一個僞終端或終端。

-i: 容許你對容器內的標準輸入 (STDIN) 進行交互。

注意第二行 root@0123ce188bd8:/#,此時咱們已進入一個 ubuntu15.10 系統的容器

咱們嘗試在容器中運行命令 cat /proc/version和ls分別查看當前系統的版本信息和當前目錄下的文件列表

root@0123ce188bd8:/# cat /proc/version

Linux version 4.4.0-151-generic (buildd@lgw01-amd64-043) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #178-Ubuntu SMP Tue Jun 11 08:30:22 UTC 2019

root@0123ce188bd8:/# ls

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

root@0123ce188bd8:/# 

咱們能夠經過運行 exit 命令或者使用 CTRL+D 來退出容器。

root@0123ce188bd8:/# exit

exit

root@runoob:~# 

注意第三行中 root@runoob:~# 代表咱們已經退出了當前的容器,返回到當前的主機中。

啓動容器(後臺模式)
使用如下命令建立一個以進程方式運行的容器

runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
在輸出中,咱們沒有看到指望的 「hello world」,而是一串長字符

2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

這個長字符串叫作容器 ID,對每一個容器來講都是惟一的,咱們能夠經過容器 ID 來查看對應的容器發生了什麼。

首先,咱們須要確認容器有在運行,能夠經過 docker ps 來查看:

runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND …
5917eac21c36 ubuntu:15.10 「/bin/sh -c 'while t…」 …
輸出詳情介紹:

CONTAINER ID: 容器 ID。

IMAGE: 使用的鏡像。

COMMAND: 啓動容器時運行的命令。

CREATED: 容器的建立時間。

STATUS: 容器狀態。

狀態有7種:

created(已建立)
restarting(重啓中)
running 或 Up(運行中)
removing(遷移中)
paused(暫停)
exited(中止)
dead(死亡)
PORTS: 容器的端口信息和使用的鏈接類型(tcp\udp)。

NAMES: 自動分配的容器名稱。

在宿主主機內使用 docker logs 命令,查看容器內的標準輸出:

runoob@runoob:~$ docker logs 2b1b7a428627

在這裏插入圖片描述

runoob@runoob:~$ docker logs amazing_cori

在這裏插入圖片描述

中止容器
咱們使用 docker stop 命令來中止容器:

經過 docker ps 查看,容器已經中止工做:

runoob@runoob:~$ docker ps

能夠看到容器已經不在了。

也能夠用下面的命令來中止:

runoob@runoob:~$ docker stop amazing_cori
總結 總的來講Docker 是一個不錯的開源應用容器引擎,值得去研究一下,今天的分享就到這裏,咱們下期再見
相關文章
相關標籤/搜索