【Docker】第三篇 Docker容器管理

时间:2023-01-12 13:10:58

一、Docker容器概述:

  • 简单理解容器是镜像的一个实例。
  • 镜像是静态的只读文件,而容器的运行需要可写文件层。

二、创建容器

[root@web130 ~]# docker create -it ubuntu:latest    #-i打开标准输入,-t是打开一个伪终端
17c54a92a4e83503e329c3c80e4d10bf298516edffa56b2cea8fa2aa73d4c00c

#我们要了解一下容器标识符:如上显示的CONTAINER ID作为容器的唯一标识。
#CONTAINER ID 默认是128位,但是一般16位就足以保证其在本机的唯一性。所以默认我们使用简约形式即可(id的前16位)。
#当然我们也可以根据自己情况选择适当的位数,来代表容器启停

[root@web130 ~]# docker ps -a  #显示所有容器,#docker ps 显示正在运行的容器。#docker ps --no-trunc输出信息不截断显示,可以看到完整id

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
17c54a92a4e8 ubuntu:latest "/bin/bash" seconds ago Created quizzical_bhabha

1、查看docker运行的进程:

[root@web130 ~]# docker container ls  #新命令等价与下边ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@web130 ~]# docker ps #可以看到已经启动的容器、每个容器的ID、所使用的镜像、创建时间、当前状态、监听的端口和容器的名字
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@web130 ~]#

2、启动容器:

#我们可以通过容器ID不同的前几位id号来代表指定在容器,也可以用全部ID号

