docker入門及基礎用法

Docker簡介

Docker:docker是基於go語言實現的雲開源項目,誕生於2013年初。目前docker是僅次於openstack的最受歡迎的雲計算開源項目。現在主流的操作系統都已經支持docker。
Docker的主要目標是通過對應的組件的封裝(packaging)、分發(distribution)、部署(deployment)、運行(runtime)等生命週期管理,達到應用組件級別的“一次封裝,到處運行”。這裏的應用組件,既可以是一個web應用,也可以是一套數據庫服務,甚至是一個操作系統或者編譯器。Docker提供了高效、敏捷、輕量級的容器方案,爲應用的開發和部署提供了一站式的解決方案。

Docker的優點:

1,更快捷的交付和部署。使用docker開發人員可以使用鏡像來快速構建一套標準的開發環境;開發完成之後,測試和運維人員可以直接使用相同環境來部署代碼。Docker可以快速創建和刪除容器,實現快速迭代,大量節約開發、測試、運維部署的時間。

2,更高效的資源利用。Docker運行不需要額外的虛擬化管理程序支持,它是內核級的虛擬化,可以實現更高性能,同時對資源的額外需求很低。一臺主機上可以同時運行上千個docker容器。

3,更輕鬆的遷移和擴展。Docker幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、服務器等。

4,更簡單的更新管理。使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,並且所有修改都以增量的方式進行分發和更新,從而實現自動化並且高效的容器管理。

虛擬機:

通過虛擬化技術我們可以在服務上運行多個不同環境的虛擬機,大大提高我們對服務器的利用率!
虛擬機的硬件的彈性擴展也方便了我們後期虛擬機配置的提升。統一的管理平臺也會大大降低我們的維護成本。

容器:

容器本身的意思是指可以存放東西的器皿,我們這裏可以把容器想想成是一個盒子、箱子!裏面存放的就是我們要運行的應用:如一個nginx、tomcat。
容器技術相對於虛擬機具有哪些特點?

1.體積小
2.啓動速度快
3.性能接近原生
4.單節點支持的容器的數量多
5.環境一致性

Docker鏡像:

Docker鏡像(image)類似於虛擬機鏡像,可以將它理解爲一個面向docker引擎的只讀模板,包含了文件系統。(可以包含某一個系統,也可以是包含了一個應用程序)。鏡像是創建docker容器的基礎。通過版本管理和增量的文件系統,docker提供了一套十分簡單的機制來創建和更新現有的鏡像,用戶甚至可以從網上值機下載一個已經做好的鏡像之後通過簡單的命令直接使用。

Docker容器:

Container:容器是一種基礎工具;反之任何可以用於容納其它物品的工具,可以部分或完全封閉,被用於容納、存儲、運輸物品;物體可以被放置在容器中,而容器可以保護內容物。
Docker容器類似於一個輕量級的沙箱,docker利用容器來運行和隔離應用。容器是從鏡像創建的應用運行實例,可以將其啓動、開始、停止、刪除,而這些容器都是互相隔離、互不可見的。

Docker倉庫:

Docker倉庫(repository)類似於代碼倉庫,是docker集中存放鏡像文件的場所。有時候會有將docker倉庫和註冊服務器(registry)混爲一談的,其實註冊服務器是存放倉庫的地方,其上往往存放着多個倉庫。每個倉庫集中存放某一類鏡像,之後通過不同的標籤(tag)來進行區分。之後又根據所存儲的鏡像公開分享與否,docker倉庫可以分爲公開倉庫(public)和私有倉庫(private)兩種形式。

目前最大的公開倉庫是docker hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括docker pool等,可以提供穩定的國內訪問。當然用戶也可以創建自己的私有倉庫。當用戶創建了自己的鏡像之後,隨後用戶就可以使用push命令將他們上傳到指定的公有或者私有倉庫。這樣用戶下次在另外的服務器上使用該鏡像時只需要將其pull下來就可以了。

docker的安裝部署

Docker支持在主流的操作系統平臺上使用,Ubuntu、centos、Windows、macOS等。當然在Linux系列平臺上是原生支持,使用體驗最好。

1,環境準備

