• Docker入门


    Docker入门

    上一节中,我们了解到了Docker 的一些基本知识点,它的一些核心概念,Docker的使用安装等。此篇文章我们对 Docker 进行入门讲解

    Docker 基本指令

    查看Docker 基本信息

    首先,我们会查看Docker 是否能够正常运行

    使用 docker info 查看 Docker 程序是否存在,功能是否正常

    上面我们使用了 docker info 指令,该命令会返回所有容器和镜像的数量、Docker 使用的执行驱动和存储驱动,以及Docker 的基本配置

    Docker 是基于客户端-服务器架构的。它有一个 Docker 程序,既能作为客户端,又能作为服务端。作为客户端时,docker 程序向 Docker 守护进程发送请求,然后再对返回的请求结果进行处理。

    运行容器

    现在,我们尝试启动第一个容器,我们可以使用docker run方法创建容器,docker run 提供了容器的创建到启动的过程。docker run 的执行流程如下图所示:

    现在我们开始运行一条指令docker run -i -t ubuntu /bin/bash,-i 标志保证容器中的 STDIN 时开启的,尽管我们并没有附着到容器中。持久的标准输入时交互式shell 的"半边天",-t 标志则是另外"半边天",它告诉 Docker 为要创建的容器分配一个 tty 终端。这样,docker 才能提供一个交互式的 shell 。示例中的 ubuntu 是一个常备镜像,也被称为基础镜像,它由Docker 公司提供并保存在 Docker Hub Registry 上。

    随后,Docker 在文件系统内部利用这个镜像创建了一个新的容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机通信的桥接网络接口。最后,我们告诉 Docker 在新容器内要运行什么命令,我们在容器中运用 /bin/bash 创建了一个 Bash Shell。

    使用容器

    现在,我们已经切换到了新的容器中

    容器ID 是@18178c34cd5a,这是一个完整的 ubuntu 系统,下面我们就来研究一下这个系统,你可以使用

    hostname获取主机名

    你会发现主机名和 root 后面的字符串一致,也就是说root 后面其实跟的是主机ID。

    我们再来看看 /etc/hosts 文件,如下所示

    还可以查看容器中运行的进程,ps -aux用于查询容器中的进行进程

    接下来我们要干什么?安装一个软件包?安装一下 vim 软件吧,使用apt-get update && apt-get install vim 进行安装。通过上述命令,我们可以在Ubuntu宿主机上使用 vim 口令和语法了。

    当你想退出时,直接使用 exit 就退回宿主机的命令行了。

    那么这个容器怎么样了?容器现在已经停止运行,只有在制定的/bin/bash 处于运行状态时,容器才会处于运行状态。一旦退出,容器也就停止了运行。

    但是容器还是存在的,你可以使用 docker ps -a查看系统中的容器列表

    默认情况下,使用 docker ps 能够列出所有正在运行的容器列表,使用 docker ps -a 列出系统出所有的容器列表包括正在运行的和已经停止的。

    容器命名

    Docker 会为我们创建的每个容器自动生成一个随机的名称。例如我们上面创建的 /bin/bash 的名称,如果想要指定名称,通过 --name 标志实现,例如sudo docker --name cxuan_container -i -t ubuntu /bin/bash

    上述命令会为你创建一个 cxuan_container 的ubuntu 镜像,你可以使用 docker ps -a 来查看最近的一个镜像。

    容器的名称必须是唯一的,而且有效的名称能够帮助我们理清楚上下级关系,所以明明很重要!!!

    重新启动已经停止的容器

    例如,我使用docker ps 命令没有发现容器正在启动

    但是你可以使用 docker start cxuan_container 启动指定的container。

    重新使用 docker ps 查看活跃的docker 容器

    也可以直接根据container id进行启动,我先用 docker ps -a 查看一下所有的container

    比如我想启动containerId 为 18178c34cd5a 这个容器,就直接使用 docker start 18178c34cd5a,启动完成后会直接输出 containerId。

    重新查询现在正在运行的 docker container ,发现两个都在运行了

    附着到容器上

    Docker 容器重新启动的时候,会沿用docker run 命令时指定的参数来运行,因此我们容器重新启动后会运行一个交互式会话shell。此外,我们也可以用 docker attach 命令,重新附着该容器到会话上

    ![image-20190812221942603](/Users/mr.l/Library/Application Support/typora-user-images/image-20190812221942603.png)

    也可以通过 docker attach containerId 的方式附着到会话上,如下所示

    如果退出 shell 进程,容器也会随之停止运行

    创建守护式容器

    除了这些交互式运行的容器,我们也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。大多数情况下我们需要以守护式来运行我们的容器。下面我们创建一个守护式容器

    上面的示例中使用了 -d ,因此 Docker 会将容器放在后台进行。

    我们还在容器要运行的命令行里使用了一个 while 循环,该循环会一致打印 hello world 直到容器或者进程停止运行。

    容器内部都在干什么

    上面的示例我们创建了一个 docker 的守护式进程,进程里面一直在使用 while 进行循环输出 hello world,为了探究容器内部都在做什么,我们使用docker logs 命令来获取容器的日志,如下

    可以看到,其内部一直在做while 循环并输出 hello world,Docker 会输出最后几条日志并返回,我们可以使用 -f 参数来监控Docker 的日志,这与 tail -f 命令非常像

    我们在日志的循环输出中加了几个空行,能让你直观的感受到我们正在监控 docker 日志的运行过程,你可以使用 control + c 来退出监控。

    我们也可以跟踪日志的某一片段,例如,可以使用 docker logs --tail 10 daemon_dave获取日志的最后10行内容。另外,也可以使用 docker logs --tail 0 -f daemon_dave 命令来追踪某个容器的最新日志而不必读取整个日志文件

    追踪最新日志:

    其实可以看到,日志一直在循环输出,没有显示之前的日志信息。

    为了让调试更加简单,我们可以使用 -t 来为每条日志加上时间戳,如下

    查看容器内的进程

    除了容器的日志,我们也可以查看容器内部运行的进程,为了做到这一点,我们使用docker top命令

    执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令

    容器内部运行进程

    在 Docker 1.3 之后,我们可以通过 docker exec 命令在容器内部额外启动新进程。可以在容器内部运行的进程有两种类型: 后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。对于需要在容器内部打开的 shell 任务,交互式任务还是很实用的,下面是一个后台任务的例子

    这里的标志 -d 表示是一个后台进程。-d 标志之后,跟的是要在内部创建进程的名字以及要执行的命令,上面的例子会在daemon_dave 之后创建了一个新文件,文件名为/etc/new_configP_file ,通过 docker exec 后台命令,我们可以在正在运行的容器中进行维护、监控以及任务管理。

    我们也可以在容器内部打开一个交互式任务,如下

    因此你也可以很直观的看出交互式任务后台任务之间的区别:交互式任务可以进行运行环境的切换,而后台任务一旦运行无法切换,只能进行停止或者开始

    上面的-t-i 标志为我们的执行创建了 TTY 并捕捉 STDIN。接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。

    tty(终端设备的统称):
    在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。这些文件赋予了linux同时处理多任务,多窗口切换的能力。

    STDIN是标准输入,一般指键盘输入到缓冲区里的东西。

    其他还有

    stdout(Standardoutput)标准输出

    stderr(Standarderror)标准错误

    停止守护式进程

    要停止守护式进程,需要执行 docker stop命令,例如

    也可以停止指定的 containerId,例如

    Docker stop 命令会像 Docker 容器进程发送 SIGTERM 信号,如果你想快速停止某个容器,也可以使用 docker kill 命令来向进程发送 SIGKILL 信号。

    可以使用 docker ps 来查看正在运行中的 docker 容器,还有一个很实用的命令 docker ps -n x,该命令会显示最后 x 个容器,不论这些容器是正在运行还是已经停止。

    自动重启容器

    由于某种错误而导致容器停止运行,可以使用 --restart 命令来重启容器。--restart 会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是 Docker 不会重启容器。

    docker run --restart=always --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done"

    --restart 标志被设置为 always。无论容器的退出代码是什么,Docker 都会自动重启该容器。除了 always,我们可以将这个标志设置为 on-failure,这样,只有当容器的退出代码为非0 的时候,才会自动重启。另外,on-failure 还接受一个可选的重启次数,如 : --restart=on-failure:5

    深入容器

    除了使用 docker ps 命令获取正在运行的容器信息,还可以使用 docker inspect 来获取更多的容器信息

    下面还有很多信息

    我们还可以使用 -f 或者 --format 标志选定查看结果。

    删除容器

    如果容器已经不在使用,可以使用 docker rm 来删除,如下

    目前,还没有办法删除所有的容器,不过可以通过下面的小技巧来删除所有的容器

    注意:正在运行的docker 容器是无法删除的,你必须先停止容器的运行,使用 docker stop 或者 docker kill 停止容器,然后才可以删除。

    总结

    本能文章作为Docker 的入门,主要包括Docker对容器的一些基本用法:

    • 查看Docker 基本信息
    • 如何运行一个容器
    • 给容器命名
    • 重启启动容器
    • 附着容器
    • 创建守护式容器
    • 容器日志
    • 容器内部运行容器
    • 容器停止
    • 自动重启容器
    • 容器删除

    下一篇文章我们会介绍使用 Docker 镜像和仓库

    公众号提供 优质Java资料 以及CSDN免费下载 权限,欢迎你关注我

    文章参考:

    http://www.cloud.tencent.com/developer/article/1341777

    《第一本Docker书》

    想要获取电子书链接?关注上面公众号,回复002即可获取

  • 相关阅读:
    sql server 数据类型转换
    sql server replace 的使用方法
    sql sever 触发器的概念和使用
    转,sql 50道练习题
    sql server 计算属性,计算字段的用法与解析
    sql server 的模糊查询的用法
    sql server 游标的基本用法
    sql server if exists用法
    sql server in和exists 的区别
    Sql日期时间格式转换大全
  • 原文地址:https://www.cnblogs.com/cxuanBlog/p/11348978.html
Copyright © 2020-2023  润新知