深入浅出Docker原理及实战(二)——Docker的安装及常用命令


声明:这是我在大学毕业后进入第一家互联网工作学习的内容


深入浅出Docker原理及实战系列第二篇,遵循先运用后理解的思想,我主要讲解docker的安装过程及常用命令,可以帮助大家快速上手docker(你先用起来,再去理解原理)。

安装docker

操作系统要求

要安装Docker Engine,需要CentOS 7的稳定版本。

当前稳定版本:CentOS Linux release 7.6.1810 (Core)

建议使用overlay2存储驱动程序。

卸载旧版本

较旧的Docker版本称为docker或docker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。

[root@dev-master-01 ~]#yum remove docker \
                        docker-client \
                        docker-client-latest \
                        docker-common \
                        docker-latest \
                        docker-latest-logrotate \
                        docker-logrotate \
                        docker-engine

如果yum报告没有安装这些软件包,那就可以了。

/var/lib/docker/的内容(包括镜像,容器,卷和网络)被保留。 Docker Engine软件包现在称为docker-ce。

安装

您可以根据需要以不同的方式安装Docker Engine:

  • 大多数用户会设置Docker的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法。
  • 一些用户下载并手动安装RPM软件包,并完全手动管理升级。这在诸如在无法访问互联网的空白系统上安装Docker的情况下非常有用。

yum安装

设置yum源

安装yum-utils软件包(提供yum-config-manager实用程序)并设置稳定的存储库。

$ yum install -y yum-utils

$ yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
安装DOCKER引擎

安装最新版本的Docker Engine和容器:

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

要安装特定版本的Docker Engine,请在存储库中列出可用版本,然后选择并安装:

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

通过完全限定的软件包名称安装特定版本

yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io    

例如:docker-ce-18.09.1
配置docker源

一般拉取镜像都是从docker hub拉取,速度较慢,切换成阿里源镜像会快很多

vim   /etc/docker/daemon.json
添加
	{
  		"registry-mirrors": ["https://wghlmi3i.mirror.aliyuncs.com"]
	}

启动

systemctl start docker

验证

[root@dev-master-01 datarouter]# docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf583a
 Built:             Fri Oct 18 15:52:22 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf583a
  Built:            Fri Oct 18 15:50:54 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

rpm安装

如果无法使用Docker的存储库安装Docker,则可以下载该.rpm发行版的 文件并手动安装。每次要升级Docker Engine时,都需要下载一个新文件。

  • 转到https://download.docker.com/linux/centos/ 并选择您的CentOS版本。然后浏览x86_64/stable/Packages/ 并下载.rpm您要安装的Docker版本的文件。
  • 安装Docker Engine,将下面的路径更改为您下载Docker软件包的路径。
yum install /path/to/package.rpm
  • 启动Docker
systemctl start docker

docker常用命令(CLI)

下面从仓库、镜像、容器、其他方面来讲述docker的常用命令。

Registry

关于仓库最主要的几个命令有login logout

login

  • 作用:登录Docker仓库
  • 用法:
docker login [OPTIONS] [SERVER]
OPTIONS描述
–password , -p密码
–username , -u用户名
  • eg:
docker login -u admin -p Harbor12345  development.docker.cn:5000

logout

  • 作用:从Docker仓库注销
  • 用法:
docker logout [SERVER]
  • eg:
docker logout  development.docker.cn:5000

Images

关于镜像最主要的几个命令有pull、push、tag、rmi

pull

  • 作用:从镜像仓库中拉取镜像
  • 用法:
docker pull [OPTIONS] NAME[:TAG]
OPTIONS描述
–all-tags , -a下载存储库中所有标记的镜像
–quiet , -q禁止详细输出
  • eg:
docker pull ubuntu:14.04

