1. Docker容器管理
  2. Docker容器镜像制作

1.Docker容器管理

1.1   创建新容器但不启动

# docker create -it daocloud.io/library/centos:5 /bin/bash

1.2   创建并运行一个新Docker 容器

同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器

# docker run -it --restart=always centos /bin/bash

如果执行成功,说明CentOS 容器已经被启动,并且应该已经得到了 bash 提示符。

-i        捕获标准输入输出                   -t              分配一个终端或控制台

--restart=always  
   容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭  
   也适用于create选项

--rm
   默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。
    但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用

容器名称:

--name= Assign a name to the container   
          --为容器分配一个名字,如果没有指定,docker会自动分配一个随机名称
          是docker run子命令的参数

可以通过三种方式调用容器命名:

1)使用UUID长命名("f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778")
  2)使用UUID短Id("f78375b1c487")
  3)使用Name("evil_ptolemy")

这个UUID标识是由Docker deamon生成的。
  如果你在执行docker run时没有指定--name,那么deamon会自动生成一个随机字符串UUID。
  但是对于一个容器来说有个name会非常方便,当你需要连接其它容器时或者类似需要区分其它容器时,使用容
  器名称可以简化操作。无论容器运行在前台或者后台,这个名字都是有效的。

保存容器PID equivalent:

如果在使用Docker时有自动化的需求,你可以将containerID输出到指定的文件中(PIDfile),类似于某些应用程序将自身ID输出到文件中,方便后续脚本操作。
--cidfile="": Write the container ID to the file

断开与容器的连接,并且关闭容器:

当使用/bin/bash   或者/bin/sh   参数时退出时与容器断开,并关闭容器

root@d33c4e8c51f8 /#exit

如果只想断开和容器的连接而不关闭容器:

快捷键:ctrl+p+q

查看容器:

只查看运行状态的容器:

#docker ps

#docker ps -a                                  -a  查看所有容器

只查看所有容器id:

# docker ps -a -q

列出最近一次启动的容器:

# docker ps -l

1.3   容器详细信息

inspect  Return low-level information on a container or image

用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。

查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息:

可以使用镜像id的前面部分,不需要完整的id。

# docker inspect d95   //d95是我机器上运行的一个容器ID的前3个字符

容器里在安装ip或ifconfig命令之前,查看网卡IP显示容器IP地址和端口号,如果输出是空的说明没有配置IP地址(不同的Docker容器可以通过此IP地址互相访问)

# docker inspect --format='{{.NetworkSettings.IPAddress}}'  容器id

列出所有绑定的端口:

# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID

# docker inspect --format='{{range $p, 
$conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 
b220fabf815a

找出特殊的端口映射:比如找出容器里22端口所映射的docker本机的端口

# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp")  0).HostPort}}' $INSTANCE_ID

启动容器:

# docker start  name

关闭容器:

# docker stop  name

# docker kill   name    --强制终止容器

杀死所有running状态的容器

# docker kill $(docker ps  -q)

删除容器:

# docker rm 容器id或名称

要删除一个运行中的容器,添加 -f 参数

根据格式删除所有容器:

# docker rm $(docker ps -qf status=exited)

重启容器:

#docker restart name

暂停容器:

pause  --暂停容器内的所有进程,
  通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f也观察不到日志的进一步输出。

恢复容器:

unpause  --恢复容器内暂停的进程,与pause参数相对应

# docker start infallible_ramanujan

这里的名字是状态里面NAMES列列出的名字,这种方式同样会让容器运行在后台

让容器运行在后台:

果在docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的回话中

容器运行在后台模式下,是不能使用--rm选项的(老版本是这样,新版本已经可以同时生效)

#docker run -d IMAGE[:TAG] 命令

容器日志:

#docker logs container_id  [root@qfedu.com ~]#打印该容器的输出

# docker run -it -d --name mytest docker.io/centos /bin/sh -c "while true; do echo hello world; sleep 2; done"

# docker run -it -d --name mytest docker.io/centos /bin/sh -c "while true; do echo hello world; sleep 2; done"

docker attach container_id #附加该容器的标准输出到当前命令行

此时,ctrl+d等同于exit命令,按ctrl+p+q可以退出到宿主机,而保持container仍然在运行