系統版本:centos7
#關閉防火牆和selinux
[root@ c7-42 ~] systemctl stop firewalld
[root@ c7-42 ~] systemctl disable firewalld
[root@ c7-42 ~] setenforce 0
[root@ c7-42 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#docker所需組件和源
[root@ c7-42 ~] yum install -y yum-utils device-mapper-persistent-data lvm2
[root@ c7-42 ~] yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#阿里雲:https://developer.aliyun.com/mirror
[root@ c7-42 yum.repos.d] ll docker*
-rw-r--r-- 1 root root 2640 Mar 16 18:38 docker-ce.repo
[root@ c7-42 yum.repos.d] pwd
/etc/yum.repos.d

2,安裝docker

[root@ c7-42 ~] yum -y install docker-ce
#定義鏡像加速器,docker沒有配置文件,需要自己創建
[root@ c7-42 ~] mkdir -p /etc/docker
[root@ c7-42 ~] cd /etc/docker/
[root@ c7-42 docker] vim daemon.json 
[root@ c7-42 docker] cat daemon.json 
{
  "registry-mirrors": ["https://q3u0qv3z.mirror.aliyuncs.com"]
}
[root@ c7-42 ~] systemctl enable docker.service #開機自啓
[root@ c7-42 ~] systemctl start docker.service #啓動docker
#查看版本
[root@ c7-42 ~] docker version
#查看詳細信息
[root@ c7-42 ~] docker info

3,搜索鏡像,拉取鏡像

[root@ c7-42 ~] docker search nginx #搜索鏡像
[root@ c7-42 ~] docker image pull nginx #拉取nginx鏡像
[root@ c7-42 ~] docker pull busybox #拉取busybox鏡像
[root@ c7-42 ~] docker images #查看已有鏡像
查看本地網絡
[root@ c7-42 ~] docker network ls #查看本地網絡
NETWORK ID          NAME                DRIVER              SCOPE
c6b4aa815896        bridge              bridge              local
7135835db753        host                host                local
b94b4ff35181        none                null                local

在這裏插入圖片描述
4,創建busybox交互模式容器

[root@ c7-42 ~] docker run --name busybox -it busybox:latest
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ #

5,在容器裏創建httpd項目

/ # mkdir -p /data/html
/ # vi /data/html/index.html
/ # cat /data/html/index.html 
busybox httpd server.
/ # httpd -f -h /data/html/ #啓動httpd,爲前臺啓動

打開新終端查看容器

[root@ c7-42 ~] docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b125f4779e90        busybox:latest      "sh"                9 minutes ago       Up 9 minutes                            busybox

6,查看busybox容器,並訪問

[root@ c7-42 ~] docker inspect busybox #查看詳細信息
[root@ c7-42 ~] curl 172.17.0.2 #訪問busybox容器
busybox httpd server.

7,退出busybox前臺啓動的容器

/ # httpd -f -h /data/html/ #Ctrl+c結束
^C
/ # exit #退出
[root@ c7-42 ~]#

8,查看容器狀態

[root@ c7-42 ~] docker ps #沒有運行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@ c7-42 ~] docker ps -a #查看所有容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
b125f4779e90        busybox:latest      "sh"                16 minutes ago      Exited (0) About a minute ago                       busybox
#刪除busybox容器,busybox已停止,可直接刪除
[root@ c7-42 ~] docker rm busybox 
busybox

9,創建nginx容器

[root@ c7-42 ~] docker run --name web1 -d nginx:latest
b8dec8dcd3e7193d4d0e45bdadcb61ca4cc86379da18f910a4b10b910fbdc4ae
[root@ c7-42 ~] docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b8dec8dcd3e7        nginx:latest        "nginx -g 'daemon of…"   13 seconds ago      Up 11 seconds       80/tcp              web1

10,查看web1容器詳情,並訪問web1

#查看詳情
[root@ c7-42 ~] docker inspect web1
#訪問nginx容器
[root@ c7-42 ~] curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

11,獲取web1的日誌

[root@ c7-42 ~] docker logs web1
172.17.0.1 - - [15/May/2020:07:27:57 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

12,刪除web1

[root@ c7-42 ~] docker stop web1 #運行狀態,先停止容器
web1
[root@ c7-42 ~] docker rm web1  #刪除
web1 

Docker三個基本概念

1.鏡像倉庫(hub.docker.com 鏡像倉庫)
2.鏡像
3.容器

Docker常用命令:

對鏡像的操作:

1.獲取鏡像
  增:
   docker pull  鏡像名:TAG
  刪:
   刪除鏡像,我們不能直接刪除有容器依賴的鏡像
    docker rmi     鏡像名/ID
    docker rmi -f  鏡像名/ID
  改:
    docker tag
  查:
    查看本地鏡像
    docker images

對容器的操作:

   增:
     1.創建並運行容器
        docker run  --name 容器名字  -d  -p  宿主機端口:容器端口   基礎鏡像
		例子: docker run --name web1 -d -p 80:80 nginx:latest
        docker  run --name learn1  -it busybox /bin/sh  以可交互的方式運行一個容器
   刪:
     刪除容器,我們不能直接刪除一個正在運行的容器,需要先停止再刪除,或者-f,強制刪除
     docker rm web1
     docker rm -f web1
   改:
      容器重命名
      docker rename       修改容器名字
      容器啓動和停止
      docker  start/stop/restart  容器名
      docker  pause      容器名     \\暫停容器
      docker  unpause    容器名      \\取消暫停容器
      docker  update                \\更新容器的配置
      docker  cp                    \\容器和宿主機之間複製文件,默認覆蓋已有的文件
      docker  exec                  \\在運行的容器中執行一條命令
      docker  exec -it  web1 /bin/bash  \\以交互的方式進入web1容器操作

   查:
      查看正在運行的容器
      docker ps
      查看所有的容器
      docker ps -a
      docker stats 容器名  \\查看容器運行狀態(CPU\內存\網絡IO\磁盤IO使用情況)
      docker top  容器名   \\查看容器正在運行的進程
      docker inspect 容器/鏡像   \\查看容器或者鏡像的底層信息,元數據,比如查看ip、主機名、數據卷、CMD等信息
      docker logs [-f]   \\查看容器內部進程的日誌

構建鏡像:

基於一個容器構建一個新鏡像

1.運行一個基於(Centos/Ubuntu/alpine)啓動一個容器,在容器內部執行更改操作,比如安裝一個工具或者服務!
2.使用docker commit 將容器提交更改並生成一個新的鏡像,比如有個叫ztt的容器,基於它創建一個鏡像nginx:1.0
例子:docker  commit  ztt  nginx:1.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章