大多数镜像都将在Docker Hub的基础镜像之上创建。也可以手动指定要从中提取镜像仓库的路径。例如,如果已经设置了本地仓库,则可以指定从中提取的路径。

  • eg:本地的harbor仓库url为development.docker.cn:5000,要从harbor仓库里拉取镜像前必须先登陆
docker login -u admin -p Harbor12345  development.docker.cn:5000
docker pull development.docker.cn:5000/test/nginx:0.0.1

tag

  • 作用:创建一个引用了SOURCE_IMAGE的标签TARGET_IMAGE
  • 用法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 扩展说明:镜像名称由斜杠分隔的名称组成,可以选择以镜像仓库的主机名作为前缀。主机名必须符合标准DNS规则,但不得包含下划线。标签名称必须是有效的ASCII,并且可以包含小写和大写字母,数字,下划线,句点和破折号。标签名称不能以句点或破折号开头,并且最多可以包含128个字符。
  • eg:
[root@localhost ~]# docker tag development.docker.cn:5000/test/nginx:0.0.1  test.docker.cn:5000/test/nginx:0.0.1
[root@localhost ~]# docker images -a
REPOSITORY                                                          TAG                        IMAGE ID            CREATED             SIZE
development.docker.cn:5000/test/nginx                               0.0.1                    730908c6f40c        6 days ago          1.38GB
test.docker.cn:5000/test/nginx                                      0.0.1                    730908c6f40c        6 days ago          1.38GB

push

  • 作用:将镜像推送到镜像仓库
  • 用法:
docker push  NAME[:TAG]
  • eg:
docker push test.docker.cn:5000/test/nginx:0.0.1

rmi

  • 作用:删除一个或多个镜像
  • 用法:
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS描述
–force , -f强制删除
–no-prune不要删除未加标签的镜像
  • eg:
docker rmi development.docker.cn:5000/test/nginx:0.0.1

如果使用-f标志并指定图像的短ID或长ID,则此命令将取消标记并删除所有与指定ID匹配的图像。

  • eg:
$ docker images -a

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
test1                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
test                      latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
test2                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)

$ docker rmi -f fd484f19954f

Untagged: test1:latest
Untagged: test:latest
Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8

Container

关于容器最主要的几个命令有run、cp、exec、log、rm、diff、start/stop

run

  • 作用:一是创建和启动一个新的容器,二是启动时通过加选项和参数在容器运行命令;
  • 用法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS描述
–attach , -a附加到STDIN,STDOUT或STDERR
–detach , -d在后台运行容器并打印容器ID
–env , -e设置环境变量
–hostname , -h容器主机名
–name给你容器起个名字,以后可以使用这个名字启动或者停止容器
–interactive , -i即使未连接STDIN也保持打开状态
–tty , -t分配伪TTY
–volume , -v绑定挂载卷
–publish , -p将容器的端口映射到主机
–privileged赋予此容器扩展的特权
–rm退出时自动删除容器
–user , -u用户名或UID

扩展说明:
run是创建和启动容器的核心命令,参数较多,我在此只列举了常用的参数。

docker run命令首先creates是在指定镜像上的可写容器层,然后starts使用指定命令。也就是说, docker run相当于API /containers/create,然后 /containers/(id)/start。

如果要重新启动已停止的容器,使其之前的所有更改保持不变应该用docker start 而不是用run。

举几个例子:

  • 名称并分配伪TTY(-t)
$ docker run --name test -it debian

root@d6c0fe130dba:/# exit 13
$ echo $?
13
$ docker ps -a | grep test
d6c0fe130dba        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test

本示例运行一个test使用debian:latest 镜像命名的容器。-it指示docker分配一个伪TTY连接到所述容器的stdin; bash在容器中创建一个交互式外壳。在该示例中,bash通过输入退出外壳程序 exit 13。此退出代码将传递给的调用者 docker run,并记录在test容器的元数据中。

  • 完整的容器功能(特权)
$ docker run -t -i --rm ubuntu bash
root@bc338942ef20:/# mount -t tmpfs none /mnt
mount: permission denied

