docker命令参数详解
-D 默认false 允许调试模式(debugmode)
-H 默认是unix:///var/run/docker.sock tcp://[host[:port]]来绑定或者unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做为默认值来使用
-api-enable-cors 默认flase 允许CORS header远程api
-b 默认是空,附加在已存在的网桥上,如果是用'none'参数,就禁用了容器的网络
-bip 默认是空,使用提供的CIDR(ClasslessInter-Domain Routing-无类型域间选路)标记地址动态创建网桥(dcoker0),和-b参数冲突
-d 默认false 允许进程模式(daemonmode)
-dns 默认是空,使docker使用指定的DNS服务器
-g 默认是"/var/lib/docker":作为docker使用的根路径
-icc 默认true,允许inter-container来通信
-ip 默认"0.0.0.0":绑定容器端口的默认Ip地址
-iptables 默认true 禁用docker添加iptables规则
-mtu 默认1500 : 设置容器网络传输的最大单元(mtu)
-p 默认是/var/run/docker.pid进程pid使用的文件路径
-r 默认是true 重启之前运行的容器
-s 默认是空 ,这个是docker运行是使用一个指定的存储驱动器
-v 默认false 打印版本信息和退出
docker build [OPTIONS] PATH | 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 commit :从容器创建一个新的镜像。
参数说明
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
docker events : 从服务器获取实时事件
参数说明
-f :根据条件过滤事件;
--since :从指定的时间戳后显示所有事件;
--until :流水时间显示到指定的时间为止;
docker exec :在运行的容器中执行命令
参数说明
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
docker export :将文件系统作为一个tar归档文件导出到STDOUT。
参数说明
-o :将输入内容写到文件。
docker history : 查看指定镜像的创建历史。
参数说明
-H :以可读的格式打印镜像大小和日期,默认为true;
--no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID。
docker images : 列出本地镜像。
参数说明
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID。
docker import : 从归档文件中创建镜像。
参数说明
-c :应用docker 指令创建镜像;
-m :提交时的说明文字;
docker inspect : 获取容器/镜像的元数据。
参数说明
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
docker kill :杀掉一个运行中的容器。
参数说明
-s :向容器发送一个信号
docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
参数说明
-u :登陆的用户名
-p :登陆的密码
docker logs : 获取容器的日志
参数说明
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
docker ps : 列出容器
参数说明
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
docker pull : 从镜像仓库中拉取或者更新指定镜像
参数说明
-a :拉取所有 tagged 镜像
docker rm :删除一个或多少容器
参数说明
-f :通过SIGKILL信号强制删除一个运行中的容器
-l :移除容器间的网络连接,而非容器本身
-v :-v 删除与容器关联的卷
docker rmi : 删除本地一个或多少镜像。
参数说明
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
docker run :创建一个新的容器并运行一个命令
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a, --attach=[] 登录容器(以docker run -d启动的容器) -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用 --cap-add=[] 添加权限 --cap-drop=[] 删除权限 --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法 --cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU -d, --detach=false 指定容器运行于前台还是后台 --device=[] 添加主机设备给容器,相当于设备直通 --dns=[] 指定容器的dns服务器 --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件 -e, --env=[] 指定环境变量,容器中可以使用该环境变量 --entrypoint="" 覆盖image的入口点 --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量 --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口 -h, --hostname="" 指定容器的主机名 -i, --interactive=false 打开STDIN,用于控制台交互 --link=[] 指定容器间的关联,使用其他容器的IP、env等信息 --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用 -m, --memory="" 指定容器的内存上限 --name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字 --net="bridge" 容器网络设置,待详述 -P, --publish-all=false 指定容器暴露的端口,待详述 -p, --publish=[] 指定容器暴露的端口,待详述 --privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities --restart="" 指定容器停止后的重启策略,待详述 --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器) --sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理 -t, --tty=false 分配tty设备,该可以支持终端登录 -u, --user="" 指定容器的用户 -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录 --volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录 -w, --workdir="" 指定容器的工作目录
docker search : 从Docker Hub查找镜像
参数说明
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。
实例
# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
# docker run --name mynginx -d nginx:latest
# 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
# docker run -P -d nginx:latest
# 使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。
# docker run -p 80:80 -v /data:/data -d nginx:latest
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
# docker run -it nginx:latest /bin/bash
# 连接到容器查看访问信息。
# docker attach mynginx
#查看所有容器的状态
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a75f165ce6 centos "/bin/bash" 2 minutes ago Exited (0) 23 seconds ago cranky_mahavira
可见此时容器的状态是Exited,那么,如何再次运行这个容器呢?可以使用docker start命令
运行容器
# docker start cranky_mahavira
#使用当前目录的Dockerfile创建镜像。
# docker build -t test/ubuntu:v1
# 生成新的镜像
# docker commit centos_v1 centos:v1
68ad49c999496cff25fdda58f0521530a143d3884e61bce7ada09bdc22337638
# 将新的镜像传到hub,其中v1是tag,可不写,默认是latest
# docker push victor/centos:v1
# 容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主机
# docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root
#修改完毕后,将该文件重新copy回容器
# docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/
# 使用docker镜像nginx:latest创建一个容器,并将容器命名为mynginx,同run
# docker create --name mynginx nginx:latest
# 查看容器内发生改变的文件,以我的mysql容器为例
# docker diff mysqldb
C /root
A /root/.bash_history
A /test1.txt
A /test.tar
A /test.txt
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
不难看出,C对应的均是目录,A对应的均是文件
# 实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等
# docker events -f "image"="mysql:5.6" --since="1467302400"
2017-07-11T00:38:53.975174837+08:00 container start 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)
2017-07-11T00:51:17.022572452+08:00 container kill 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql, signal=9)
......
# docker exec -d cc touch 123 # 后台型任务
# 后台型任务
[root@localhost ~]# docker exec -i -t cc /bin/bash
root@1e5bb46d801b:/# ls
123 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 将容器的文件系统打包成tar文件
# docker export -o mysqldb1.tar mysqldb
# docker export mysqldb > mysqldb.tar
#显示镜像制作的过程,相当于dockfile
# docker history test/centos:lastest
IMAGE CREATED CREATED BY SIZE COMMENT
4e3b13c8a266 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
3 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.863 kB
3 months ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 701 B
3 months ago /bin/sh -c #(nop) ADD file:43cb048516c6b80f22 136.3 MB
# 查看本地镜像列表。
# docker images
# 根据tar文件的内容新建一个镜像,与之前的export命令相对应
[root@localhost ~]# docker import mysqldb.tar mysql:v1
# 查看docker的系统信息
[root@localhost ~]# docker info
Containers: 3 --当前有3个容器
Images: 298
Storage Driver: devicemapper
......
# 获取镜像mysql的信息。
# docker inspect mysql:5.6
[
{
"Id": "sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec",
"RepoTags": [
"mysql:5.6"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
......
# 登录到自己的Docker Hub的账号
[root@localhost ~]# docker login
Username: ivictor
Password:
Email: xxxx@foxmail.com
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
# 输出容器端口与宿主机端口的映射情况
# docker port blog
80/tcp -> 0.0.0.0:80
# 列出所有在运行的容器信息。
# docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp mytest
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql
# 列出最近创建的5个容器信息。
# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED
09b93464c2f7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
b8573233d675 nginx:latest "/bin/bash" 2 days ago ...
# 拉取nginx镜像
# docker pull nginx
# 强制删除容器db01、db02
# docker rm -f db01、db02
# 移除容器nginx01对容器db01的连接,连接名db
# docker rm -l db
# 删除容器nginx01,并删除容器挂载的数据卷
# docker rm -v nginx01
# 强制删除本地镜像test/centos:v3。
# docker rmi -f test/centos:v3
# 将镜像打包,与上面的load命令相对应
# docker save -o nginx.tar nginx
# docker search nginx #查找
# docker start nginx #启动
# docker restart nginx #重新启动
# docker stop nginx #停止
# docker stats nginx #状态
#镜像重命名
# docker tag centos test/centos:v3