掌握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和虚拟化混为一谈,这是错误的。