Docker

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Docker是什么?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Dockert使你的运维成本降低,并且更容易管理您的项目,很多人可能对于Docker认为就是简化的虚拟机?但是其实不然,

容器(Docker)其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样把你的应用‘装’起来,这样,应用和应用之间就因为有了边界而不至于互相干扰;而且被撞到集装箱的应用也可以被到处搬来搬去;

与传统虚拟机特性对比:

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:

  • Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
  • Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
  • Docker 通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
  • Docker 通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。
  • Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。
  • Docker 利用Linux系统上的多种防护机制实现了严格可靠的隔离。从1.3版本开始,Docker引入了安全选项和镜像签名机制,极大地提高了使用Docker的安全性。
特性 容器 虚拟机
启动速度 秒级 分钟级
硬盘使用 一般为MB(最小容器2.67MB) 一般为GB
性能 接近原生 弱于原生
系统支持量 单机支持上千个容器 一般几十个

容器隔离进程原理

假设你已经有一个Ubuntu操作系统,并且运行了Docker

接下来创建一个容器:

docker run -it busybox /bin/sh

-it 参数告诉了Docker项目在启动容器后,需要给我们分配一个文本输入输出环境,即TTY,跟容器的标准输入相关联,这样我们就可以和这个Docker容器进行交互了。而 /bin/sh就是我们Docker容器中运行的程序。

这样,我的服务器就变成了宿主机,而一个运行着/bin/sh的容器就在这个宿主机里运行。

对于上面的例子和原理,如果你已经玩过Docker,相比不会陌生,此时,如果在容器中执行ps就会发现有趣的事情:

可以看到,在Docker里最开始执行的/bin/sh就是这个容器内部的第一好进程(PID =1),

而这个容器一共有俩个进程在运行,这就意味着,前面执行的/bin/sh以及ps,已经被Docker隔离在一个跟宿主机完全不同的世界。

本来,每当我们在宿主机上运行一个/bin/sh程序,操作系统都会给它分配一个PID(进程号),比如PID=100 。这个编号是进程的唯一标识,就像是你的身份证一样。

现在,我们要通过Docker在容器当中运行这个/bin/sh程序,这时,Docker就会在这个100号创建的时候给他施展一个'障眼法',让他永远看不到前面的99的进程,这样它就会误认为自己就是1号进程。

这种机制其实就是对被隔离的应用的进程空间动手脚,使得这些进程只能‘看到‘重新计算过的PID,比如PID=1,可实际上,在宿主机的操作系统里它还是100号进程。

这种技术技术Linux 中的 Namespace机制。Namespace的使用方式也很有意思:它其实只是Linux创建新进程的一个可选参数。

安装Docker

安装命令如下

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或者使用国内 daocloud 一件安装

curl -sSL https://get.daocloud.io/docker | sh

注:如果存在旧版本请先卸载

 sudo apt-get remove docker docker-engine docker.io containerd runc

Docker 常用命令指南

docker tag <image> <repository>:<tag>                                               # 标记镜像
docker pull <repository>:<tag>                                                      # 从docker hub下载镜像
docker rmi <image>                                                                  # 删除镜像
docker images                                                                       # 查看镜像
docker run -d -p 8080:8080 <image>                                                  # 启动容器
docker ps                                                                           # 查看容器
docker exec -it <container> bash                                                    # 在容器中执行命令
docker stop <container>                                                             # 停止容器
docker rm <container>                                                               # 删除容器
docker rmi <image>                                                                  # 删除镜像
docker images -a                                                                    # 查看所有镜像
docker images -f "dangling=true"                                                    # 查看未使用的镜像
docker images -f "dangling=true" -q                                                 # 查看未使用的镜像id
docker images -f "dangling=true" -q | xargs docker rmi                              # 删除未使用的镜像
docker images -f "dangling=true" -q | xargs docker rmi -f                           # 强制删除未使用的镜像
docker images -a | grep <image>                                                     # 查看镜像是否存在
docker images --help                                                                # 查看docker images命令帮助
docker image prune                                                                  # 删除未使用的镜像
docker iamge                                                                        # 查看镜像
docker ps                                                                           # 查看正在运行的容器
docker ps -a                                                                        # 查看所有容器(包括未运行的容器)
docker stop  容器名称|容器id                                                         # 停止容器
docker rm    容器名称|容器id                                                         # 删除容器
docker rmi   镜像名称|镜像id                                                         # 删除镜像
docker run -d -p 80:80 --name=nginx nginx                                           # 启动容器
docker exec -it 容器名称|容器id /bin/bash                                            # 进入容器
docker system prune -f 								    # 强制删除build缓存 
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker

“Docker ” 的相关文章