docker基础学习(1)
今天在天池参加了一个比赛,里面涉及到了docker的容器技术的打包,之前一直没有接触过这些东西,所以乘着周末学习了一些docker基础知识。
一. 什么是docker
我们从官方文档里面可以看到,docker是为程序员提供一个可以构建、运行和移植的容器。这个容器可以帮助程序员们快速部署应用,这样的功能被称之为容器化。
容器化有以下几个特点:
- 灵活:即使是很复杂的程序,也可以被放在容器中。
- 轻量级:容器内的应用运行于主机的内核系统,并可以共享内核资源,这样就比虚拟机更轻量化,可以快速创建和启动。
- 可移植性:容器可以在本地创建,在云端部署,并在任何地方运行。
- 松耦合: 容器具有高度的封装性,可以在不破坏其他容器的前提下完成容器的升级或替换。
- 可扩展: 我们可以自动扩充并自动部署容器副本。
- 安全性:我们不需要手动配置任何参数,容器会帮助我们自动约束和隔离应用。
docker容器并不仅仅是一个正在运行的线程,它增加了一些封装的功能使得其与主机和其他的容器相互隔离,实现隔离功能的最主要的原因是容器可以和内部的镜像文件进行交互,一个镜像文件包括了程序运行的一切代码或二进制文件、依赖项、以及所需的任何其他的文件系统对象。
二. docker和VM的对比
由下图我们可以看到,docker在linux本地运行,并与其他容器共享主机的内核,当他运行一个独立的进程的时候,不会占用其他可执行文件的内存,容器内部只有程序以及所依赖的二进制文件和依赖哭,并与其他容器相隔离,这种轻巧的特性使得容器可以在几秒内启动。
相比之下虚拟机的虚拟的是整个操作系统,包括硬件的设置,这样的方式使得VM会产生大量的开销,超出了应用程序逻辑所消耗的的开销。
三. docker架构
在看架构图之前,我们先来了解一下docker的三个基本概念:镜像、容器、仓库。
- 镜像:镜像是只读,里面有需要运行的文件。它通常是用来创建容器的,镜像可以创建多个容器;我们可以在本地创建镜像也可以通过docker pull从仓库中下载。
- 容器:容器是镜像的运行的一个实例,我们在使用镜像创建容器的时候可以配置一定的参数,来约束容器的运行。容器的运行是相互独立的,容器之间是不会影响的,这样可以保证容器可以运行在一个相对安全的地方。
- 仓库:仓库是用来管理、存储镜像的,最有名的仓库就是docker hub,其他的比如国内阿里云的镜像仓库、网易晕的镜像仓库都是用来管理镜像的远程仓库,他们为我们提供下载上传渠道。
如上图,docker架构一共分为三个部分,docker 客户端, docker服务端,和docker注册中心。docker客户端用于发送docker指令,并与docker的守护进程进行通信,守护进程会对指令进行分析,并执行指令,注册中心就是仓库,它用来共享和管理dicker镜像,当我们使用docker pull的时候,docker守护进程会从指定的仓库中拉取镜像并放到本地,这样我们在使用docker run创建容器的时候,就可以直接使用本地的镜像直接创建容器。
四. docker常用指令
docker 有一些比较常用的指令
1 | 1. 从仓库拉取镜像 |
更多的指令我们可以在docker –help中查看。