Docker命令最详介绍,你值得拥有!

一、Docker镜像管理

1.搜索镜像

格式:
docker search [选项] <仓库名|仓库名:标签>
选项:
-f, --filter filter:
--format string:
--limit int:
--no-trunc:显示完整的镜像描述;
例如:
docker search --no-trunc java

2.获取镜像

格式:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
选项:
-a:拉取所有tag镜像;
--disable-content-trust :忽略镜像的校验,默认开启;
例如:
docker pull java:8

3.镜像信息

3.1.查看镜像列表

docker images
docker image ls
docker image ls --digests #查看镜像摘要;
docker image ls java
docker image ls java:8
docker image ls -f since= java:8 #列出java:8镜像之前的所有镜像;
docker image ls -f before=java:8 #列出java:8镜像之后的所有镜像;
docker image ls -f label=Label=0.1 #根据标签内容过滤出镜像;

3.2.查看镜像体积

docker system df

3.3.查看虚悬镜像

docker image ls -f dangling=true
解释:什么属于虚悬镜像?仓库名、标签均为<none>的镜像;

3.4.查看中间层镜像

docker image ls -a

3.5.特定格式显示

docker image ls -q
docker image ls --format "{{.ID}}: {{.Repository}}"
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

4.删除镜像

格式:
docker image rm [选项] <镜像1> [<镜像2> ...]
选项:
-f :表示强行删除镜像;
docker image rm [-f] < 镜像名|镜像ID|仓库名:标签|镜像摘要 >
docker image rm [-f] < 镜像名|镜像ID|仓库名:标签|镜像摘要 >
注意:Untagged 和 Deleted;
因为一个镜像可能对应不同的标签,根据仓库名:标签删除镜像,显示“Untagged”实际是上删除标签;

5.镜像导出/导入

5.1.压缩包导入镜像(与export一对)

格式:
docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]
例如:
docker import \ download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz \ openvz/ubuntu:14.04

5.2.保存镜像(迁移备份)

docker save <repository>:<tag> -o <repository>.tar 导入时才有repository:tag
docker save -o xxx.tar 镜像ID #生成在当前目录下
docker save -i xx.tar
docker save > xxx.tar

5.3.导入镜像

docker load --input xxx.tar
docker load < xx.tar
docker load -i xx.tar

6.构建镜像

6.1.commit(将容器构建成镜像)

格式:
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
选项:
-a, --author string:指定修改作者;
-c, --change list:使用Dockerfile指令来创建镜像;
-m, --message string:定义修改内容;
-p, --pause:提交时将容器暂停;
例如:
docker commit \ --author "Zhang San <zangs@163..com>" \ --message "修改Nginx配置" \ NginxServer \ nginx:v3 解释:
NginxServer:指定使用哪个容器,也可以指定容器ID;
nginx:v3:指定构建镜像的仓库名:标签;

6.2.Dockerfile

格式:
docker build [选项] <上下文路径/URL/->
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
-q :安静模式,成功后只输出镜像ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
例如:
docker build Dokcerfile .
docker build - < Dockerfile #从标准输入读取Dockerfile构建;
cat Dockerfile | docker build -
docker build context.tar.gz #tar压缩包构建
docker build - < context.tar.gz #从标准输入中读取tar压缩包构建
docker build twang2218/gitlab-ce-zh.git#:8.14 #基于Git Repo构建
注意:
如果标准输入传入的是文件,将被视为Dockerfile,并开始构建,但是由于这种方式是直接从标准输入中读取Dockerfile文件内容,它没有上下文,因此不可以像其他方法那样将本地方文件COPY进镜像之类的事情;
如果标准输入传入的是压缩文件,文件格式是gzip、bzip2、xz,将会自动解压,视里面内容为上下文,并且开始构建;

查看镜像创建历史

docker history [选项]
选项:
-H, --human:可读的格式打印镜像大小和日期;
--no-trunc:显示完整的提交记录;
-q, --quiet:仅列出提交ID;

登录/退出docker镜像仓库

格式:
docker login [仓库地址:端口] [选项]
选项:
-u:指定用户;
-p:指定密码;
例如:
docker login docker.kry.cn -u admin
注意:如果不指定仓库地址,默认登陆Hub仓库;

标记镜像

格式:
docker tag <仓库名:标签|镜像ID> <新仓库名:标签>
例如:
docker tag f32a97de94e1 docker.kry.cn/registry:v1.2
docker tag registry:latest docker.kry.cn/registry:v1.3

上传镜像到镜像仓库

格式:
docker push [选项] <仓库名:标签>
--disable-content-trust :忽略镜像的校验,默认开启;
例如:
docker push registry:v1.3

二、Docker容器管理

