1 帮助命令
-
docker help
查看命令的帮助信息语法:docker help [OPTIONS]
[OPTIONS]参数说明:命令的名称
示例:
2 docker信息查看
-
docker version
显示 Docker 版本信息语法:docker version
示例:
-
docker info
显示 Docker 系统信息,包括镜像和容器数语法:docker info
示例:
3、镜像仓库相关
3.1 查找镜像
-
docker search
从Docker Hub查找镜像
语法:docker search [OPTIONS] 镜像名包含的字符串
[OPTIONS]参数说明:
- -f <过滤条件>: 列出收藏数不小于指定值的镜像,例如查找所有镜像名包含 tomcat,并且收藏数大于 10 的镜像:
docker search -f stars=10 tomcat
- - -no-trunc : 显示完整的镜像描述
- - -automated : 只列出 automated build类型的镜像;
示例:
命令返回结果说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布 OK 代表是官方镜像
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思
AUTOMATED: 自动构建
- -f <过滤条件>: 列出收藏数不小于指定值的镜像,例如查找所有镜像名包含 tomcat,并且收藏数大于 10 的镜像:
3.2 拉取镜像
-
docker pull
从镜像仓库中拉取或者更新指定镜像
语法:docker pull [OPTIONS] 镜像名字[:TAG]
[OPTIONS]参数说明:
使用时很少带参数,一般只需要指定镜像名称和TAG(版本号)- -a : 拉取所有 tagged 镜像
- - -disable-content-trust : 忽略镜像的校验,默认开启
示例:
3.3 登录/登出镜像库
- docker login、logout
登陆/退出登录到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
语法:docker login [OPTIONS] [SERVER]
[OPTIONS]参数说明:
- -u : 登陆的用户名
- -p : 登陆的密码
示例登录阿里云的个人镜像容器:
docker login -u 用户名 -p 密码
docker login --username=四个赖子来油 registry.cn-hangzhou.aliyuncs.com
docker logout 登出
阿里云镜像容器配置密码:
3.4 上传本地镜像到仓库
-
docker push
使用login登陆到镜像仓库,将本地的镜像上传到镜像仓库
语法:docker push [OPTIONS] NAME[:TAG]
参数说明:- -disable-content-trust : 忽略镜像的校验,默认开启
示例:
先使用tag命令标记本地镜像,然后push到自己的阿里云仓库
使用如下命令将my-hello-world镜像push到我们自己的阿里云镜像仓库:
docker tag my-hello-world registry.cn-hangzhou.aliyuncs.com/yanlei_aliyun/hub.study.com:1.0
docker push registry.cn-hangzhou.aliyuncs.com/yanlei_aliyun/hub.study.com:1.0
命令格式:
$ docker login --username=四个赖子来油 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] RegistryHost/userName/仓库名称:[镜像版本号]
$ docker push RegistryHost/userName/仓库名称:[镜像版本号]
再进入到阿里云容器,最开始看到镜像id是一长串字符串,还有点不太懂,本以为应该是my-hello-world,后来才发现我最开始理解成一个仓库是存放很多个不同的镜像了。实际上我们应该在同一个仓库中存储同一个镜像的不同版本。所以我们在设置仓库名称的时候,就应该将名称设置为镜像的名称。
4、本地镜像管理
4.1 查看本地镜像
-
docker images
列出本地镜像语法:docker images [OPTIONS]
参数说明:
- -a : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- - -digests : 显示镜像的摘要信息;
- -f : 显示满足条件的镜像;
- - -format : 指定返回值的模板文件;
- - -no-trunc : 显示完整的镜像信息;
- -q : 只显示镜像ID。
示例:
4.2 删除本地镜像
-
docker rmi
删除本地一个或多少镜像语法:docker rmi [OPTIONS] IMAGE [IMAGE…]
参数说明:
- -f : 强制删除;
- - -no-prune : 不移除该镜像的过程镜像,默认移除;
示例:
- 删除单个
docker rmi -f 镜像ID
- 删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
- 删除全部
docker rmi -f $(docker images -qa)
4.3 标记本地镜像
-
docker tag
标记本地镜像。有点类似虚拟机的快照,使用当前镜像,生成一个不同版本的镜像文件语法:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
参数说明:REGISTRYHOST和 USERNAME参考docker push中push到阿里云仓库
示例:
4.4 使用dockerfile构建镜像
-
docker build
使用 Dockerfile 创建镜像。语法:docker build [OPTIONS] PATH | URL | -
PATH | URL | -
在使用远程dockerfile时使用参数说明:
-f :指定要使用的Dockerfile路径;
–tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
-m :设置内存最大值;
–build-arg=[] :设置镜像创建时的变量;
–cpu-shares :设置 cpu 使用权重;
–cpu-period :限制 CPU CFS周期;
–cpu-quota :限制 CPU CFS配额;
–cpuset-cpus :指定使用的CPU id;
–cpuset-mems :指定使用的内存 id;
–disable-content-trust :忽略校验,默认开启;
–force-rm :设置镜像过程中删除中间容器;
–isolation :使用容器隔离技术;
–label=[] :设置镜像使用的元数据;
–memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
–no-cache :创建镜像的过程不使用缓存;
–pull :尝试去更新镜像的新版本;
–quiet, -q :安静模式,成功后只输出镜像 ID;
–rm :设置镜像成功后删除中间容器;
–shm-size :设置/dev/shm的大小,默认值是64M;
–ulimit :Ulimit配置。
–squash :将 Dockerfile 中所有的操作压缩为一层。
–network: 默认 default。在构建期间设置RUN指令的网络模式示例: 使用本地dockerfile创建镜像
docker build -f ./dockerfile-volume_test -t my-centos .
最后有一个点,表示当前文件所处的上下文环境的目录
4.5 镜像的构建历史
-
docker history
查看指定镜像的创建历史语法:docker history [OPTIONS] IMAGE
参数说明:
- -H : 以可读的格式打印镜像大小和日期,默认为true;
- –no-trunc : 显示完整的提交记录;
- -q : 仅列出提交记录ID。
示例:
4.6 将镜像打包为文件
-
docker save
将指定镜像保存成 tar 归档文件语法:docker save [OPTIONS] IMAGE [IMAGE…]
参数说明:-o : 输出到的文件。
示例:将镜像 redis:3.2.7 生成 redis.tar
docker save -o /tmp/redis.tar redis:3.2.7
4.7 导入使用 docker save 命令打包的镜像
-
docker load
导入使用 docker save命令打包的镜像语法:docker load [OPTIONS]
参数说明:
- –input , -i : 指定导入的文件,代替 STDIN。
- –quiet , -q : 精简输出信息。
示例:docker load -i /tmp/hw.tar
4.8 将运行镜像所产生的容器打包
-
docker export
将文件系统(也就是运行镜像所产生的容器)作为一个tar归档文件导出到STDOUT
语法:docker export [OPTIONS] CONTAINER
参数说明:-o : 将输入内容写到文件
示例:
在容器的/tmp/yyyL
目录下创建了一个文件:
将id为9c5c6000931e的容器保存为tar文件:docker export -o ./docker-tar/my-centos-vim.tar 9c5c6000931e
4.9 将docker export打包的容器tar生成镜像
-
docker import
从归档文件中创建镜像语法:docker import [OPTIONS] file [REPOSITORY[:TAG]]
参数说明:
- -c:应用docker 指令创建镜像;
- -m : 提交时的说明文字;
示例:
使用命令导入my-centos-vim.tar(在通过容器生成该打包文件时,在/tmp/yyyL下创建了一个yl.txt文件):docker import my-centos-vim.tar my-centos-vim-import:1.0
运行导入的容器:如果使用docker run -it my-centos-vim-import:1.0
运行则会报如下错误:
[root@localhost docker-tar]# docker run -it my-centos-vim-import:1.0
docker: Error response from daemon: No command specified.
See 'docker run --help'.
需要在最后添加一个command命令docker run -it my-centos-vim-import:1.0 /bin/bash
。
因为方便学习,使用的实际还是一个centos,所以使用/bin/bash
也可以运行,在实际工作中,如果要正确的运行,需要通过查询原容器的command命令得到。
5、容器的创建、运行、启动暂停
5.1 创建容器
-
docker create
创建容器但不启动语法:docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
参数说明:
示例:
5.2 创建并运行容器
-
docker run
创建一个新的容器并运行一个命令语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
参数说明:
–name=“nginx-lb”: 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
–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=[]: 开放一个端口或一组端口;
–volume , -v: 绑定一个卷示例:
(1)docker run -d 若容器没有运行中的前台进程,容器会自动关闭。
例如在运行后执行脚本一直打印“centos run …”,则不会使得容器结束:docker run -d centos:7 /bin/sh -c "while true;do echo centos run ...;sleep 2;done"
(2)启动tomcat
以前台方法启动:docker run -it --name="tomcat" -p 8888:8080 tomcat:8.5.32
、docker run -it centos:7 /bin/bash
以后台方法启动:docker run -d --name="tomcat" -p 8888:8080 tomcat:8.5.32
注意:最新版的tomcat没有webapps目录,访问会报404.建议学习演示为了方便,使用8.5.32版本
通过宿主机访问
若访问不通,对于CentOS7,可以关闭防火墙systemctl stop firewalld
进入tomcat容器内部:docker exec -it dfc628d98a0e /bin/bash
注意,我这边尝试,只能使用exec命令进入,attach无法进入。
5.3 启动已经停止的容器
- docker start
启动已经停止的容器
语法:docker start [OPTIONS] CONTAINER [CONTAINER…]
参数说明:
示例:
5.4 停止运行中的容器
-
docker stop
停止运行中的容器语法:docker stop [OPTIONS] CONTAINER [CONTAINER…]
参数说明:
示例:
5.5 重启容器
-
docker restart
重启容器语法:docker restart [OPTIONS] CONTAINER [CONTAINER…]
参数说明:
示例:
5.5 杀掉运行的容器
-
docker kill
杀掉一个运行中的容器语法:docker kill [OPTIONS] CONTAINER [CONTAINER…]
参数说明:
-s :向容器发送一个信号示例:
5.6 查看容器的进程
-
docker top
与普通宿主机的命令基本一致,使用docker top命令可以查看容器内的cpu和内存使用情况语法:docker top CONTAINER
示例:
5.7 删除容器
-
docker rm
删除容器语法:docker rm [OPTIONS] CONTAINER [CONTAINER…]
参数说明:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。示例:
强制删除容器 db01、db02:docker rm -f db01 db02
移除容器 nginx01 对容器 db01 的连接,连接名 db:docker rm -l db
删除容器 nginx01, 并删除容器挂载的数据卷:docker rm -v nginx01
删除所有已经停止的容器:docker rm $(docker ps -a -q)
5.8 暂停容器中所有的进程
-
docker pause
暂停容器中所有的进程语法:docker pause CONTAINER [CONTAINER…]
参数说明:
示例:启动tomcat容器,然后暂停容器的进程,此时是无法访问tomcat的默认页面。
5.9 恢复容器中所有的进程
-
docker unpause
暂停容器中所有的进程语法:docker unpause CONTAINER [CONTAINER…]
参数说明:
示例:恢复使用使用
docker pause
暂停了进程的容器
5.10 从容器创建一个新的镜像
- docker commit
从容器创建一个新的镜像
语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
参数说明:
-a :提交的镜像作者
-c :使用Dockerfile指令来创建镜像
-m :提交时的说明文字
-p :在commit时,将容器暂停
示例: docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
对删除config目录后的tomcat容器打包,生成镜像
打包容器:docker commit -m="将tomcat的config目录删掉后重新生成镜像" -a="YL" dfc628d98a0e my-tomcat:v1.0
使用完整的tomcat镜像和刚刚删除了config目录后打包的镜像分别创建容器实例,访问结果如下:
5.11 从容器中退出
1、exit
停止容器并退出
2、ctrl+P+Q
在不关闭容器的情况下退出
6、容器相关操作
6.1 查看容器
-
docker ps
查看有哪些容器语法:docker ps [OPTIONS]
参数说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
–format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
–no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。示例:
6.2 查看容器的内部细节
-
docker inspect
获取容器/镜像的元数据语法:docker inspect [OPTIONS] NAME|ID [NAME|ID…]
参数说明:
-f :指定返回值的模板文件
-s :显示总的文件大小
–type :为指定类型返回JSON示例:
6.3 连接到正在运行中的容器
-
docker attach
连接到正在运行中的容器语法:docker attach [OPTIONS] CONTAINER
参数说明:
示例:
6.4 在运行的容器中执行命令
-
docker exec
在运行的容器中执行命令语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
参数说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端示例:
(1)docker exec -t 6746ea0be680 ls -l /tmp/
(2)docker exec -it 6746ea0be680 /bin/bash
可以实现和docker attach
相同的功能
6.5 实时监听docker的事件操作
-
docker events
会实时监听docker的事件然后输出日志信息示例:
开了两个shell窗口,一个窗口执行docker events后会阻塞,然后开始监听docker的事件。当在另一个窗口执行容器的启动和暂停操作后,就会打印相应的操作日志。
6.6 获取容器的日志
-
docker logs
获取容器的日志语法:docker logs [OPTIONS] CONTAINER
参数说明:
-f : 跟踪日志输出
–since :显示某个开始时间的所有日志
-t : 显示时间戳
–tail :仅列出最新N条容器日志示例:
6. 7 阻塞运行的容器
-
docker wait
阻塞运行直到容器停止,然后打印出它的退出的状态码。语法:docker wait [OPTIONS] CONTAINER [CONTAINER…]
状态码 | 描述 |
---|---|
0 | 表示正常退出 |
非 0 | 表示异常退出(退出状态码采用 chroot 标准) |
125 | Docker 守护进程本身的错误 |
126 | 容器启动后,要执行的默认命令无法调用 |
127 | 容器启动后,要执行的默认命令不存在 |
137 | 表明容器收到了 SIGKILL 信号,进程被杀掉,对应kill -9 |
139 | 表明容器收到了 SIGSEGV 信号,无效的内存引用,对应kill -11 |
143 | 表明容器收到了 SIGTERM 信号,终端关闭,对应kill -15 |
示例: 使用docker wait a67a513066e9
监听容器退出。然后另开窗口执行stop。
6.8 查看容器的端口映射
-
docker port
列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口语法:docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
参数说明:
PRIVATE_PORT:指定查询的容器内部端口
PROTO:协议的类型(tcp、udp)示例:
6.9 查看容器内文件的增删改
-
docker diff
将该容器与创建该容器的镜像进行比较,查看容器内文件的增删改语法:docker diff [OPTIONS] CONTAINER
该命令可以追踪容器内文件的以下三种变化
符号 | 描述 |
---|---|
A | 创建了文件或目录 |
D | 删除了文件或目录 |
C | 修改了文件或目录 |
示例:
7、容器与宿主机之间的数据拷贝
-
docker cp
-
用于容器与主机之间的数据拷贝
语法:
从容器拷贝到主机:docker cp [OPTIONS] CONTAINER:容器内路径 宿主机路径
从主机到容器拷贝:docker cp [OPTIONS] 宿主机路径 CONTAINER:容器内路径参数说明:
-L :保持源目标中的链接示例:
(1)docker cp 6746ea0be680:/tmp/docker.txt ./
: 从容器中复制文件到宿主机
(2)docker cp ./docker-szj.txt 6746ea0be680:/tmp/
从宿主机中复制文件到容器