Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的
Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。非常方便。
一个完整的Docker有以下几个部分组成:
-
DockerClient客户端
-
Docker Daemon守护进程
-
Docker Image镜像
-
DockerContainer容器
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker
客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互
- Automating the packaging and deployment of
applications(使应用的打包与部署自动化)
-
Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
-
Automated testing and continuous
integration/deployment(实现自动化测试和持续的集成/部署)
- Deploying and scaling web apps, databases and backend
services(部署与扩展webapp、数据库和后台服务)
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku),
构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库 网络管理相对简单,主要是基于namespace隔离
cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
Docker对disk的管理比较有限 container随着用户进程的停止而销毁,container中的log等用户数据不便收集
1.实现原理不同
VM通过Hypervisor提供基础环境实现虚拟机 Docker通过docker
engine与物理机共享操作系统而不是在向虚拟机一样,完全仿真一个虚拟操作系统,Docker达到了类似虚拟机的效果,但是又没有虚拟机的开销,它虚拟的层次更加高。Docker不虚拟机器,仅仅虚拟应用的运行环境
2.使用上的区别
_**Docker在宿主机器的操作系统上创建Docker引擎,直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源,所以操作速度快。
这个其实安装一个ubuntu的虚拟机和拉取一个Docker的ubuntu镜像文件,运行一下就知道了,区别很明显,虚拟机开一下大概得2分多钟,而Docker只需要2秒钟。**_
===========================================================================
镜像
容器
仓库
docker实际可以理解为简易版的linux系统
容器就是镜像的一个实例
仓库(Repository)是存放镜像的厂所
仓库注册服务器(Registry)放着多个仓库,每个仓库又放着多个镜像,每个镜像又有不同的标签(类似版本号)
仓库分为公开仓库和私有仓库两种形式 最大的公开库是Docker Hub。(太慢,国外网站) 国内公开仓库包括阿里云,网易云
===================================== 需要zi料+ 绿色徽【vip1024b】
========================================
[root@a ~]# ping qq.com
PING qq.com (125.39.52.26) 56(84) bytes of data.
64 bytes from no-data (125.39.52.26): icmp_seq=1 ttl=50 time=59.6 ms
64 bytes from no-data (125.39.52.26): icmp_seq=2 ttl=50 time=152 ms
64 bytes from no-data (125.39.52.26): icmp_seq=3 ttl=50 time=210 ms
64 bytes from no-data (125.39.52.26): icmp_seq=4 ttl=50 time=88.2 ms
^C
— qq.com ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3015ms
rtt min/avg/max/mdev = 59.646/127.784/210.411/58.431 ms
[root@a ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@a ~]# uname -r
3.10.0-1062.el7.x86_64
[root@a ~]# yum install -y yum-utils
[root@a ~]# yum-config-manager \
–add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
[root@a ~]# yum makecache fast
Docker安装报错:containerd.io-1.2.13-3.1.el7.x86_64 (docker-ce-stable) 需要:container-selinux >= 2:2.74
解决方案:
[root@a ~]# yum install -y wget
[root@a ~]# wget -O http://mirrors.aliyun.com/repo/Centos-7.repo
[root@a ~]# mv Centos-7.repo /etc/yum.repos.d/
[root@a ~]# yum install epel-release
[root@a ~]# yum install container-selinux
2、安装最新版本的 Docker Engine-Community 和 containerd
[root@a ~]# yum install docker-ce docker-ce-cli containerd.io
…
Installed:
containerd.io.x86_64 0:1.2.13-3.2.el7 docker-ce.x86_64 3:19.03.8-3.el7
docker-ce-cli.x86_64 1:19.03.8-3.el7
Complete!
[root@a ~]# systemctl start docker
[root@a ~]# docker --version
Docker version 19.03.8, build afacb8b
登录阿里云搜素镜像加速器
[root@a ~]# mkdir -p /etc/docker
[root@a ~]# tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://…”]
}
EOF
[root@a ~]# systemctl daemon-reload
[root@a ~]# systemctl restart docker
[root@a ~]# ps -ef |grep docker
root 12225 1 0 08:10 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 12362 1737 0 08:12 pts/0 00:00:00 grep --color=auto docker
[root@a ~]# docker run hello-world
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
-
The Docker client contacted the Docker daemon.
-
The Docker daemon pulled the “hello-world” image from the Docker Hub.
(amd64)
- The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
- The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
总结
如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了
《Java中高级核心知识全面解析》
小米商场项目实战,别再担心面试没有实战项目:
g more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
总结
如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了
《Java中高级核心知识全面解析》
[外链图片转存中…(img-vUBzsenY-1710346764624)]
小米商场项目实战,别再担心面试没有实战项目:
[外链图片转存中…(img-AySX1DmQ-1710346764625)]