Docker入門以及經常使用命令

目的:

  Docker入門

     Docker簡介

     Centos7安裝Docker

     Docker HelloWorld運行原理解析

     阿里雲鏡像倉庫配置

  Docker經常使用命令

     Docker基本命令

     Docker鏡像經常使用命令

     Docker 容器經常使用命令

 


 關於聯繫Docker,首先要有虛擬機和linux系統的基礎,能夠參考博客:https://www.cnblogs.com/huangting/p/11510852.html

Docker簡介

Docker 是一個開源的應用容器引擎,基於 Go語言 並聽從Apache2.0協議開源。Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中。容器是一個打包了應用服務的環境,它是一個輕量級的虛擬機,每個容器由一組特定的應用和必要的依賴庫組成。容器是徹底使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。Docker 從 17.03 版本以後分爲 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),咱們用社區版就能夠了。html

 

 

Docker官網:https://www.docker.com/linux

Docker的應用場景:nginx

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

自動化測試和持續集成、發佈。redis

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

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

Docker 的優勢編程

  • 簡化程序:

Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,使開發者能夠直接將本身的成果放入Docker中進行管理。方便快捷已是 Docker的最大優點,過去須要用數天乃至數週的 任務,在Docker容器的處理下,只須要數秒就能完成。json

 

  • 避免選擇恐懼症:

若是你有選擇恐懼症,仍是資深患者。那麼你可使用 Docker 打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。centos

 

  • 節省開支:

一方面,雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。

 

Docker的架構

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和建立Docker容器。

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

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

Docker

面向對象

容器

對象

鏡像

 

 

Docker 鏡像(Images)

是用於創Docker 鏡像建 Docker 容器的模板。

Docker 容器(Container)

容器是獨立運行的一個或一組應用。

Docker 客戶端(Client)

Docker 客戶端經過命令行或者其餘工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) Docker 的守護進程通訊。

Docker 主機(Host)

一個者物理或虛擬的機器用於執行 Docker 守護進程和容器。

Docker 倉庫(Registry)

Docker 倉庫用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫。

Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。

 

Docker Machine

Docker Machine是一個簡化Docker安裝的命令行工具,經過一個簡單的命令行便可在相應的平臺上安裝Docker,好比VirtualBoxDigital OceanMicrosoft Azure

 Docker 和虛擬機的區別

Docker是一種輕量級的虛擬化技術,比傳統的虛擬機性能更好。
下圖是虛擬機的體系結構:

server - 表示真實電腦。 Host OS - 真實電腦的操做系統,例如:Windows,Linux Hypervisor - 虛擬機平臺,模擬硬件,如VMWare,VirtualBox Guest OS - 虛擬機平臺上安裝的操做系統,例如CentOS Linux App - 虛擬機操做系統上的應用,例如nginx

下圖是Docker的體系結構:

server - 表示真實電腦。 Host OS - 真實電腦的操做系統,例如:Windows,Linux Docker Engine - 新一代虛擬化技術,不須要包含單獨的操做系統。 App - 全部的應用程序如今都做爲Docker容器運行。 這種體系結構的明顯優點是,不須要爲虛擬機操做系統提供硬件模擬。全部應用程序都做爲Docker容器工做,性能更好。

 

Centos7安裝Docker

Docker1.13版本以後採用時間線的方式做爲版本號,分爲社區版CE和企業版EE

社區版是免費提供給我的開發者和小型團體使用的,企業版會提供額外的收費服務,好比通過官方測試認證過的基礎設施、容器、插件等。

社區版按照stableedge兩種方式發佈,每一個季度更新stable版本,如17.0617.09;每月份更新edge版本,如17.0917.10

咱們平時用社區版就足夠了。因此咱們安裝社區版;

咱們主要參考:https://docs.docker.com/install/linux/docker-ce/centos/  來安裝;

 

咱們切換到root用戶

1Docker 要求 CentOS 系統的內核版本高於 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker

經過 uname -r 命令查看你當前的內核版本

$ uname -r

2、使用 root 權限登陸 Centos。確保 yum 包更新到最新。

$ yum update

注意:這裏我踩過一個大坑,必定要用root用戶去登錄更新yum,不然運行啥都不會成功!!!!

3、卸載舊版本(若是安裝過舊版本的話)

$ yum remove docker  docker-common docker-selinux docker-engine

4、安裝須要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

$ yum install -y yum-utils device-mapper-persistent-data lvm2

5、設置yum

$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6,安裝最新版本的Docker

$ yum install docker-ce docker-ce-cli containerd.io

 

7,啓動Docker並設置開機啓動

$ systemctl start docker $ systemctl enable docker

 

8,驗證Docker

$ docker version

 

 


 

阿里雲鏡像倉庫配置

 

1,登陸進入阿里雲鏡像服務中心,獲取鏡像地址

進入阿里雲容器鏡像服務地址:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

使用你的淘寶帳號密碼登陸或者註冊一個阿里雲帳戶都行,隨你本身啦

 

2,進入/etc/docker目錄下找到在daemon.json文件(沒有就新建),將下面內容寫入

cd /etc/docker vi daemon-reload

3,重啓daemon

systemctl daemon-reload

4,重啓docker服務

systemctl restart docker

9Docker HelloWorld測試

$ docker run hello-world

效果:

 

 


 

Docker HelloWorld運行原理解析

能夠看見咱們運行了docker run hello-world

從左到右 client客戶端,Docker運行主機,遠程倉庫;

docker build ,pullrun分別是 構建,拉取,運行命令,後面再細講;

中間Docker主機裏有 Docker daemon主運行線程,以及Containers容器,容器裏能夠運行不少實例,(實例是從右側Images鏡像實例化出來的)Images是存儲再本地的鏡像文件,好比 RedisTomat這些鏡像文件;