在默认情况下,最有潜在危险的内核能力下降;包括cap_sys_admin(挂载文件系统所需)。但是,该–privileged标志将允许它运行:

$ docker run -t -i --privileged ubuntu bash
root@50e3f57e16e6:/# mount -t tmpfs none /mnt
root@50e3f57e16e6:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
none            1.9G     0  1.9G   0% /mnt

该–privileged标志为容器提供了所有功能,并且还device解除了cgroup控制器强制执行的所有限制。换句话说,容器可以完成主机可以做的几乎所有事情。存在此标志是为了允许特殊用例,例如在Docker中运行Docker。

  • 映射或暴露端口(-p,-expose)
$ docker run --name nginx -p 8888:80/tcp -it -d nginx

这会将nignx容器的80端口绑定到主机8888上0.0.0.0的TCP端口。我们还可以指定udp和sctp端口。《Docker用户指南》 详细解释了如何在Docker中操作端口。

  • 设置环境变量(-e,-env,-env文件)
$ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash

使用-e,–env和–env-file用在运行的容器中设置简单(非数组)环境变量,或覆盖正在运行的映像的Dockerfile中定义的变量。

可以使用导出到本地环境的变量:

export VAR1=value1
export VAR2=value2

$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2
  • 给容器挂载存储卷(-v path:path),将本地的目录挂载到容器里,当绑定安装的卷的主机目录不存在时,Docker将为自动在主机上创建此目录。
 docker run -u root -d --name jenkins -p 8080:8080 -v /data/jenkins:/data/jenkins -v /var/run/docker.sock:/var/run/docker.sock    jenkinsci/jenkins:lts ;

通过绑定安装docker unix套接字和静态链接的docker二进制文件,可以为容器提供创建和操作主机的Docker守护程序的完全访问权限。

cp

  • 作用:在容器和本地文件系统之间复制文件/文件夹
  • 用法:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS描述
–archive , -a将所有权设置为文件源的用户和主要组
–follow-link , -L始终遵循SRC_PATH中的符号链接
  • 扩展说明

cp命令的行为类似于Unix cp -a命令,因为如果可能,将以递归方式复制目录并保留权限。所有权设置为目的地的用户和主要组。

假设使用路径分隔符/的第一个参数SRC_PATH和的第二个参数DEST_PATH,其行为如下:

SRC_PATH 指定一个文件
        DEST_PATH 不存在
            该文件将保存到在以下位置创建的文件中 DEST_PATH
        DEST_PATH 不存在并以 /
            错误条件:目标目录必须存在。
        DEST_PATH 存在并且是一个文件
            目标被源文件的内容覆盖
        DEST_PATH 存在并且是目录
            使用以下文件中的基本名称将文件复制到此目录中: SRC_PATH
SRC_PATH 指定目录
        DEST_PATH 不存在
            DEST_PATH被创建为目录,并将源目录的内容复制到该目录中
        DEST_PATH 存在并且是一个文件
            错误条件:无法将目录复制到文件
        DEST_PATH 存在并且是目录
            SRC_PATH不以/. 结尾
                源目录复制到该目录
            SRC_PATH以/.  结尾
                源目录的内容被复制到该目录中

根据上述规则,该命令要求SRC_PATH和DEST_PATH存在。如果SRC_PATH是本地的并且是符号链接,则默认情况下将复制符号链接而不是目标链接。要复制链接目标而不是链接,请指定-L选项。

  • eg:
从容器里面拷文件到宿主机
docker cp -a project:/opt/abc.txt /home/
从宿主机拷文件到容器里面
docker cp /home/abc.txt project:/opt/

exec

  • 作用:在正在运行的容器中运行命令
  • 用法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

exec命令的参数和run命令的参数很多类似