1.容器操作命令

docker container [选项] [参数]
选项:
attach:将标准输入输出及错误附加入容器,当退出时容器也跟随退出;
commit:从容器构建一个新镜像;
cp:容器与本地之间相互复制文件或文件夹;
create:创建一个新容器;
diff:检查容器文件系统的改变;
exec:进入正在运行的容器中;
export:导出容器的文件系统作为tar文件;
inspect:将tar文件导入成镜像;
kill:杀死一个或多个正在运行的容器;
logs:获取容器日志;
ls:列出容器;
pause:暂停一个或多个运行的容器的所有进程;
port:列出容器映射端口;
prune:删除所有已停止的容器;
rename:修改容器名称;
restart:重启一个或多个容器;
rm:删除一个或多个容器;
run:运行容器;
start:启动一个或多个容器;
stats:查看容器状态;
stop:停止一个或多个容器;
top:查看容器内部运行进程;
unpause:恢复一个或多个容器中暂停的所有进程;
update:更新一个或多个容器配置;
wait:等待阻塞,直到一个或多个容器停止,输出退出代码;

2.创建容器

格式:
docker create [选项] <镜像名:标签|镜像ID>
格式:
--name:指定容器名称;
--network:指定容器连接网络;
-h,--hostname:指定主机名称,例如:-h web 或 --hostname=web;
--dns:指定容器DNS,例如:--dns=61.139.2.69
--dns-search:设置容器搜索域;
--restart string:指定重启策略,默认为no,on-failure表示容器状态非0重启,always表示只要退出就重启;

3.启动容器

docker container start 容器ID #启动一个没有运行的容器;
docker run -itd centos /bin/bash #创建容器并运行,并进入容器中;
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器;
-i: 以交互模式运行容器;
-t: 分配一个伪输入终端;
-v:将本地目录加载到容器,实例 -v /data:/data/www
--name="nginx-lb": 指定容器名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器;
--dns-search example.com: 指定容器DNS搜索域名;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络类型,支持 bridge/host/none/container;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--restart string:指定重启策略,默认为no,on-failure表示容器状态非0重启,always表示只要退出就重启;

4.查看容器

格式:
docker ps [选项]
docker container ls [选项]
选项:
-a, --all:查看所用容器(停止与运行);
-f, --filter filter:
--format string:使用Go模板打印容器信息;
-n, --last int:显示最后创建的容器,默认-1;
-l, --latest:显示最新创建容器;
--no-trunc:
-q, --quiet:只显示容器ID;
-s, --size:显示容器总文件大小
例如:
docker ps -a
docker container ls -a

5.停止容器

docker container stop 容器ID
例如:
docker container stop $(docker ps -aq)
a:列出所有容器;
q:返回容器ID;

6.进入容器

格式:
docker exec [选项] <容器ID|容器名> /bin/bash
-d, --detach:在后台运行;
--detach-keys string:覆盖容器的运行参数;
-e, --env list:设置环境变量;
-i, --interactive:即使没有附加也保持STDIN 打开;
--privileged:赋予命令扩展权限;
-t, --tty:分配一个伪终端;
-u, --user string:设置用户名,格式: <name|uid>[:<group|gid>];
-w, --workdir string:指定容器内的目录;
例如:
docker exec -it 31e61e /bin/bash

7.复制

格式:
从容器复制到本地:
docker cp [选项] 容器ID|容器名:源文件路径 目标路径

从本地复制到容器:

docker cp [选项] 本地源文件路径 容器ID|容器名:目标路径
选项:
-a, --archive:复制所有属性(uid/gid);
-L, --follow-link:保持源目标中的链接;
例如:
docker cp /data/user.txt ad586a31e61e:/userlist.txt
docker cp ss_java.plmpacv2n775:/web.jar /data/jar/web.jar

8.导出导入(export/import )

export

格式:
docker export [选项] 容器ID > tar文件名
选项:
-o, --output string:指定写入文件;
例如:
docker export ad586a31e61e > registry:v0.1.tar
docker export -o /data/bak/registry:v0.1.date +%Y%m%d.tar ad586a31e61e

import

格式:
cat tar文件名 | docker import - 仓库名:标签
例如:
cat registry:v0.1.tar | docker import - egistry:v0.1
docker import exampleimage.tgz example/imagerepo

9.删除容器

格式:
docker container rm [选项] <容器ID|容器名>
选项:
-f :通过SIGKILL信号强制删除一个运行中的容器;
-l :移除容器间的网络连接,而非容器本身;
-v :-删除与容器关联的卷;
例如:
docker container rm -f ad586a31
docker container rm suspicious_curie
docker container prune #清理所有终止状态的容器;

10.杀掉容器