右側是Registry鏡像倉庫,默認遠程鏡像倉庫 https://hub.docker.com/  不過是國外主機,下載很慢,不穩定,因此咱們後面要配置成阿里雲倉庫鏡像地址,穩定快捷;

 

 

 咱們執行docker run hello-world時,它所運行的過程結構以下:

 


 

Docker基本命令

啓動Docker

systemctl start docker

中止Docker

systemctl stop docker

重啓Docker

systemctl restart docker

開機啓動Docker

systemctl enable docker

查看Docker概要信息

docker info

查看Docker幫助文檔

docker --help

查看Docker版本信息

docker version

  在上面操做中基本上都用到了因此就不截圖了


Docker鏡像經常使用命令

docker images 列出本機全部鏡像

 docker images

 

 

 REPOSITORY 鏡像的倉庫源 TAG 鏡像的標籤(版本)同一個倉庫有多個TAG的鏡像,多個版本;咱們用REPOSITORY:TAG來定義不一樣的鏡像; IMAGE ID 鏡像ID,鏡像的惟一標識 CREATE 鏡像建立時間 SIZE 鏡像大小 OPTIONS 可選參數: -a 顯示全部鏡像(包括中間層) -q 只顯示鏡像ID -qa 能夠組合 --digests 顯示鏡像的摘要信息 --no-trunc 顯示完整的鏡像信息 

 

docker search 搜索鏡像 

https://hub.docker.com/ 這裏的搜索效果同樣;

OPTIONS可選參數:

 --no-trunc 顯示完整的鏡像描述 -s 列出收藏數不小於指定值的鏡像 --automated 只列出Docker Hub自動構建類型的鏡像 

  

docker pull 下載鏡像

docker pull 鏡像名稱:[TAG]

注意:不加TAG,默認下載最新版本latest

docker rmi 刪除鏡像

刪除單個:docker rmi 鏡像名稱:[TAG]

若是不寫TAG,默認刪除最新版本latest

有鏡像生成的容器再運行時候,會報錯,刪除失敗

咱們須要加 -f 強制刪除

 

刪除多個:docker rmi -f 鏡像名稱1:[TAG] 鏡像名稱2:[TAG]

中間空格隔開

 

刪除所有:docker rmi -f $(docker images -qa)

我演示刪除單個:


 

Docker 容器經常使用命令

Docker建立並啓動容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

–name=「容器新名字」:爲容器指定一個名稱; -i:以交互模式運行容器,一般與-t或者-d同時使用; -t:爲容器從新分配一個僞輸入終端,一般與-i同時使用; -d: 後臺運行容器,並返回容器ID; -P: 隨機端口映射,容器內部端口隨機映射到主機的端口 -p: 指定端口映射,格式爲:主機(宿主)端口:容器端口

啓動普通容器: docker run --name 別名 鏡像ID

 啓動交互式容器:  docker run -it --name 別名 鏡像ID   來運行一個容器,取別名,交互模式運行,以及分配一個僞終端,而且進入僞終端;

 

注意: 

一、啓動普通容器的方式基本不用,沒有僞終端,沒有太大價值;

啓動交互式容器的方式,容器一建立完畢,當即進入僞終端

 守護式方式建立並啓動容器

 docker run -di --name 別名 鏡像ID

 

Docker列出容器

docker ps [OPTIONS]

 

OPTIONS說明:

-a :顯示全部的容器,包括未運行的。 -f :根據條件過濾顯示的內容。 --format :指定返回值的模板文件。 -l :顯示最近建立的容器。 -n :列出最近建立的n個容器。 --no-trunc :不截斷輸出。 -q :靜默模式,只顯示容器編號。 -s :顯示總的文件大小。

docker ps 查看正在運行的容器 docker ps -a 查看全部容器 docker ps -n 2  顯示最近建立的2個容器 docker ps -f status=exited 查看中止的容器

效果:

Docker退出容器

exit 容器中止退出 ctrl+P+Q 容器不中止退出

Docker進入容器

 a,docker attach 容器ID or 容器名

 不能進入中止的狀態的容器
You cannot attach to a stopped container, start it first

 

bDocker進入容器執行命令

docker exec -it 容器名稱 或者 容器ID 執行命令

直接操做容器,執行完 回到 宿主主機終端;

 咱們通常用於 啓動容器裏的應用 好比 tomcat nginx redis elasticsearch等等

 

Docker啓動容器

docker start 容器ID or 容器名

 

Docker重啓容器

docker restart 容器ID or 容器名

 

Docker中止容器

docker stop 容器ID or 容器名

 

Docker刪除容器

docker rm 容器ID

暴力刪除,直接殺掉進程 (不推薦)

docker kill 容器ID or 容器名

若是刪除正在運行的容器,會報錯,咱們假如須要刪除的話,須要強制刪除;

強制刪除docker rm -f 容器ID

 

刪除多個容器 

docker rm -f 容器ID1  容器ID2 中間空格隔開

刪除全部容器

docker rm -f $(docker ps -qa)

 

Docker器日誌

$ docker logs [OPTIONS] CONTAINER

 

  Options:

 --details 顯示更多的信息 -f, --follow 跟蹤實時日誌 --since string 顯示自某個timestamp以後的日誌,或相對時間,如42m(即42分鐘) --tail string 從日誌末尾顯示多少行日誌, 默認是all -t, --timestamps 顯示時間戳 --until string 顯示自某個timestamp以前的日誌,或相對時間,如42m(即42分鐘)

 

 

謝謝觀看!!

相關文章
相關標籤/搜索