OPTIONS描述
–detach , -d分离模式:在后台运行命令
–env , -e设置环境变量
–interactive , -i即使未连接STDIN也保持打开状态
–privileged赋予命令扩展权限
–tty , -t分配伪TTY
–user , -u用户名或UID
–workdir , -w容器内的工作目录
  • 扩展说明

使用docker exec容器启动的命令仅在容器的主进程(PID 1)正在运行时运行,如果重新启动容器,则该命令不会重新启动。

COMMAND将在容器的默认目录中运行。如果基础映像在其Dockerfile中具有使用WORKDIR指令指定的自定义目录,则将使用该目录。

举几个例子:

  • bash在容器上执行一个交互式shell
docker exec -it nginx  bash
  • 在当前bash会话中设置环境变量
docker exec -it -e VAR=1 nginx bash

这将在nginx容器中创建一个新的Bash会话,且它的环境变量$VAR设置为“1”。请注意,此环境变量仅在当前Bash会话上有效。

  • 命令在创建容器时在相同的工作目录中运行。
$ docker exec -it ubuntu_bash pwd
/
$ docker exec -it -w /root ubuntu_bash pwd
/root

log

  • 作用:提取容器的日志
  • 用法:
docker logs [OPTIONS] CONTAINER
OPTIONS描述
–details显示提供给日志的其他详细信息
–follow , -f跟踪日志输出
–since显示自时间戳记以来的日志或相对时间
–tail赋予命令扩展权限
–timestamps , -t显示时间戳
–until在时间戳或相对时间之前显示日志
  • eg:

为了在特定时间点之前检索日志,请运行

$ docker run --name test -d busybox sh -c "while true; do $(echo date); sleep 1; done"
$ date
Tue 14 Nov 2017 16:40:00 CET
$ docker logs -f --until=2s
Tue 14 Nov 2017 16:40:00 CET
Tue 14 Nov 2017 16:40:01 CET
Tue 14 Nov 2017 16:40:02 CET

rm

  • 作用:删除一个或多个容器
  • 用法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS描述
–force , -f强制删除正在运行的容器
–link , -l删除指定的链接
–volumes , -v删除与容器关联的匿名卷

举几个例子:

  • 强制删除运行中的容器
$ docker rm --force redis
redis
  • 删除所有停止的容器
$ docker rm $(docker ps -a -q)

此命令删除所有停止的容器。docker ps -a -q上面的命令 返回所有现有的容器ID,并将其传递给rm删除它们的命令。正在运行的容器不会被删除。

  • 删除容器及匿名卷
$ docker rm -v redis
redis

该命令将删除容器及其关联的任何卷。请注意,如果使用名称指定了卷,则不会将其删除。

  • 删除容器,并且选择性地去除卷
$ docker create -v awesome:/foo -v /bar --name hello redis
hello
$ docker rm -v hello

在此示例中,存储卷/foo保持不变,但是的匿名卷/bar被移除。

diff

  • 作用:检查容器文件系统上文件或目录的更改
  • 用法:
docker diff CONTAINER
  • eg:
[root@localhost ~]# docker diff nginx
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
符号描述
A添加了文件或目录
D文件或目录已删除
C文件或目录已更改

stop

  • 作用:停止一个或多个运行中的容器
  • 用法:docker stop [OPTIONS] CONTAINER [CONTAINER…]
参数描述
–time , -t等待杀死的秒数,然后将其杀死
  • eg:
$ docker stop  nginx

start

  • 作用:启动一个或多个已停止的容器
  • 用法:docker start CONTAINER [CONTAINER…]
  • eg:
$ docker start  nginx

其他

volume

  • 作用:存储卷管理

举几个常用的例子:

  • 新建存储卷

docker volume create [OPTIONS] [VOLUME]

OPTIONS描述
–driver , -d 默认 local指定卷驱动程序名称
–label设置卷的元数据
–name指定卷名
–opt , -o设置驱动程序特定选项
创建一个卷,并启动一个容器引用该存储卷
$ docker volume create hello
hello
docker run -itd  --name mysql -p 3306:3306  --privileged=true  -v hello:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mysql

