写点什么

docker 比一般多一点干货的初学者介绍

作者:Nick
  • 2022 年 6 月 16 日
  • 本文字数:1957 字

    阅读完需:约 6 分钟

docker比一般多一点干货的初学者介绍

因为最近想搭一个 phabricator 用来做看板和任务管理,一开始了解这个是 Easy 大大有在微博推荐过,后来苏洋也在群里和博客里说到了,看上去还不错的样子,因为主角是 docker 所以就不介绍太多,后面有机会写一下。


docker 最开始是之前在某位大佬的博客看到的,看上去有点神奇,感觉是一种轻量级的虚拟机,但是能做的事情好像差不多,那时候是在 Ubuntu 系统的 vps 里起一个 Ubuntu 的 docker,然后在里面装个 nginx,配置端口映射就可以访问了,后来也草草写过一篇使用 docker 搭建 mysql 集群,但是最近看了下好像是因为装 docker 的大佬做了一些别名还是什么操作,导致里面用的操作都不具有普遍性,而且主要是把搭的过程写了下,属于囫囵吞枣,没理解 docker 是干啥的,为啥用 docker,就是操作了下,这几天借着搭 phabricator 的过程,把一些原来不理解,或者原来理解错误的地方重新理一下。


之前写的 mysql 集群,一主二备,这种架构在很多小型应用里都是这么配置的,而且一般是直接在三台 vps 里启动三个 mysql 实例,但是如果换成 docker 会有什么好处呢,其实就是方便部署,比如其中一台备库挂了,我要加一台,或者说备库的 qps 太高了,需要再加一个,如果要在 vps 上搭建的话,首先要买一台机器,等初始化,然后在上面修改源,更新,装 mysql ,然后配置主从,可能还要处理防火墙等等,如果把这些打包成一个 docker 镜像,并且放在自己的 docker registry,那就直接 run 一下就可以了;还有比如在公司要给一个新同学整一套开发测试环境,以 Java 开发为例,要装 git,maven,jdk,配置 maven settings 和各种 rc,整合在一个镜像里的话,就会很方便了;再比如微服务的水平扩展。


但是为啥 docker 会有这种优势,听起来好像虚拟机也可以干这个事,但是虚拟机动辄上 G,而且需要 VMware,virtual box 等支持,不适合在 Linux 服务器环境使用,而且占用资源也会非常大。说得这么好,那么 docker 是啥呢


docker 主要使用 Linux 中已经存在的两种技术的一个整合升级,一个是 namespace,一个是 cgroups,相比于虚拟机需要完整虚拟出一个操作系统运行基础,docker 基于宿主机内核,通过 namespace 和 cgroups 分隔进程,理念就是提供一个隔离的最小化运行依赖,这样子相对于虚拟机就有了巨大的便利性,具体的 namespace 和 cgroups 就先不展开讲,可以参考耗子叔的文章

安装

那么我们先安装下 docker,参考官方的教程,安装,我的系统是 ubuntu 的,就贴了 ubuntu 的链接,用其他系统的可以找到对应的系统文档安装,安装完了的话看看 docker 的信息


sudo docker info
复制代码


输出以下信息


简单运行

然后再来运行个 hello world 呗,


sudo docker run hello-world
复制代码


输出了这些



看看这个运行命令是怎么用的,一般都会看到这样子的,sudo docker run -it ubuntu bash, 前面的 docker run 反正就是运行一个容器的意思,-it是啥呢,还有这个什么 ubuntu bash,来看看docker run`的命令帮助信息


-i, --interactive                    Keep STDIN open even if not attached
复制代码


就是要有输入,我们运行的时候能输入


-t, --tty                            Allocate a pseudo-TTY
复制代码


要有个虚拟终端,


Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
复制代码

镜像

上面说的-it 就是这里的 options,后面那个 ubuntu 就是 image 辣,image 是啥呢


Docker 把应用程序及其依赖,打包在 image 文件里面,可以把它理解成为类似于虚拟机的镜像或者运行一个进程的代码,跑起来了的叫 docker 容器或者进程,比如我们将要运行的docker run -it ubuntu bash的 ubuntu 就是个 ubuntu 容器的镜像,将这个镜像运行起来后,我们可以进入容器像使用 ubuntu 一样使用它,来看下我们的镜像,使用sudo docker image ls就能列出我们宿主机上的 docker 镜像了



一个 ubuntu 镜像才 64MB,非常小巧,然后是后面的bash,我通过交互式启动了一个 ubuntu 容器,然后在这个启动的容器里运行了 bash 命令,这样就可以在容器里玩一下了

在容器里看下进程,


只有刚才运行容器的 bash 进程和我刚执行的 ps,这里有个可以注意下的,bash 这个进程的 pid 是 1,其实这里就用到了 linux 中的 PID Namespace,容器会隔离出一个 pid 的名字空间,这里面的进程跟外部的 pid 命名独立

查看宿主机上的容器

sudo docker ps -a
复制代码


如何进入一个正在运行中的 docker 容器

这个应该是比较常用的,因为比如是一个微服务容器,有时候就像看下运行状态,日志啥的


sudo docker exec -it [containerID] bash
复制代码


查看日志

sudo docker logs [containerID]
复制代码


我在运行容器的终端里胡乱输入点啥,然后通过上面的命令就可以看到啦




本文使用署名 4.0 国际 (CC BY 4.0)许可协议,欢迎转载、或重新修改使用,但需要注明来源。

本文作者: Nicksxs

创建时间: 2020-03-08

本文链接: docker比一般多一点的初学者介绍

发布于: 刚刚阅读数: 4
用户头像

Nick

关注

还未添加个人签名 2017.12.22 加入

写代码的阿森 https://nicksxs.me https://nicksxs.com 也可以看我的博客

评论

发布
暂无评论
docker比一般多一点干货的初学者介绍_Docker_Nick_InfoQ写作社区