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的组成结构
说明
-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工作流程
步骤:
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
- Docker用的是宿主物理机上的硬件,不用Hypervisor实现硬件虚拟化,所以CPU,内存利用率在效率上有优势
- Docker利用的是宿主机的内核,不需要Guest OS,因此Docker不需要和虚拟机一样要加载操作系统的内核,利用的是宿主机的操作系统,因此过程非常快,是秒级的(而新建一个虚拟机时,虚拟机上的虚拟软件需要加载Guent OS,这个过程时分钟级别的)