Docker基础知识

1、说明

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器,基于go语言开发。

Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)

1.1 为什么要使用docker?
  • 传统环境:
    1.环境不一致。
    2.在多用户的操作系统下,会相互影响。
    3.运维成本过高。
    4.安装软件成本过高。

  • Docker学习网址

官网文档

  • Docker镜像国际仓库

https://hub.docker.com/

2、Docker配置修改国内镜像

1、通过配置文件启动Docker,修改 /etc/docker/daemon.json文件并添加上 registry-mirrors 键值。没有daemon.json文件新增文件(安装方式使用dockerDesktop安装)

 sudo vim /etc/docker/daemon.json

2、添加网易镜像,(也可以添加阿里巴巴)

{"registry-mirrors": ["http://hub-mirror.c.163.com"]}

3、重启docker

systemctl restart docker

4、查看docker版本:docker version

[lond@lsyPro ~ ]$ docker version
Client: Docker Engine - Community
 Cloud integration: 1.0.12
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:13:00 2021
 OS/Arch:           darwin/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:15:47 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info 查看docker配置信息 会介绍客户端服务端信息

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.6.0)
Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.5
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.10.25-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 6
 Total Memory: 1.941GiB
 Name: docker-desktop
 ID: ICCY:X3BS:MG4T:2I3X:MNNJ:SEZK:VRWU:AXL3:KO4Y:ZA37:R7RL:NWI4
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

3、docker工作机制

参考:https://blog.csdn.net/wrs120/article/details/83583391
http://blog.itpub.net/29715045/viewspace-2654587/

3.1 docker的组成结构
image.png
说明

-Docker client 客户端/Docker daemon 守护进程

docker是C/S架构的程序,docker客户端向docker服务器端也就是docker的守护进程发送请求,守护进程处理完所有的工作并返回结果,通过docker客户端执行各种命令,然后docker客户端会将这些命令发送给守护进程,守护进程执行的结果还会传回客户端,使我们能通过客户端来查看命令运行的结果。

  • Image(镜像)

容器基于镜像启动和运行,镜像好比容器的源代码,保存了用于启动容器的各种条件,docker的镜像是一个层叠的只读文件系统。最底端是一个引导文件系统,即bootfs,docker用户几乎不会和引导文件系统有交互,当一个容器启动后,它将会被移动到内存中,而引导文件系统将会被卸载,docker镜像的第二层是root文件系统rootfs(ubuntu),位于引导文件之上,root文件系统可以是一种或多种的文件系统,docker中root文件系统只能是只读状态,并且docker利用联合加载的技术又会在root文件系统之上加载更多的只读文件系统。联合加载指的是一次加载多个文件系统,但在外面看来只能看到一个文件系统。联合加载会将各种文件系统叠加到一起。docker将这样的文件系统称之为镜像。

  • Registry(仓库)

docker用仓库来保存用户构建的镜像,仓库分私有和公有两种,docker公司提供一个公有的仓库,叫docker hub。

  • Container(容器)

容器通过镜像启动,容器中可以运行客户的一个或多个进程。当一个容器启动时,该镜像会在最顶层加载一个读写文件系统(可写层),在docker中运行的程序,就是在这个层中进行执行的,当docker第一次启动容器时,初始的可写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上。比如,如果想修改一个文件,该文件会从最下面的只读层复制到读写层,该文件的只读版本依然存在,但是被读写的文件副本所隐藏,这就是写时复制。每一个只读镜像层都是只读的,当创建一个新容器时,docker会构建一个镜像栈,在栈的最顶层添加可写层。

3.2 docker工作流程
image.png

步骤:
1、docker client端使用docker pull 通过docker服务器去远程中央拉取镜像到本地镜像仓库
2、docker client端使用docker run 从镜像中运行docker容器(containers)
3、docker client端使用docker build 将本地应用构建镜像存放到镜像仓库

工作机制

4、docker 优点

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:您可以即时部署更新和升级。
  • 便携式:您可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:您可以增加并自动分发容器副本。
  • 可堆叠:您可以垂直和即时堆叠服务。

5、docker为什么会比虚拟机快

参考:https://blog.csdn.net/wrs120/article/details/83583391

  1. Docker用的是宿主物理机上的硬件,不用Hypervisor实现硬件虚拟化,所以CPU,内存利用率在效率上有优势
  2. Docker利用的是宿主机的内核,不需要Guest OS,因此Docker不需要和虚拟机一样要加载操作系统的内核,利用的是宿主机的操作系统,因此过程非常快,是秒级的(而新建一个虚拟机时,虚拟机上的虚拟软件需要加载Guent OS,这个过程时分钟级别的)

你可能感兴趣的:(Docker基础知识)