掌握Docker高頻操作

掌握Docker高頻操作

以Docker爲代表的輕量級容器技術的角度來審視完全虛擬化技術,虛擬機系統既浪費資源又難以管理,更重要的是還不安全。

讓Docker爲我們工作

沒有Docker鏡像,Docker什麼也幹不了,幸運的是,Docker默認有Docker Hub這個鏡像倉庫可用。

簡而言之,讓Docker工作並不複雜,只需搜索並選擇合適的Docker鏡像,然後pull下來並基於該鏡像創建和運行容器即可。

掌握Docker高頻操作

◆查看Docker版本信息

sudo docker --version                        #僅查看客戶端的docker版本
Docker version 19.03.2, build 6a30dfc

sudo docker version                            #同時獲得客戶端和服務端的版本
Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.8
 Git commit:        6a30dfc
 Built:             Thu Aug 29 05:29:11 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.2
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.8
  Git commit:       6a30dfc
  Built:            Thu Aug 29 05:27:45 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

◆查看Docker配置信息

sudo docker info
Client:
 Debug Mode: false

Server:
 Containers: 3
  Running: 1
  Paused: 0
  Stopped: 2
 Images: 2
 Server Version: 19.03.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-29-generic
 Operating System: Ubuntu 18.04.1 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 7.767GiB
 Name: us1804
 ID: I5UM:SBZY:LL2E:HS3V:2AFG:VKW6:XHQL:HSQ3:A6OU:SZPE:V6MW:GZVD
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

◆查看容器中正在運行的進程信息

sudo docker top fbf73d144314UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMDroot                19885               19857               0                   16:39               pts/1               00:00:00            /bin/bash
root                19961               19943               0                   16:50               pts/3               00:00:00            /bin/bash

查看查看指定容器狀態

sudo docker ps -a

根據鏡像創建一個容器

根據所下載鏡像創建容器Docker容器主要有以下兩種方式,創建一個容器但並不啓動,可以使用如下命令:

sudo docker create ubuntu
22a97fdf60af3c6f73fccdeff8375f58c36918280cd27a60f6480e243b658f72

容器管理相關操作

容器相關操作主要有啓動,停止,重啓,暫停,恢復和終結容器,運行如下命令啓動/停止/重啓/暫停/恢復/終結Docker容器:

sudo docker start/stop/restart/pause/unpause/kill CONTAINER_ID(容器ID或名稱)
sudo docker start fbf73d144314        #啓動容器
sudo docker pause fbf73d144314        #掛起容器
sudo docker unpause fbf73d144314    #恢復容器
sudo docker kill fbf73d144314        #強行終結容器,謹慎使用

查看容器相關命令

查看容器的狀態是最常用的操作之一,首先是查看正在運行的容器,操作如下:

sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
fbf73d144314        ubuntu              "/bin/bash"         41 minutes ago      Up 24 minutes       0.0.0.0:2222->22/tcp   ubuntu1804

複製容器中的文件到容器外

運行如下命令從容器中複製文件或目錄到本地一個路徑:

sudo docker cp fbf73d144314:/bin/bash ./bash_in_container

備份與恢復本地鏡像

將容器導出爲export.tar,具體操作如下:

sudo docker export fbf73d144314 > export.tar

顯示一個鏡像的歷史

無論對鏡像做了什麼操作,都可以通過如下命令顯示鏡像歷史:

sudo docker history ubuntu
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d355ed3537e9        3 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           3 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7B
<missing>           3 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76kB
<missing>           3 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           3 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745B
<missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:c251a21fbe3a651...   119MB

查看Docker容器日誌

容器可以使用如下命令查看日誌:

sudo docker logs -f fbf73d144314

Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [16.8 kB]
Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [4930 B]
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6241 B]
Fetched 24.2 MB in 1min 28s (273 kB/s)
Reading package lists...

可以看到前面升級軟件倉庫列表的日誌,此命令的效果類似tailf,隨時將新出現的日誌顯示。

直接獲得容器的IP地址

對Docker進行管理很多時候需要獲得容器的IP地址,正常需要進入容器,然後再運行ifconfig獲得,其實還可以更加高效地獲得容器的IP地址,關鍵操作如下:

sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' fbf73d144314
172.17.0.2

刪除Docker容器

刪除某個容器前,需要先停止這個容器,使用如下命令停止容器:

sudo docker stop fbf73d144314

刪除本地Docker鏡像

如果要刪除本地的Docker鏡像,可以使用docker rmi命令,關鍵操作如下:

sudo docker rmi ubuntu

如果碰到個別無法刪除的鏡像,可以添加–force參數來強制刪除。

需要特別注意的是,Docker是一種內核級別的隔離技術,與主機系統共享內核,並通過Basic Image實現標準化的Linux執行環境,而非一種虛擬化技術,很多朋友都將Docker和虛擬化混爲一談,這是錯誤的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章