看这里:
戳此链接 通往 关于 Docker 所有的学习文章 !
root@zhengzelin:~# docker container --help
"格式: docker container COMMAND"
Manage containers
Commands:
attach 将本地标准输入,输出和错误流附加到正在运行的容器
"commit 将容器保存为镜像!"
cp 在容器和本地文件系统之间复制文件/文件夹
"creat 创建一个新的容器"
diff 检查容器文件系统上文件或目录的更改
exec 在正在运行的容器中运行命令(进入容器)
export 将容器的文件系统导出为tar存档
inspect 在一个或多个容器上显示详细信息
kill 杀死一个或多个运行中的容器
"logs 获取容器的日志"
ls 列出容器(用法: docker container ls 等同于 docker ps)
"pause 暂停一个或多个容器中的所有进程(取消暂停的话使用 unpause)"
"port 列出端口映射或容器的特定映射"
"prune 删除所有停止的容器(docker image prune 是删除所有dangling iamge,不知道什么是dangling iamge的话点击文章开头的目录导航,有详解)"
rename 重命名容器
restart 重新启动一个或多个容器
rm 删除一个或多个容器
"run 在新容器中运行命令(记住是新容器,执行一次run,就会创建一个容器!)"
start 启动一个或多个停止的容器
"stats 显示容器资源使用情况统计信息的实时流"
stop 停止一个或多个运行中的容器
top 显示容器的运行过程
"unpause 取消暂停一个或多个容器中的所有进程(暂停一个或多个容器中的进程使用 pause)"
☆ update 更新一个或多个容器的配置(常用,一般用来更新mem、cpu等..使用 docker upte --help 来了解更多)
wait 直到一个或多个容器停止,然后打印其退出代码(可以使用 "docker wait 容器名 &(后台执行此命令)" 或 "docker stop 容器名 | docker wait 容器名" 或直接 "docker wait 已经停止的容器名" )
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
"注意: docker container commands 可以直接表示为 docker commands !"
(只是大部分,并不是所有命令啊!)
eg : docker container prune(删除所有停止的容器) 就不能使用 docker prune !
因为 关于 prune 还有个命令是删除所有 dangling image 的(docker image prune)!
像你的其他命令:创建容器啊、启动容器啊等等..就可以直接使用 docker create 不需要使用 docker container create !
上面很多命令并不会一样列举! 你可以使用 docker container command --help 来解惑!
语法: docker ps [OPTIONS]
OPTIONS
-a,--all docker ps 默认只列出运行中的容器,使用 -a 表示所有容器!(未运行和运行中)
-f,--filter 根据条件过滤出容器!
-n=-1 显示最后创建的一个容器,-1并不是固定值,也可使用 -2 表 最后两个创建的容器
-l 最新创建的容器!
-q 仅显示 容器ID
-s 显示总大小!
--no-trunc 不截断输出!
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
-f 条件 可选选项:
root@zhengzelin:~# docker ps -f
ancestor= exited= health= is-task= name= publish= status=
before= expose= id= label= network= since= volume=
注意:千万注意 有镜像才能创建容器,如果你无法创建某个镜像的容器,那么请你使用 docker images 查看是否有该镜像!
"语法格式: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]"
OPTIONS
--name= : 为容器添加一个名字
--add-host= : 添加自定义主机到IP的映射(host:ip)
--cap-add/drop= : 添加/放弃 Linux功能!
--cidfile= : 将容器ID写入文件!
--cpus= : 限制cpu
--kernel-memory = 0 : 限制内核内存
-m,--memory = 0 : 内存限制:
--device= : 将主机设备添加到 容器内
--dns= : 设置自定义 dns 服务器!
-e;--env : 设置环境变量
--env-file : 读入环境变量配置文件!
--group-add : 添加其他组用户可以加入容器!
--ip="" / --ip6="" : ipv4地址/ipv6地址!
--mount= : 将一个文件系统挂载到该容器
--pid= : 使用的 pid 命名空间!
-p,--publish = : 将容器的端口发布到主机
-v,--volume = : 绑定挂载卷
--volumes-from = : 从指定的容器挂载卷
其他更多选项 请使用 man docker create 来查看!
"作用: 启动一个或多个已经停止的容器!"
语法: docker start [OPTIONS] 容器ID1/Name1 容器ID2/Name2
OPTIONS
-a,-attach [= false] 连接STDOUT / STDERR和转发信号
--checkpoint =“” 从此检查点还原
--checkpoint-dir =“” 使用自定义检查点存储目录
--detach-keys =“” 覆盖分离容器的键序列
-i,--interactive [= false] 附加容器的STDIN
docker run 相当于 docker create + docker start ! 它的作用就是 创建一个容器并将其启动!
如果没有创建该容器的image,则默认会从 docker Hub 上 pull image ;然后 create Container 最后 start Container !
"注意:run 是创建 new Container ,只会创建new Container!并不是启动 old Container!"
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
格式: docker run [OPTIONS] IMAGE [COMMANDS] [ARG...]
OPTIONS
--name="Container newname" : 为容器指定一个新名字
--restart=alwasy 该容器停止后,总是自动重启该容器
-i : 以交互模式运行容器;
-t : 为容器重新分配一个伪终端; ("通常使用 -it 搭配!")
-d : 后台运行容器,并且返回容器ID;
-P : 随机端口映射;
-p : 指定端口映射(有以下三种格式:)
ip:hostport:ContainerPort
ip::ContainerPort
hostPort:ContainerPort
不懂的话,点此链接,有具体介绍及使用例子:https://blog.csdn.net/ljlfather/article/details/105669267
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
如果你的镜像是个 OS image ,那么使用 docker -it 会直接进入该镜像,并且分配一个伪终端(可以执行命令);
如果你不想进入该container呢?只是想创建并且启动该容器而已,那就需要使用 "docker run -d IMAGENAME" (-d : 在后台保持该容器运行)
"但是你会发现,某些时候 当你使用 docker run -d 运行启动一个容器的时候,
执行 docker ps 却并没有发现该容器,该容器的状态为(exited),这是为什么呢?"
"因为 Docker 机制: Docker 容器要想后台运行!它在前台必须得有一个进程! 否则会觉得自己无事可做然后自杀!"
那就可以使用: docker run -itd IMAGEID /bin/bash
语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS
-e,--env = 设置环境变量
-i,--interactive 即使未连接STDIN也保持打开状态
--privileged 赋予命令扩展权限
-t,--tty 分配伪TTY
-u,--user =“” 用户名或UID(格式:<名称| uid> [:<组| gid>])
-w,--workdir =“” 容器内的工作目录
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
一般两种用法:
1、不进入容器便执行命令:
root@zhengzelin:~# docker exec 1cb1272d278c echo "aaa"
aaa
# 在容器 1cb1272d278c 内 执行 echo 命令
"2、进入容器:"
root@zhengzelin:~# docker exec -it 1cb1272d278c /bin/bash (可以是其他 bash shell , 并不是固定的 /bin/bash)
第一种 : 退出并停止容器 —— 使用 exit
第二种 : 退出不停止容器 —— 使用 Ctrl + P + Q
" docker stop —— stop one or more running Containers "
格式: docker stop [OPTIONS] container1 container2
OPTIONS
-t;--time=数字 指定时间后停止容器!
注意: docker stop 会慢慢的停止容器,直到停止容器结束。 docker kill 会直接的停止容器!相当于很暴力那种,并不会像stop 那样等你停止完毕!
docker kill [OPTION] container1 container2
OPTION: -s;--signal=“”
root@zhengzelin:~# docker kill -s
CONT INT QUIT SIGHUP SIGKILL SIGSTOP SIGUSR1 STOP USR1
HUP KILL SIGCONT SIGINT SIGQUIT SIGTERM SIGUSR2 TERM USR2
语法: docker restart [OPTIONS] Container1 Container2 ...
root@zhengzelin:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6f9b0452c17 nginx:latest "nginx -g 'daemon of…" 30 minutes ago Exited (137) 17 seconds ago zzl
root@zhengzelin:~# docker restart zzl
zzl
root@zhengzelin:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6f9b0452c17 nginx:latest "nginx -g 'daemon of…" 30 minutes ago Up 3 seconds 80/tcp zzl
docker rm —— 删除一个或多个 "已经停止" 的容器 !
格式: docker rm [OPTIONS] Container1 Container2 ...
OPTIONS:
-f;--force 强制删除容器!(即 删除运行中的容器,不可取!)
-l;--link 删除指定的链接
-v;--volumes 删除与该容器相关的卷!
docker container prune
root@zhengzelin:~# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
语法格式: docker rename 容器名/容器ID 新容器名
root@zhengzelin:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97f476793132 fedora:latest "/bin/bash" 43 minutes ago Up 43 minutes eloquent_ptolemy
root@zhengzelin:~# docker rename eloquent_ptolemy abc
root@zhengzelin:~# docker ps
97f476793132 fedora:latest "/bin/bash" 43 minutes ago Up 43 minutes abc
格式: docker logs [OPTIONS] Container
OPTIONS:
-t 显示时间戳
-f 实时的显示日志
--tail 数字 实现倒数几行的日志
--details 显示提供给日志的其他详细信息
--since=“” 显示时间戳之后的日志
--until=“” 显示时间戳之前的日志
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
"常用搭配 : docker logs -t -f --tail 数字 ContainerID "
语法: docker top ContainerID 或 ContainerNAME
很简单,他的 OPTION 就只有 --help !
root@zhengzelin:~# docker top eloquent_ptolemy
UID PID PPID C STIME TTY TIME CMD
root 4162 4145 0 21:46 pts/0 00:00:00 /bin/bash
之前前面说过: docker inspect 是来查看镜像的详细信息,也可以查看容器的详细信息:
用法: docker inspect imageID(查看镜像信息) 或 docker inspect containerID(查看容器信息)
"当然还可以这样: docker image inspect imageID(查看镜像信息)
或
docker container inspect containerID(查看容器信息)"
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
至于这个命令的输出内容,在数据卷哪里会有深刻理解!
方法1:
docker container inspect --format '{{ .NetworkSettings.IPAddress }}' 容器ID / 容器名
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
方法2(最简单):
docker inspect 容器ID | grep IPAddress
root@zhengzelin:~# docker inspect a436a2d7f6a3 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
方法3:(麻烦,不推荐)
进入容器 ,安装 iproute 命令,使用 ip 命令即可查看!
名称
docker-stats —— 显示容器资源使用情况统计信息的"实时流"(使用 --no-stream 来退出实时流)
语法
docker stats [OPTIONS] Container1 Container2 ...
OPTION:
-a 显示所有容器的资源占用情况(默认为所有运行中的容器)
--no-stream 仅获取一次结果就退出资源占用实时结果状态!
--no-trunc 不截断输出...
名称
docker-cp —— 在容器和本地文件系统之间复制文件/文件夹
语法:
docker cp [OPTIONS] 容器外本机被复制文件的路径 容器ID:/容器内存放该文件的路径
或
docker cp [OPTIONS] 容器ID:/容器内存被负责文件的路径 容器外本机存放该文件的路径
"第一个是将容器外的文件 拷到 容器里,第二个是将 容器里的文件 拷贝到 容器外..
千万注意格式: 容器ID:/ 这个/并不是 路径前的根目录哦,eg: 容器ID://root 得这样!"
OPTIONS
-a;--archive 存档(复制所以 uid / gid 信息)
-L;--follow-link 始终遵循SRC_PATH中的符号链接
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
eg:
root@zhengzelin:~# touch aaa
root@zhengzelin:~# docker cp -L aaa zzl://root(zzl为我的容器名)
root@zhengzelin:~# docker exec zzl ls /root
aaa
复制成功,删除容器外的aaa,然后复制容器里的aaa到容器外:
root@zhengzelin:~# docker cp zzl://root/aaa /root/aaa
root@zhengzelin:~# ls
aaa
NAME
docker-pause —— 暂停一个或多个容器中的所有进程
语法格式:
docker pause CONTAINER [CONTAINER...]
OPTIONS 只有 --help
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
"取消暂停的话使用 : docker unpause Container1 Container2 ..."
NAME
docker-export —— 将容器的文件系统导出为 tar 存档!
SYNOPSIS
docker export [OPTIONS] CONTAINER
OPTIONS
-h # 帮助信息
-o 文件名 # 输出为 文件中,并不是标准输出终端
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
eg:(使用 docker export -o 文件名 或 docker export >/文件路径/文件名)
root@zhengzelin:~# docker export 97f476793132 -o aaa
root@zhengzelin:~# du -sh aaa
191M aaa
或
root@zhengzelin:~# docker export 97f476793132 >/root/aaa
root@zhengzelin:~# du -sh aaa
191M aaa
NAME
docker-import —— 从 tar存档 导入内容以创建文件系统映像
语法格式:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS:
-c,--change = # 将 Dockerfile 指令应用于创建的映像
-h,--help [= false] # 帮助
-m,--message =“” # 设置导入图像的提交消息
--platform =“” # 如果服务器支持多平台,则设置平台
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
root@zhengzelin:~# docker import aaa - fedora:test
sha256:767c0f60f3ab9685472e0d72bd27b6c2292d8f73c0a6dcb4b777ee0ae0f497f8
root@zhengzelin:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fedora test 767c0f60f3ab 23 seconds ago 193MB
fedora latest 536f3995adeb 8 weeks ago 193MB
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
与 commit 的区别:
commit 是打包成镜像,该镜像可以上传到仓库上,而你这个只是打包成 tar 存档;
想用的时候并不能从其他仓库下载!只能存到你的其他硬盘上..或 scp 发送到其他机器上!
DOCKER(1)
NAME
docker-diff —— 检查一个容器的文件系统上 文件 或 目录的 更改!
语法格式:
docker diff CONTAINER
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
eg: 检查容器 abc 的更改!
root@zhengzelin:~# docker diff abc
C /root
A /root/aaa
A /root/def
docker container update 命令 可以实现 更新容器的一些运行时的配置,主要是针对一些 资源限制 份额!
DOCKER(1) DOCKER(1)
NAME
docker-update —— 更新一个或多个容器的配置!
语法格式:
docker update [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS:
--cpus= # 设置cpu的个数
--memory= # 内存限制
--kernel-memory= # 内核内存限制
--cpuset-cpus =“” # 允许执行的CPU(0-3,0,1)
--cpuset-mems =“” # 允许执行的MEM(0-3,0,1)
.... 很多 不一一例举了,直接使用 “man docker update ” 查看使用手册!
我们都知道在执行 run Container 的时候,可以使用 -P 或 -p 来指定随机端口映射 或 指定端口映射!
"(思考:如何给一个运行中的容器设置 端口映射呢?不可能使用 docker run 吧!那是run一个全新的容器!
文末写)"
那么如何查看容器的端口映射呢? 使用 docker port :
NAME
docker-port —— 列出端口映射或容器的特定映射!
语法:
docker port container
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
root@zhengzelin:~# docker run -itd -P nginx:latest
a436a2d7f6a3e191b46c21459977fcf00a849fc74d7d0a2bd8c4598b13707eef
root@zhengzelin:~# docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a436a2d7f6a3 nginx:latest "nginx -g 'daemon of…" 43 seconds ago Up 42 seconds 0.0.0.0:32768->80/tcp optimistic_thompson
查看 一个或多个容器的退出状态码:
docker wait container1 container2 ....
关于 docker run 时 docker 的错误代码:
125 : docker daemon 运行出错!
126 : 所指定的命令无法运行,例如:权限问题
127 : 容器内命令无法找到
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
eg:
root@zhengzelin:~# docker run -ifd fedora:latest;echo $?
unknown shorthand flag: 'f' in -fd
See 'docker run --help'.
125
当你更改了容器配置后,就需要打包成镜像,可以方便的上传下载到仓库中,更加方便使用!
NAME
docker-commit —— 根据容器创建一个 new container !
SYNOPSIS
docker commit [OPTIONS] CONTAINER REPOSITORY:TAG
OPTIONS :
-a # 指定用户名
-c,--change= # 将Dockerfile指令应用于创建的映像
-m,--message =“” # 提交讯息
"-p,-pause [= true] # 提交期间暂停容器(默认使用 docker commit 会自动暂停容器)"
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
eg:
root@zhengzelin:~# docker commit -a zzl -m "start commit" 97f476793132 zzl:test
sha256:a3daa9214f5051ec93f5012025b353b802397bf3905d614dbcb792f9b5ae010c
root@zhengzelin:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zzl test a3daa9214f50 7 minutes ago 592MB
root@zhengzelin:~# docker inspect zzl:test | grep -i author
"Author": "zzl",
root@zhengzelin:~# docker inspect zzl:test | grep Comment
"Comment": "start commit",
下一篇:如何 给运行中的容器 做端口映射?