rename 
  Rename a container

stats   
  Display a live stream of container(s) resource usage statistics   
  --动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O

port   
  List port mappings or a specific mapping for the CONTAINER
   --输出容器端口与宿主机端口的映射情况

# docker port blog

容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务

1.3   连接容器

方法1.attach

# docker attach 容器id  //前提是容器创建时必须指定了交互shell

方法2.exec

通过exec命令可以创建两种任务:后台型任务和交互型任务

        交互型任务:

# docker exec -it  容器id  /bin/bash

        后台型任务:

# docker exec 容器id touch /testfile

监控容器的运行:

可以使用logs、top、events、wait这些子命令

        logs:

        使用logs命令查看守护式容器;可以通过使用docker logs命令来查看容器的运行日志,其中--tail选项可以指定查看最后几条日志,而-t选项则可以对日志条目附加时间戳。使用-f选项可以跟踪日志的输出,直到手动停止。

# docker logs   App_Container  //不同终端操作

# docker logs -f App_Container

         top:

        显示一个运行的容器里面的进程信息

# docker top birdben/ubuntu:v1

        events :

        Get real time events from the server

实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等。

# docker start loving_meninsky

# docker events  //不同终端操作

wait(X):

Block until a container stops, then print its exit code

--捕捉容器停止时的退出码

执行此命令后,该命令会"hang"在当前终端,直到容器停止,此时,会打印出容器的退出码

# docker wait 01d8aa  //不同终端操作

diff:

查看容器内发生改变的文件;用diff查看:
    包括文件的创建、删除和文件内容的改变都能看到

# docker diff  容器名称

C对应的文件内容的改变,A对应的均是文件或者目录的创建删除

宿主机和容器之间相互Copy文件

cp的用法如下:    

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
docker cp [OPTIONS] LOCALPATH CONTAINER:PATH

如:容器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/

1.4  stop和kill的区别

docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。

2.Docker容器镜像制作

2.1   容器文件系统打包

将容器的文件系统打包成tar文件,也就是把正在运行的容器直接导出为tar包的镜像文件

export Export a container's filesystem as a tar archive

有两种方式(elated_lovelace为容器名)

第一种:

# docker export -o elated_lovelace.tar elated_lovelace

第二种:

# docker export 容器名称 > 镜像.tar

导入镜像归档文件到其他宿主机:

import Import the contents from a tarball to create a filesystem image

# docker import elated_lovelace.tar  elated_lovelace:v1

注意:  如果导入镜像时没有起名字,随后可以单独起名字(没有名字和tag),可以手动加tag

docker  tag  镜像ID  mycentos:7

2.2   通过容器创建本地镜像

容器运行起来后,又在里面做了一些操作,并且要把操作结果保存到镜像里

使用 docker commit 指令,把一个正在运行的容器,直接提交为一个镜像。commit 是提交的意思,类似告诉svn服务器我要生成一个新的版本。

在容器内部新建了一个文件:

# docker exec -it 4ddf4638572d /bin/sh

# touch test.txt

# exit

# docker commit 4ddf4638572d wing/helloworld:v2

将这个新建的文件提交到镜像中保存

例:

# docker commit -m "my images version1" -a "wing" 108a85b1ed99 daocloud.io/ubuntu:v2

-m                   添加注释
  -a                   作者
  108a85b1ed99         容器环境id
  daocloud.io/ubuntu:v2    镜像名称:hub的名称/镜像名称:tag 
  -p,–pause=true        提交时暂停容器运行

Init 层的存在,是为了避免执行 docker commit 时,把 Docker 自己对 /etc/hosts 等文件做的修改,也一起提交掉。