创建一个tmpfs名为foo 大小为100MB和uid1000的卷。
$ docker volume create --driver local \
    --opt type=tmpfs \
    --opt device=tmpfs \
    --opt o=size=100m,uid=1000 \
    foo

从nfs中挂载/path/to/dirin rw模式 192.168.1.1:
$ docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.1.1,rw \
    --opt device=:/path/to/dir \
    foo
  • 列出卷清单

docker volume ls [OPTIONS]

OPTIONS描述
–filter , -f提供过滤器值(例如’dangling = true’)
–format使用Go模板打印漂亮的卷
–quiet , -q仅显示卷名
$ docker volume ls

DRIVER              VOLUME NAME
local               rosemary
local               tyler
  • 删除所有未使用的本地卷

docker volume prune [OPTIONS]

OPTIONS描述
–filter提供过滤器值(例如’label =’)
–force , -f不提示确认
$ docker volume prune

WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
07c7bdf3e34ab76d921894c2b834f073721fccfbbcba792aa7648e3a7a664c2e
my-named-vol

Total reclaimed space: 36 B

ps

  • 作用:列出容器
  • 用法:docker ps [OPTIONS]
参数描述
–all , -a显示所有容器(默认显示为正在运行)
–filter , -f根据提供的条件过滤输出
–format使用Go模板打印漂亮的容器
–last , -n显示n个最后创建的容器(包括所有状态)
–latest , -l显示最新创建的容器(包括所有状态)
–quiet , -q仅显示数字ID
–size , -s显示文件总大小
  • eg:
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                               NAMES
55a00a8af099        nginx                 "nginx -g 'daemon of…"   4 hours ago         Up 8 minutes        80/tcp                              nginx
1c12274de353        jenkinsci/blueocean   "/sbin/tini -- /usr/…"   6 days ago          Up 6 days           0.0.0.0:8080->8080/tcp, 50000/tcp   jenkins

images

  • 作用:列出镜像
  • 用法:docker images [OPTIONS] [REPOSITORY[:TAG]]
参数描述
–all , -a显示所有镜像(默认隐藏中间镜像)
–filter , -f根据提供的条件过滤输出
–format使用Go模板打印漂亮的容器
–digests显示摘要
–quiet , -q仅显示数字ID
  • eg:
$ docker images java

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
java                8                   308e519aac60        6 days ago          824.5 MB
java                7                   493d82594c15        3 months ago        656.3 MB
java                latest              2711b1d6f3aa        5 months ago        603.9 MB

system

  • 作用:管理Docker
  • 用法:docker system COMMAND

举几个常用的例子:

  • 显示Docker磁盘使用情况
[root@localhost ~]# docker system df -v
Images space usage:

REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE                SHARED SIZE         UNIQUE SIZE         CONTAINERS
jenkinsci/blueocean   latest              b13e019d0f69        7 days ago          567.7MB             0B                  567.7MB             1
nginx                 latest              9beeba249f3e        9 days ago          126.8MB             0B                  126.8MB             1

Containers space usage:

CONTAINER ID        IMAGE                 COMMAND                  LOCAL VOLUMES       SIZE                CREATED             STATUS              NAMES
55a00a8af099        nginx                 "nginx -g 'daemon of…"   0                   47B                 4 hours ago         Up 12 minutes       nginx
1c12274de353        jenkinsci/blueocean   "/sbin/tini -- /usr/…"   2                   14.3MB              6 days ago          Up 6 days           jenkins

Local Volumes space usage:

VOLUME NAME                                                        LINKS               SIZE
jenkins-data                                                       1                   0B
3159d2edffe4e610a309e94edda2932296de1e2c73f0c48b9d6327c39f73580b   1                   340.1MB

Build cache usage: 0B

CACHE ID            CACHE TYPE          SIZE                CREATED             LAST USED           USAGE               SHARED

