docker常用指令 镜像与仓库

容器命名
为什么要为docker容器命名?
很多docket命令中,都可用容器的名称替代容器id,且名称更有助于分辨容器。容器的命名必须是唯一的,如果宿主机上已经有该容器,可以执行docker rm删除该容器。

docker会为我们创建的容器自动生成一个随机的名称。如果想为容器指定一个名称,则可以使用--name来指定。
如:docker run --name mz_container -i -t ubuntu /bin/bash
该命令会创建一个名称为mz_container的容器。

容器删除
docker rm 容器id或名称
docker rm `docker ps -a -q` 删除所有容器

停止容器
docker stop 此方式常常被翻译为优雅的停止容器
docker stop 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
docker stop -t=60 容器ID或容器名

docker kill
docker kill 容器ID或容器名 :直接关闭容器
由此可见stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器


启动已经停止的容器
dcoker start 容器名称或id(docker ps -a可以获取)
daocker 容器启动后会沿用docker run 命令时指定的参数(如/bin/bash)来运行。因此容器重新启动后会运行一个交互式会话shell。可以用 docker attach命令,重新附着到该容器的会话上。
如: docker attach nervous_jepsen
nervous_jepsen为容器名称。与start指令对应的容器名称相同。

创建守护式容器
除了交互式运行的容器,也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。

如下实例:
docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2;done"
-d参数含义:docker会将容器放到后台运行
然后命令里使用了一个while循环,会一直打印hello world,直到容器或进程停止运行。


获取容器的日志 
docker logs daemon_dave

动态获取容器日志
docker logs -f daemon_dave 
通过control c退出日志跟踪

跟踪最新日志
docker logs --tail 0 -f daemon_dave

为了更清晰,可以增加-t标志为每条日志项加上时间戳
docker logs --tail 0 -ft daemon_dave

docker 日志驱动
控制日志驱动的参数: --log-driver
日志驱动类型:
1)json-file,默认驱动,为docker logs指令提供了基础
2)sysylog,将所有容器的日志输出重定向到syslog,且会禁用docker logs指令
3) none 禁用所有容器中的日志,docker logs命令也被禁用
可以在启动守护进程或者执行docker run命令时使用上面的选项。如:
docker run --log-driver="syslog" --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello word; sleep 10;done"

查看容器内进程:展示进程pid usert time command等信息
docker top 容器名称或id

dcoekr统计信息:一或多个容器的统计信息,如cpu 内存 网络 存储的性能与指标
下面命令统计daemon_dave daemon_kate两个容器的信息
docker stats daemon_dave daemon_kate


exec
在容器内部启动新的进程,分为后台任务和交互式任务。后台任务在容器内运行且没有交互需求,二交互式任务则保持在前台运行。
后台任务实例:docker exec -d daemon_dave touch /etc/new_config_file
-d:运行一个后台进程
daemon_dave:容器名称
touch /etc/new_config_file:运行的命令,即创建一个文件

交互式任务实例:docker  exec -t -i daemon_dave /bin/bash
进入容器的shell页面,-t -i标志为我们执行的进程创建了TTY并捕捉STDIN

自动重启容器
有时需要容器一直运行,但是容器会因某些错误而停止。有没有方法使容器异常时自动重启呢?
--restart
--restart=always:无论容器的退出代码是什么,docker都会自动重启该容器
--restart=on-failure:5只有当容器的退出代码为非0值的时候,才会自动重启,最多重启5次
docker run --restart=on-failure:5 --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello word; sleep 10;done"
#如果提示daemon_dave已存在,可使用docker rm daemon_dave删除


inspect
docker inspect daemon_dave
获取容器更加详细的信息,包括名称、命令、网络配置以及很多有用的数据。
也可以使用-f或--format标志来选定查看结果,如:
获取容器运行状态:docker inspect --format='{{.State.Running}}' daemon_dave
获取容器IP:docker inspect --format='{{.NetworkSettings.IPAddress}}' daemon_dave

也可以同时指定多个容器的多个内容,如:
docker inspect --format='{{.State.Running}}{{.NetworkSettings.IPAddress}}' daemon_dave nervous_jepsen

docker镜像和仓库
什么是镜像:有文件系统叠加而成,最底层是一个引导文件系统,即bootfs,很像典型的Linux/unix的引导文件系统。
容器启动后,引导文件系统会被卸载,以留出更多的内存供initrd磁盘镜像使用。
docker镜像的第二层是root文件系统rootfs,位于引导文件系统之上。

docker rootfs与linux rootfs有什么区别?
1)linux rootfs在引导过程中,开始以只读的方式加载,当引导结束后会被切换成读写模式。docker中的rootfs只有只读状态。
2)docker会使用联合加载技术,即一次同时加载多个文件系统,将各层的文件系统叠加到一起,最终的文件系统会包含所有底层的文件和目录。

镜像关系:一个镜像可以放到另一个镜像的顶部,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。

docker容器与镜像
当创建一个新容器时,docker会构建出一个镜像栈,每个只读镜像层都是只读的,并且以后永远不会变化,最后在栈的最顶端添加一个读写层。
即从一个镜像启动容器时,docker会在镜像的最顶层加载一个读写文件系统,我们在docker中运行的程序就是在这个读写层中执行的。

docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化,这些变化会应用到这一层上。
如:想修改一个文件,那么首先会将该文件从下面的只读层复制到顶层的读写层。且该文件的只读版本依然存在,但是已经被读写层中的该文件副本隐藏了。
该机制被称为写时复制。也是docker强大的技术之一。

区分镜像 仓库 注册服务器的概念。
镜像(image):如 12.04版本的ubuntu仓库
仓库(Repository):如ubuntu仓库,包括版本12.04 12.10 13.04等多个版本的ununtu镜像。
注册服务器(registry):管理镜像仓库,起到的是服务器的作用.
https://blog.csdn.net/qq_34939308/article/details/105202763


仓库分类:用户层库和顶层仓库
用户仓库的镜像是由用户创建的,而顶层仓库则是由docker内部的人来管理的。
用户仓库的命名由用户名和仓库名两部分组成,如jamtur01/puppet jamtur01是用户名,仓库名是puppet。


docker images : 列出当前主机上的所有镜像
docker images ubuntu :仅列出ubuntu的镜像
镜像保存在仓库中,仓库存在于registry中,包含镜像、层以及镜像的元数据,类似git仓库。默认的registry是docker hub。

拉取镜像
docker pull ubuntu:12.04 拉取ubuntu仓库中12.04版本的镜像
dcoker images会发现宿主机上又多了ubuntu:12.04的镜像。为了区分同一个仓库中的不同镜像,docker采用标签来区分,12.04就是一个标签。

查找镜像
docker search ubuntu
完成镜像查找,并返回仓库名,镜像描述,starts,是否官方,自动构建等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值