美文网首页
第4章 纵观Docker

第4章 纵观Docker

作者: super_pcm | 来源:发表于2019-12-24 16:18 被阅读0次

这里分别从运维视角和开发视角去看待理解Docker,看看有什么不同。此外Docker还有一种快速启动的方式,叫做Play With Docker(PWD)。PWD是一个基于Web界面的Docker环境,并且可免费使用,可以作为临时启动Docker环境来用。

4.1 运维视角

安装Docker的时候,会涉及到两个主要组件:Docker客户端和Docker daemon(有时也被称为“服务端”或者“引擎”)。daemon实现了Docker引擎的API。
使用Linux默认安装时,客户端和daomon之间的通信是通过本地IPC/UNIXSocket完成的(/var/run/docker.sock)。可以通过 docker version来查看。

[pangcm@docker02 ~]$ docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf583a
 Built:             Fri Oct 18 15:52:22 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf583a
  Built:            Fri Oct 18 15:50:54 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

4.1.1 镜像

将Docker镜像理解为一个包含了OS文件系统和应用的对象会很有帮助,与虚拟机做对比的话,可以类比为虚拟机的模板。在Docker的世界中,镜像实际上等价于未运行的容器。如果你是一名开发,可以把镜像类比为类(Class)。

要查看Docker的镜像,使用 docker image ls 命令来查看。

[pangcm@docker02 ~]$ docker image ls 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        10 months ago       1.84kB

上面的那个hello-world镜像是前面安装docker演示的时候拉取的,获取镜像的操作称为拉取(pulling),比如下面的命令我会拉取一个ubuntu的镜像。

docker pull ubuntu

关于镜像的存储位置以及镜像内部构成,本书会在后续的章节中详细介绍。现在,读者只需要知道镜像包含了基础操作系统,以及应用程序运行所需要的代码和依赖包。上面拉取的ubuntu镜像有一个精简版的Ubuntu Linux文件系统,其中包含部分的Ubuntu常用工具。如果拉取的是nginx这类的应用程序,则里面还会包括了运行Nginx所需的代码。

重要的是,Docker的每个镜像都有自己唯一的ID。用户可以通过引用镜像的ID或名称来使用镜像。如果用户选择使用镜像ID,通常只需要输入ID开头的几个字符即可——因为ID是唯一的,Docker知道用户想要引用的具体镜像是哪一个。

4.1.2 容器

我们启动下前面我们拉取的Ubuntu镜像,使用docker container run命令来启动,当然你也可以不输入container,直接使用docker run

[pangcm@docker02 ~]$ docker container run -it ubuntu:latest /bin/bash
root@fd1e2f056f5e:/# 

我们运行这个命令的时候,可以看到提示符发生了变化,这是因为 -it参数会将shell切换到容器的终端中去,也就是说你已经位于容器内部了。

接下来分析下docker container run命令。docker container run告诉docker daemon 启动新的容器。其中 -it 参数告诉Docker开启容器的交互模式并将读者当前的Shell连接到容器的终端去。接下来,命令告诉Docker,用于想基于ubuntu:latest镜像启动容器。最后,命令告诉Docker,用户想要在容器内部运行哪个程序(bash).

在容器内部运行ps命令查看当前运行的全部进程。

root@fd1e2f056f5e:/# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 13:54 pts/0    00:00:00 /bin/bash
root         10      1  0 13:58 pts/0    00:00:00 ps -ef

可以看到,容器中实际运行的进程只有一开始指定的 /bin/bash。输入exit会退出容器,并且会关闭容器。要退出容器的同时还保持容器的运行,请使用组合键 Ctrl-PQ。我们使用组合键退出后用ps命令(也就是看我们主机的进程)

[pangcm@docker02 ~]$ ps -ef
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 31395 ep_pol 17:33 ?        00:00:02 /usr/lib/syste
1 S root          2      0  0  80   0 -     0 kthrea 17:33 ?        00:00:00 [kthreadd]
1 S root          4      2  0  60 -20 -     0 worker 17:33 ?        00:00:00 [kworker/0:0H]
1 S root          6      2  0  80   0 -     0 smpboo 17:33 ?        00:00:00 [ksoftirqd/0]
1 S root          7      2  0 -40   - -     0 smpboo 17:33 ?        00:00:00 [migration/0]
1 S root          8      2  0  80   0 -     0 rcu_gp 17:33 ?        00:00:00 [rcu_bh]
1 S root          9      2  0  80   0 -     0 rcu_gp 17:33 ?        00:00:00 [rcu_sched]
......

