前言
这些是我在使用docker时整理的一些常见的命令,可能不太详细
一、镜像相关
1.1列出拉取的所有镜像
docker images
1.2删除镜像,容器要先停止
docker rmi 镜像id
1.3 save命令导出
docker save -o nginx.tar nginx:latest 或docker save nginx:latest > nginx.tar
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
1.4 load命令导入
docker load -i nginx.tar 或docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
1.5 export命令导出
docker export -o nginx-test.tar nginx-test
其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
1.6 import命令导入
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp
1.7 save和export的区别
export命令导出的tar文件略小于save命令导出的
export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。
1.8 tag命令修改镜像名字
docker tag 镜像id 镜像名字:镜像版本
例如:
docker tag 529706353c34 nginx:latest
1.9 建议
可以依据具体使用场景来选择命令
若是只想备份images,使用save、load即可
若是在启动容器后,容器内容有变化,需要备份,则使用export、import
二、容器相关
2.1运行容器
docker run [Options] 镜像名称 [COMMAND] [ARG...]
Options
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name nginx-lb: 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷,挂载目录,规则与端口映射相同,-v 宿主机目录:容器目录
--rm:容器退出时自动清理容器内部的文件系统。
2.2删除容器
docker rm 容器id
2.3 停止容器
docker stop 容器id
2.4 重启容器
docker restart 容器id
2.5 查看正在运行的容器
docker ps
查看容器的详细命令
docker ps -a --no-trunc
2.6 查看所有容器(包括未运行的)
docker ps -a
2.7 查看容器运行日志
docker logs [Options] 容器名称/容器id
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子:
查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
2.8 在运行的容器中执行命令
docker exec [Options] 容器ID /bin/bash
Options:
-d : 分离模式: 在后台运行
-i : 即使没有附加也保持STDIN 打开
-t : 分配一个伪终端
例子:
在容器名称 my-nginx 中开启一个交互模式的终端
docker exec -it my-nginx /bin/bash
三、容器和镜像
3.1获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID
Options:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
写在最后的话
有些命令是学习的时候老师教的,有些命令是复制其他博客的,然后汇集了这一堆docker命令。