掌握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和虛擬化混爲一談,這是錯誤的。