格式:
docker kill [选项] <容器ID|容器名>
选项:
-s, --signal string:向容器发送一个信号;
例如:
docker kill vsp7hp632exeh3d2e

11.暂停恢复容器

docker pause <容器ID|容器名>
docker unpause <容器ID|容器名>

12.修改容器名称

格式:
docker rename 容器名 新容器名
例如:
docker rename ss_registry.1.pjm registry

13.查看容器日志

格式:
docker container logs [选项] <容器ID|容器名>
选项:
--details:
-f, --follow:跟踪日志输出;
--since string:显示某个开始时间的所有日志;
--tail string:仅列出最新N条容器日志;
-t, --timestamps:显示时间戳;
--until string:显示某个日期之前的日志内容;
例如:
docker container logs -f 1b819fb9e71c #追踪日志内容;
docker container logs -t --tail 2 1b819fb9e71c #显示最新2条日志内容;
docker container logs -t --until 2019-08-02 1b819fb9e71c #显示8月2日之前所有日志内容;

14.查看容器详细信息

格式:
docker inspect [选项] <容器ID|容器名>
选项:
-s, --size:显示总的文件大小;
--type string:为指定类型返回JSON;
例如:
docker inspect 1b819fb9e71c

15.查看容器内部进程

例如:
docker top 1b819fb9e71c

16.阻塞运行直到容器停止

例如:docker wait 1b819fb9e71c

17.查看容器端口映射

格式:
docker port <容器ID|容器名> <PRIVATE_PORT[/PROTO]>
例如:
docker port 1b819fb9e71c

18.检查容器文件结构更改

格式:
docker diff <容器ID>
例如:
docker diff 1b819fb9e71c

三、Docker数据管理

容器中数据管理分为两种方式:
数据卷(Volumes)
挂载主机目录 (Bind mounts)

1.创建数据卷

格式:
docker volume create [选项] <数据卷名称>
选项:
-d, --driver string:
--label list:
-o, --opt map:
例如:
docker volume create web-vol

2.查看数据卷

格式:
docker volume ls [选项]
选项:
-f, --filter filter:
--format string:
-q, --quiet:只显示数据卷名称(volume names);
例如:
docker volume ls
docker inspect web-vol #查看数据卷详细信息;

3.挂载数据卷

格式:
-v <source:target>
--help <source:target>
--mount [type],<source|src>,<destination|dst|target>,[readonly],[volume-opt]
参数:
readonly:挂载为只读;
例如:
docker run -d --name web --mount source=web-vol,target=/web nginx:v1.2
docker run -d --name web --mount source=/data/web,target=/web nginx:v1.2
docker run -d --name web - v web-vol:/web nginx:v1.2

4.删除数据卷

格式:
docker volume rm <volumes names>
例如:
docker volume rm web-vol
docker volume prune #清理无主的数据卷;

四、Docker网络

提示:更多网络配置查看网络文档;

1.网络相关设置

-b BRIDGE或--bridge=BRIDGE:指定容器挂载的网桥;
--bip=CIDR:定制 docker0 的掩码
-H SOCKET...或--host=SOCKET...:Docker服务端接收命令的通道;
--icc=true|false:是否支持容器之间进行通信
--ip-forward=true|false:请看下文容器之间的通信
--iptables=true|false:是否允许 Docker 添加 iptables 规则
--mtu=BYTES:容器网络中的 MTU

运行时配置:

--dns=IP_ADDRESS:使用指定的DNS服务器;
--dns-search=DOMAIN:指定DNS搜索域;
-h HOSTNAME或--hostname=HOSTNAME:配置容器主机名;
--link=CONTAINER_NAME:ALIAS:添加到另一个容器的连接;
--net=bridge|none|container:NAME_or_ID|host:配置容器的桥接模式;
-p SPEC或--publish=SPEC:映射容器端口到宿主主机;
-P or --publish-all=true|false:映射容器所有端口到宿主主机;

2.端口映射

-p:指定映射端口,格式:-p [IP:]hostPort:containerPort;
-P:随机映射一个端口;
例如:
docker run -d -P registry:latest
docker run -d -p 5000:5000 registry:latest
docker run -d -p 192.168.88.100::5000 registry:latest

3.查看端口映射

docker port bdf12f

4.容器互联

创建网络
格式:
docker network create [选项] <NetworkName>
选项:
-d, --driver:指定网络类型;
例如:
docker network create -d bridge app
创建容器指定app网络
docker run -d --name nginx --network app nginx:v1.2
docker run -d --name tomcat --network app tomcat:v0.2

5.DNS配置

vim /etc/docker/daemon.json

{
  "dns" : [
    "61.139.2.69",
    "8.8.8.8"
  ]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容