#SHARED SIZE 是图像与另一图像共享的空间量(即它们的公共数据)
#UNIQUE SIZE 是仅给定图像使用的空间量
#SIZE是图像的虚拟大小,它是的总和SHARED SIZE与UNIQUE SIZE
#未显示网络信息,因为它不占用磁盘空间。
  • 显示系统范围的信息
[root@localhost ~]# docker system info
Client:
 Debug Mode: false

Server:
 Containers: 2
  Running: 2
  Paused: 0
  Stopped: 0
 Images: 2
 Server Version: 19.03.4
 Storage Driver: overlay2
  Backing Filesystem: xfs
  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: b34a5c8af56e510852c35414db4c1f4fa6172339
 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.3.11-1.el7.elrepo.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 8
 Total Memory: 15.61GiB
 Name: localhost.localdomain
 ID: 6GIS:LCQT:PWIR:OT3H:P7FV:FJWL:KQIT:6DR3:ENQC:HIRQ:4NV2:D7OL
 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
 Registry Mirrors:
  https://1nj0zren.mirror.aliyuncs.com/
  https://docker.mirrors.ustc.edu.cn/
  http://f1361db2.m.daocloud.io/
  https://registry.docker-cn.com/
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
  • 删除未使用的数据(一般磁盘空间不够需要执行这个命令来清理)
docker system prune [OPTIONS]
参数描述
–all , -a删除所有未使用的镜像,而不仅仅是悬空的镜像
–force , -f不提示确认
–volumes删除卷
$ docker system prune -a

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y

Deleted Containers:
f44f9b81948b3919590d5f79a680d8378f1139b41952e219830a33027c80c867
792776e68ac9d75bce4092bc1b5cc17b779bc926ab04f4185aec9bf1c0d4641f

Deleted Networks:
network1
network2

Deleted Images:
untagged: hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
deleted: sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57
deleted: sha256:45761469c965421a92a69cc50e92c01e0cfa94fe026cdd1233445ea00e96289a

Total reclaimed space: 1.84kB

inspect

  • 作用:返回有关Docker对象的信息
  • 用法:docker inspect [OPTIONS] NAME|ID [NAME|ID…]
参数描述
–format, -f使用Go模板打印漂亮的容器
–size , -s如果类型为容器,则显示文件总大小
–type返回指定类型的JSON
  • eg:
获得容器的基本信息

docker inspect nginx

获取实例的IP地址

[root@localhost ~]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx
172.17.0.3

获取实例的MAC地址

[root@localhost ~]#  docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' nginx
02:42:ac:11:00:03

获取实例的日志路径

[root@localhost ~]# docker inspect --format='{{.LogPath}}' nginx
/var/lib/docker/containers/55a00a8af09993ab9c69ee570d7cdf0fb90ac9d76579d9640137311962d9eaab/55a00a8af09993ab9c69ee570d7cdf0fb90ac9d76579d9640137311962d9eaab-json.log

获取实例的镜像名称

[root@localhost ~]# docker inspect --format='{{.Config.Image}}' nginx
nginx

列出所有端口绑定,可以遍历数组和结果中的映射以产生简单的文本输出:

[root@localhost ~]# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' `docker ps -a -q`

获取JSON格式的返回信息

[root@localhost ~]# docker inspect --format='{{json .Config}}' nginx
{"Hostname":"55a00a8af099","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"ExposedPorts":{"80/tcp":{}},"Tty":true,"OpenStdin":true,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.17.10","NJS_VERSION=0.3.9","PKG_RELEASE=1~buster"],"Cmd":["nginx","-g","daemon off;"],"Image":"nginx","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{"maintainer":"NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal":"SIGTERM"}

总结

基本上常用的docker命令我都总结到这篇文章了,希望对大家有帮助,谢谢。

参考文献

docker安装官方文档
dockercli官方文档


版权声明:

原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值