Docker--(二)--测试相关推荐

  1. 深度学习(19)神经网络与全连接层二: 测试(张量)实战

    深度学习(19)神经网络与全连接层二: 测试(张量)实战 1. 传入测试集数据 2. 数据类型转换 3. 创建test_db 4. test/evluation 5. 创建神经网络 6. 输出 7. ...

  2. 章二测试 1613999388

    章二测试 1613999388 格式编写 写出装箱的格式 写出拆箱的格式 如何把[数据]传给新窗体,利用Tag属性 新窗体如何从Tag中获取[数据] 获取ListView控件选中项的索引为2的项的子项 ...

  3. Docker Jenkins测试邮箱通知报错:553 Mail from must equal authorized user

    Docker Jenkins测试邮箱通知报错:553 Mail from must equal authorized user Failed to send out e-mailcom.sun.mai ...

  4. 计算机组成原理 第四章存储系统(二)测试

    计算机组成原理 第四章存储系统(二)测试 32位处理器的最大虚拟地址空间为 A.2G B.4G C.16G D.8G 答案 B 在虚存.内存之间进行地址变换时,功能部件 ( )将地址从虚拟(逻辑)地址 ...

  5. 姓名相加除以二测试缘分_免费测试两人关系姓名,两个人姓名笔画相加除

    提到免费测试两人关系姓名,大家都知道,有人问姓名笔画测试两人关系爱情测试,双方的笔画加起来除以2,另外,还有人想问姓名笔画测两人关系,你知道这是怎么回事?其实有什么缘分测试和姓名配对测两人之间的缘分的 ...

  6. Docker引领测试革新

    1.传统软件开发流程的痛点 在传统软件开发流程中,开发团队在完成功能代码编写后,会首先进行自测,之后将代码提交到Git仓库中.在每一次迭代转测试时,开发团队会首先构建转测试的二进制文件,之后由测试团队 ...

  7. Docker(二) docker帮助、镜像及容器相关操作命令介绍

    一.docker 帮助相关命令 1.1 查看docker 版本 docker version 1.2 查看显示全系统信息 docker info  1.3 显示docker相关的所有命令以及参数说明 ...

  8. 把好最后一道关,Docker容器测试全探索

    当我们构建好Docker镜像并利用多套容器共同组合成应用程序,建立起持续交付通道,了解了如何将新创建的镜像纳入到生产或者测试环境当中之后,新的问题来了--我们该如何测试自己的Docker容器? 测试的 ...

  9. (Fabric 学习二)测试fabric2.0 test-network使用basic链码

    这是更新,上一次写的错误很多,这次来更新一下! 以下是参考: Hyperledger 学习(二):超级账本链码部署及调用(上:官方示例测试)_王三三的博客-CSDN博客 尝试链码编写及部署测试_rou ...

  10. 容器Docker(二)

    通过Dockerfile创建镜像 Docker 提供了一种更便捷的方式,叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像. docker ...

最新文章

  1. 使用lua实现一个简单的事件派发器
  2. python自定义函数详解_Python自定义函数
  3. 数学笔记--线性代数
  4. 感想3-对于业务逻辑复用、模板复用的一些思考(未完)
  5. miniblink载入html,winform使用miniblink展示html(全屏)
  6. js向下取整的奇技淫巧
  7. postgreSQL源码分析——索引的建立与使用——GIN索引(2)
  8. Dentry negativity/negative dentry
  9. python中修饰器的优点和作用_Python入门基础教程之装饰器
  10. Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?
  11. python设计题60元按商品的比例平分_团体程序设计天梯赛-练习集(5分题集)Python 3...
  12. 【光学设计】- 第一节
  13. IP的正则表达式 IP地址的正则表达式写法
  14. CapstoneCS5211,CS5212,CS5256,CS5811,CS5288,……型号大全
  15. “鲲鹏”展翅 宝德“自强”
  16. 现代C++的文艺复兴
  17. 哈霍兰服务器修改WCL记录,魔兽世界:怀旧服哈霍兰服务器再创纪录,最强“刷子”六天刷出420万荣誉...
  18. 载入pytorch的预训练模型时遇到_pickle.UnpicklingError: unpickling stack underflow
  19. vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in v-on handler (Promise/async): “Error: 失败“found in
  20. CISP查询具体步骤

热门文章

  1. html中并列式的应用,并列式结构梳理
  2. Python:folium地图标记icon分组展示
  3. ecshop添加多国货币
  4. hbase(十)merge region
  5. HDU-4417 Super Mario (主席树)
  6. 超好用的思维导图网站
  7. SAP解决方案(典型业务场景)
  8. 同轴电缆传输容易出现哪些干扰?
  9. 2022-2028全球与中国医学头骨CT市场现状及未来发展趋势
  10. java中HelloWorld原来还可以这样玩