Docker超详细安装教程及底层原理,一篇文章帮你弄懂什么是Docker

Docker概述

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或Windows 操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习。

Docker是基于Go语言开发的,具体可以查看Docker官网进行了解和学习。
Docker官网
Docker文档
Docker镜像仓库

Docker能做什么

虚拟机技术

在这里插入图片描述

虚拟机技术缺点:

  • 资源占用十分多
  • 冗余步骤多
  • 启动很慢

容器化技术

容器化技术不是模拟的一个完整的操作系统

在这里插入图片描述

比较 Docker 和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
  • 容器内的应用直接运行在宿主机的内核中,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了。
  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。

Devops(开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序。
Docker:打包镜像发布测试,一键运行。

更便捷的升级和扩缩容

使用了 Docker 之后,我们部署应用就和搭积木一样。
项目打包为一个镜像,能够水平扩展。

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

Docker 是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例,服务器的性能可以被压榨到极致。

Docker安装

Docker的基本组成

在这里插入图片描述

镜像(image):
Docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat 镜像 —> run —> tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
容器可以启动,停止,删除。
目前就可以把这个容器理解为就是一个简易的 linux 系统。

仓库(repository):
仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库。
Docker Hub(默认是国外的)、阿里云、网易云等都有容器服务器(配置镜像加速)。

安装Docker

环境准备:

  1. 需要会一点 Linux 的基础
  2. CentOS 7
  3. 使用 Xshell 连接远程服务器进行操作(这里我使用的是VMware)

环境查看:

uname -r

cat /etc/os-release

# 系统内核是3.10以上
[root@wyc /]# uname -r
3.10.0-1160.el7.x86_64

# 系统版本
[root@wyc /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装:

Docker帮助文档

1、卸载旧版本

# 卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、需要的安装包

# 需要的安装包
yum install -y yum-utils

3、设置镜像的仓库

# 设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认是从国外的
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的

# 安装容器之前,更新 yum 软件包索引
yum makecache fast

4、安装容器相关的 docker-ce(社区版)、docker-ee(企业版)

# 安装容器相关的 docker-ce
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

5、启动 docker

# 启动 docker
systemctl start docker

6、使用 docker version 查看是否安装成功

# 查看是否安装成功
docker version

[root@wyc /]# docker version
Client: Docker Engine - Community
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:04:24 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 18:02:38 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.9
  GitCommit:        1c90a442489720eec95342e1789ee8a5e1b9536f
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

7、验证 docker 是否安装正确

看见 Hello from Docker! 即为正确安装!

# 验证 docker 是否安装正确
docker run hello-world

[root@wyc /]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:faa03e786c97f07ef34423fccceeec2398ec8a5759259f94d99078f264e9d7af
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:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. 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:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

8、查看下载的 hello-world 镜像

# 查看下载的 hello-world 镜像
docker images

[root@wyc /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   13 months ago   13.3kB

卸载 Docker:

# 1. 卸载依赖
yum remove docker-ce docker-ce-CLI container d . io docker-compose-plugin

# 2. 删除资源
rm -rf /var/lib/docker # docker的默认工作路径
rm -rf /var/lib/containerd

阿里云镜像加速

1、登录阿里云,找到容器镜像服务

位置是在弹性计算一列

在这里插入图片描述

2、找到镜像加速地址

在这里插入图片描述

3、配置加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    
    
  "registry-mirrors": ["https://72ixx83s.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

Run的流程和Docker原理

Run的流程图

在这里插入图片描述

底层原理

Docker 是怎么工作的?

Docker 是一个 Client - Server 结构的系统,Docker 的守护进程运行在主机上,通过 Socket 从客户端访问,DockerServer 接收到 Docker-Client 的指令后就会执行这个命令。

在这里插入图片描述

Docker 为什么比 VM 快?

1、Docker 有着比虚拟机更少的抽象层
2、Docker 利用的是宿主机的内核,vm 需要是 Guest OS(即下图中的虚拟机操作系统)

在这里插入图片描述

所以说,新建一个容器的时候,Docker 不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的,而 Docker 是利用宿主机的操作系统,省略了这个复杂的过程,是秒级别的。

Docker 和 VM 的其他区别:
在这里插入图片描述
感觉阅读!有问题欢迎指正!

参考源:【狂神说Java】Docker最新超详细版教程通俗易懂

猜你喜欢

转载自blog.csdn.net/wyc837279588/article/details/127872703