[root@web130 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17c54a92a4e8 ubuntu:latest "/bin/bash" minutes ago Created quizzical_bhabha
[root@web130 ~]# docker start [root@web130 ~]# docker ps #可以看到已经启动的容器、每个容器的ID、所使用的镜像、创建时间、当前状态、监听的端口和容器的名字
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
17c54a92a4e8 ubuntu:latest "/bin/bash" minutes ago Up About a minute quizzical_bhabha
[root@web130 ~]#

3、新建并启动一个容器

**docker run在创建容器的时候,在后台运行的标准操作如下:

  1. 检查本地是否有指定镜像,如果没有直接从公有仓库下载;
  2. 利用镜像创建一个容器,并启动该容器;
  3. 分配一个文件系统,并在只读的镜像层外边挂载一层可读写层;
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
  5. 执行用户指定的应用程序;
  6. 执行完毕后容器制动终止。
[root@web130 ~]# docker run ubuntu /bin/echo 'hello world'
hello world
[root@web130 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17c54a92a4e8 ubuntu:latest "/bin/bash" minutes ago Up minutes quizzical_bhabha
[root@web130 ~]#
#**启动一个bash终端,允许用户交互
[root@web130 ~]# docker run -it ubuntu:14.04 /bin/bash
root@041941f24d3d:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@041941f24d3d:/# pwd
/
root@041941f24d3d:/# ps #可以看到容器只运行了一个bash应用,并没有运行其他无关进程
PID TTY TIME CMD
pts/ :: bash
pts/ :: ps
root@041941f24d3d:/# exit #退出容器,或者Ctrl+d
exit
[root@web130 ~]#
#我们可以加上--rm选项,--name选项,容器退出时,自动删除容器
[root@web130 ~]# docker run -it --rm ubuntu:14.04 /bin/bash
[root@web130 ~]# docker run --name t1 -it --rm ubuntu:14.04 /bin/bash #指定容器名 某些情况下,docker run 容器执行错误,默认情况下常见错误码:
#:Docker daemon执行错误,例如指定不支持的Docker命令参数;
#:所指定命令无法执行,例如权限出错;
#:容器内命令无法找到。
命令执行错误会返回错误码

4、容器守护态(Daemonized)运行

#一些时候让容器在后台运行,用参数-d 来实现
[root@web130 ~]# docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
da81dbb0e2dadde799ca4d40189c3d14911ea269f76ce7843f9d585d7efbcd6a
[root@web130 ~]# [root@web130 ~]# docker ps #可以看到运行的容器,当然我们也可以上条命令中--name 指定容器名字,便于识别
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da81dbb0e2da ubuntu "/bin/sh -c 'while t…" seconds ago Up seconds festive_mirzakhani
17c54a92a4e8 ubuntu:latest "/bin/bash" minutes ago Up minutes quizzical_bhabha
[root@web130 ~]# docker logs da8
hello world
hello world
hello world
....省略....

三、终止容器

stop和kill命令的区别:
*stop是首先发送SIGTERM信号,等一段时间(默认10秒),在发送SIGKILL信号终止容器
*kill直接发送SIGKILL终止容器,强制终止容器
[root@web130 ~]# docker stop da8 #可以-t 指定等待时间,
da8
[root@web130 ~]# docker ps #查看启动的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17c54a92a4e8 ubuntu:latest "/bin/bash" minutes ago Up minutes quizzical_bhabha
[root@web130 ~]# docker ps -a #查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da81dbb0e2da ubuntu "/bin/sh -c 'while t…" minutes ago Exited () seconds ago festive_mirzakhani
041941f24d3d ubuntu:14.04 "/bin/bash" minutes ago Exited () minutes ago nervous_jepsen
439157f8ea55 ubuntu "/bin/echo 'hello wo…" minutes ago Exited () minutes ago vigorous_boyd
[root@web130 ~]# docker ps -qa #查看所有容器ID
da81dbb0e2da
041941f24d3d
439157f8ea55
[root@web130 ~]# docker start da8 #启动指定容器
[root@web130 ~]# docker restart da8 #将一个运行的容器先终止,然后在重启启动它

四、进入容器

#前文-d我们将容器放在后台运行,无法操作也无法看到容器中的信息,如何进入一个后台运行的容器,方法如下:

、attach命令
[root@web130 ~]# docker run --name ylt -itd ubuntu #创建一个名字为ylt的容器
7058cf192514f4a6de3340d86d61d6f2dbea0503f85ae35634fb2511cc026f6d
[root@web130 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NMES
7058cf192514 ubuntu "/bin/bash" seconds ago Up seconds ylt
[root@web130 ~]# docker attach ylt #进入后台运行的容器
root@7058cf192514:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@7058cf192514:/# 注:当多窗同时通过attach命令连到容器的时候,所有窗口会同步显示。当某个窗口阻塞的时候,其他窗口无法执行命令
当一个窗口exit容器的时候另个也会退出。
、exec命令,最推荐的一种方式
#docker从1..0版本起提供了更加方便的exec命令,可以在容器内直接执行任意命令,同时如果多窗口执行,不会出现attach的问题:
[root@web130 ~]# docker start ylt #启动容器
ylt
[root@web130 ~]# docker exec -it 7058cf192514 /bin/bash #进入容器,可以多窗口执行
root@7058cf192514:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@7058cf192514:/# exit
[root@web130 ~]#
、nsenter工具需要安装,此处不详细介绍

五、删除容器

#docker rm 删除一个终止的容器
#docker rm -f 可以强制删除一个正在运行容器

[root@web130 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7058cf192514 ubuntu "/bin/bash" minutes ago Up minutes ylt
da81dbb0e2da ubuntu "/bin/sh -c 'while t…" minutes ago Exited () minutes ago festive_mirzakhani
041941f24d3d ubuntu:14.04 "/bin/bash" About an hour ago Exited () About an hour ago nervous_jepsen
[root@web130 ~]# docker rm 041941f24d3d
[root@web130 ~]# docker ps #我们可以看到刚才启动的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7058cf192514 ubuntu "/bin/bash" minutes ago Up minutes ylt
17c54a92a4e8 ubuntu:latest "/bin/bash" About an hour ago Up About an hour quizzical_bhabha
[root@web130 ~]# docker rm ylt #运行中的容器无法删除
Error response from daemon: You cannot remove a running container 7058cf192514f4a6de3340d86d61d6f2dbea0503f85ae35634fb2511cc026f6d. Stop the container before attempting removal or force remove
[root@web130 ~]# docker rm -f ylt #可以强制删除运行中的容器,直接发送的是SIGKILL信号
ylt
[root@web130 ~]#
[root@web130 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17c54a92a4e8 ubuntu:latest "/bin/bash" About an hour ago Up About an hour quizzical_bhabha
[root@web130 ~]#

六、导入和导出容器

#其实就是一个容器迁移的过程,不用考虑容器是否为运行状态

、导出容器可以使用-o,或者输出重定向“>”
[root@web130 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da81dbb0e2da ubuntu "/bin/sh -c 'while t…" About an hour ago Exited () minutes ago festive_mirzakhani
041941f24d3d ubuntu:14.04 "/bin/bash" About an hour ago Exited () About an hour ago nervous_jepsen
[root@web130 ~]# docker export -o test_docker_run.tar da8 #-o
[root@web130 ~]# ls |grep test_docker*
test_docker_run.tar
[root@web130 ~]# docker export >test_docker_stop.tar #输出重定向
[root@web130 ~]# ls |grep test_docker
test_docker_run.tar
test_docker_stop.tar
[root@web130 ~]#
、导入容器
#导出的文件可以使用docker import 命令导入变成镜像,该命令格式为:
[root@web130 ~]# cat test_docker_run.tar |docker import - test/ubuntu:v1.
sha256:7528eea6db23ec008244e9f65205421fcaa164748054b25dbae1a00f84582b66
[root@web130 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1. 7528eea6db23 seconds ago .8MB
#通过指定 URL 或者某个目录来导入
[root@web130 ~]#docker import http://example.com/exampleimage.tgz test/ubuntu:v1.0

【Docker】第三篇 Docker容器管理的更多相关文章

  1. Scala语言笔记 - 第三篇(容器方法篇)

    Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: ​ 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程( ...

  2. Docker系列三:Docker容器管理

    Docker容器管理 1. 单一容器管理 1) 容器的启动 $ docker run --name gitlab-redis -d --volume /srv/docker/gitlab/redis: ...

  3. docker第三篇 镜像管理基础

    docker 工作原理: 常用的命令docker run .create .start... 都是客户端命令 Docker Daemon 接收到客户端传过来的命令以后 docker daemon会根据 ...

  4. docker简单介绍----镜像和容器管理

    docker可以分为三部分:docker镜像   docker仓库  docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...

  5. Docker&K8S&持续集成与容器管理--系列教程

    前言 网络虚拟化 一 Docker简介 Docker介绍  → B站视频链接 Docker架构  → B站视频链接 二 Docker安装 Ubuntu Docker 安装 CentOS Docker ...

  6. Docker之单多/机容器管理

    Compose是用于定义和运行多容器Docker应用程序的工具.通过Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用一个命令,就可以从配置中创建并启动所有服务. Docker-C ...

  7. Docker 第三篇--构建Image

    什么是 docker Image 和container? 我们先来看看官网是怎么说的. Docker Engine provides the core Docker technology that e ...

  8. docker 实践三:操作容器

    在学习了 docker 镜像的内容后,我们在来看 docker 的另一个核心点:容器. 注:环境为 CentOS7,docker 19.03 docker 的容器是镜像的一个运行实例.docker 镜 ...

  9. Docker系列(三):Docker自定义容器镜像

    将容器编程镜像: docker commit [repo:tag] 网上有这句话:当我们在制作自己的镜像的时候,会在container中安装一些工具.修改配置,如果不做commit保存 起来,那么co ...

随机推荐

  1. 实用CSS3的transform实现多种动画效果

    查看效果:http://keleyi.com/a/bjad/b6x9q8gs.htm 以下是代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...

  2. Windows平板优化设置

    低于千元的windows平板,和iPad差异主要在于做工方面,以及Modern软件的欠缺,续航约5小时,但其可玩性和扩展性更好. 若将其视为平板附送了桌面电脑的功能,花费一定时间容易定制成适合个人使用 ...

  3. left join与on&comma;where 结合一起用的异同

    I.数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left join时,on和where条件的区别如下: 1. on条件是在生成临时表时使用 ...

  4. CCNP第三天 EIGRP综合实验

    实验题如图所示:其中R2连R3 R5为快速以太网线,其他均为串线,帧中继默认是富曼斯(全连网状结构),即所有接入的路由之间的PVC都已经打通,所有  要关闭R5和R8的逆向arp功能,来手工配置R5到 ...

  5. Python 的PyCurl模块使用

    PycURl是一个C语言写的libcurl的python绑定库.libcurl 是一个*的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,PycURL 是一个非常快速(参考多并发操作) ...

  6. 从Google Play下载应用并不安全,上千款监视软件伪装其中

    如果你认为在官方应用市场里下载app就觉得安全的话,小编可以负责任的回答你:"too young too simple,sometimes native" 今年4月,BankBot ...

  7. SSH 连接慢

    关闭连接时的 DNS 解析 # 编辑配置文件,修改如下配置项 vim /etc/ssh/sshd_config GSSAPIAuthentication no UseDNS no # 重启服务 sys ...

  8. 数据结构之哈希(hash)表

    最近看PHP数组底层结构,用到了哈希表,所以还是老老实实回去看结构,在这里去总结一下. 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过 ...

  9. split函数用法

    split函数详解   split翻译为分裂.  split()就是将一个字符串分裂成多个字符串组成的列表. split()当不带参数时以空格进行分割,当代参数时,以该参数进行分割. //---当不带 ...

  10. Lombok 在继承类上面的注意

    找不到符号异常 在控制台项目中配置Lombok 编译会报错 找不到符号 解决 方法: 父类字段ToString不了 @Data @NoArgsConstructor @AllArgsConstruct ...