声明:这是我在大学毕业后进入第一家互联网工作学习的内容
深入浅出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命令我都总结到这篇文章了,希望对大家有帮助,谢谢。
参考文献
版权声明:
原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。