第一本docker书1
docker 容器生命周期
创建->管理->停止->删除
dcoker info
1 | Client: |
docker run
1 | -i 标志保证容器中的STDIN 是开启的 |
使用第一个容器
1 | hostname |
docker help
docker ps
列出所有的容器,默认情况下只能看到正在运行的容器,如果指定-a标志,会列出所有容器
-l 列出最后一个运行的容器,可以通过–format标志来进一步控制显示的信息
三种方式可以唯一的指代容器
短UUID,长UUID或者容器名称
参数:
-a 列出所有正在运行的容器和历史上运行过的容器
-l 显示最近创建的容器
-n 最近n个创建的容器
-q 静默模式,只显示容器的编号
ctrl+P+Q: 容器不停止退出 和 exit是 不相同
容器命名
1 | sudo docker run --name myubuntu -i -t ubuntu /bin/bash # 默认就是bin/bash |
重新启动已经停止的容器
1 | sudo docker start myubuntu |
docker create
创建一个容器,但是并不运行它,可以在自己的容器工作流中进行细粒度的控制
docker attach 容器附着
docker在重新启动的时候会沿用docker run 命令时的指定参数来运行 重新进入正在运行的容器并以命令行形式交互
因此容器在启动的时候会运行一个交互式的shell
1 | sudo docker attach myubuntu |
创建守护式容器
$ sudo echo “hahah” >> test.csv -bash: test.asc: Permission denied 这时可以看到 bash 拒绝这么做,说是权限不够。这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有像 test.csv文件写入信息的权限。解决方式
第一种 第一种是利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:
$ sudo /bin/sh -c ‘echo “hahah” >> test.asc’
另一种方法是利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:
$ echo “hahah” | sudo tee -a test.asc
tee 命令的 “-a” 选项的作用等同于 “>>” 命令,如果去除该选项,那么 tee 命令的作用就等同于 “>” 命令
1 | sudo docker run --name daemon_ubuntu -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done" |
docker logs
查看容器内部的运行情况
1 | sudo docker logs daemon_ubuntu |
ctrl+c 退出内部日志跟踪
-t 加入时间戳
-f 跟随最新的日志打印 可以持续的追加
-tail 数字显示最后多少条
docker支持日志驱动
可以将docker logs 日志功能禁用,将所有日志输出到syslog,但是目前我用不到这个功能
docker top
查看容器内的进程
1 | sudo docker top daemon_ubuntu |
经过查找:PID进程和PPID父进程的意思
docker stats
统计信息,显示一个或者多个容器的统计信息
1 | sudo docker stats daemon_ubuntu |
能够看到容器的CPU 内存 网络 I/O 存储 的性能和指标,能够快速地监控一个主机上的一组容器
这个是1.5 之后引入的命令
容器内部运行进程
在容器内运行交互式命令
1 | sudo docker exec -t -i daemon_ubuntu /bin/bash |
停止守护式容器
1 | sudo docker stop daemon_ubuntu # stop是温柔停止 |
自动重启容器
–restart 标志会检查容器退出的代码,来判断是否要重启容器,默认行为是不重启
1 | sudo docker run --restart=always --name daemon_ubuntu -d ubuntu /bin/bash -c "while true;echo hello world; sleep 1;done" |
–restart=on-failure:5
docker inspect
1 | sudo docker inspect daemon_ubuntu |
返回配置信息,包括名称,命令,网络配置
-f 或者 –format可以选定查看结果
1 | sudo docker inspect --format='{{.State.Running}}' daemon_ubuntu false |
删除容器
1 | sudo docker rm 容器id |
删除所有停用的容器
1 | sudo docker rm -f${docker ps -a -q} |
tips 删除所有容器
1 | sudo docker rm 'sudo docker ps -a -q' |
-a 表示列出所有容器,-q表示只需要返回容器的id而不返回其他的信息,相当于得到了所有容器的id列表
${} 和 $()是有区别的 在bash中,$( )与` `(反引号)都是用来作命令替换的$( )与``
在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下:
``很容易与’’搞混乱,尤其对初学者来说,而$( )比较直观。
最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的
一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 583614868@qq.com
文章标题:第一本docker书1
文章字数:1.7k
本文作者:钟帅豪
发布时间:2020-11-23, 08:38:46
最后更新:2020-12-07, 17:57:37
原始链接:http://jhshz520.github.io/2020/11/23/第一本docker书1/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。