可以明显看到主机运行的进程比容器中的进程多很多的,要查看运行状态的容器,可以使用docker container ls来查看。

[pangcm@docker02 ~]$ docker container ls 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
fd1e2f056f5e        ubuntu:latest       "/bin/bash"         11 minutes ago      Up 11 minutes                           musing_easley

这里可以看到这个容器是在11分钟之前创建的,并且一直在运行着的。

4.1.3 连接到运行中的容器

执行docker container exec 命令,可以将shell连接到一个运行中的容器终端。因为之前示例中的容器已经被关闭,我按照上面的办法重新运行了一个ubuntu的镜像,下面使用命令连接到该容器上。

[pangcm@qcloud01 ~]$ docker container exec -it d69 bash
root@d691ce0106ab:/# 

这里使用的是镜像ID的前面3个字符,其实我们很少这么操作。通常情况下我们都是在启动容器的时候,给容器指定一个名称,后续对容器的操作都是用这个名字。这方面的内容后面会有介绍。这里可以看到我们已经连接进入到了docker容器里面了。那些参数的使用和前面介绍的docker container run 的时候一样的。

下面我们来演示如何停止以及删除容器,首先我们和前面一样用组合键(Ctrl-PQ)退出容器,然后使用docker container stop和docker container rm命令来停止并删除容器。

[pangcm@qcloud01 ~]$ docker stop d69
d69
[pangcm@qcloud01 ~]$ docker rm d69
d69

然后我们使用docker container ls -a 去确认还有没有该容器的存在。

4.2 开发视角

容器即应用!

开发人员可以使用Dockerfile来构建他们的应用,将应用代码容器化,最终以容器的方式运行。

这里书中有演示一个Node.js 的web应用,需要从作者的github上下载示例的Dockerfile。这里不做介绍,针对Dockerfile后面会有详细的介绍。

4.3 本章小结

在运维部分,我们下载了Docker镜像,启动容器并且登录到容器内部执行相应的命令,最后停止删除容器。

在开发部分,我们完成了简单应用容器化的过程:从GitHub拉取应用源代码,并且通过Dockerfile中的指令,将应用代码构建到镜像中。接着运行了该容器化应用。

相关文章

  • 第4章 纵观Docker

    这里分别从运维视角和开发视角去看待理解Docker,看看有什么不同。此外Docker还有一种快速启动的方式,叫做P...

  • docker学习(4) DevOps视角

    docker学习(4) DevOps视角 纵观Docker 运维(Ops)视角 开发(Dev)视角 运维包括:下载...

  • [Docker性能优化]Docker基本操作

    书中章节:第1章 准备Docker 宿主机第2章 优化Docker 镜像第3章 用Chef 自动化部署Docker...

  • 纵观

    朝不思暮,夜不喜明 生只为死,衰即是荣

  • 纵观

    App Distribution Guide iOS Technology Overview App Progra...

  • docker

    第1章 Docker容器介绍 1.1 docker是什么 Docker 是 Docker.Inc 公司开源的一个基...

  • Docker

    第1章 Docker容器介绍 1.1 docker是什么 Docker 是 Docker.Inc 公司开源的一个基...

  • Docker配置mysql, 并且从客户端连接

    第1步:查找mysql的镜像;docker search mysql 第2步:拉取mysql镜像;docker p...

  • Docker基础入门实战

    第1章docker简介 1.1what is Docker Docker是一个开源的应用容器引擎,基于Go语言并遵...

  • Springboot核心技术学习笔记二

    第 5 章 SpringBoot 与 Docker5.1 Docker 简介5.2 核心概念5.3 安装Docke...

网友评论

      本文标题:第4章 纵观Docker

      本文链接:https://www.haomeiwen.com/subject/qirfoctx.html