Docker概述与安装

一、Docker 概述

1.1 Docker 为什么会出现?

Docker 的 思想就是来源集装箱!

隔离:Docker核心思想,打包装箱,就应用程序和开发环境打包成一个Docker镜像,而且可以打包多个,类似与集装箱的方式,且每个箱子之间是隔离的。

并且Docker可以通过隔离机制,将服务器的利用到极致。

1.2 Docker的历史

虚拟机也是属于虚拟化技术,Docker 容器技术,也是一种虚拟化技术

但是Docker 非常小巧,运行速度也比虚拟机快几个数量级。

Docker 是基于GO语言开发的(B站也是GO语言开发的)

Docker 的 官网:https://www.docker.com/

文档地址:https://docs.docker.com/

仓库地址:https://hub.docker.com/ 可以 git push pull 镜像,类似与github

1.3 Docker 能什么

传统虚拟机技术:

Docker 容器技术:

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

  1. 传统虚拟机,虚拟出一个硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件

  2. 容器内的应用直接运行在宿主机的内同,容器是没有自己的内核的,也没有虚拟我们的硬件,所以很轻便。

  3. 每个容器间是互相隔离,每个容器内都有一个属性自己的文件系统,互不影响。

优点:

  • DevOps(开发、运维)

  • 应用更快捷的交付和部署

  • 更快捷的升级和扩缩容

  • 更简单的系统运维

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

  • 更高效的计算资源利用

  • Docker 是内核级别的虚拟化,可以在物理机(虚拟机)上运行很多容器实例,服务器性能可以被利用到极致(再次强调)

一核两G的虚拟机运用Docker之后可以运行几十个Tomcat!!!!!?????

1.4 Docker 的名词概念

Docker的基本组成

  1. 镜像(image)

    docker镜像类似于一个 模板,可以通过这个模板创建容器服务

    通过这个镜像可以创建多个容器,最终服务运行或者项目运行,就是在容器中。

  2. 容器(container)

    利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。

    包括启动,停止,删除等基本命令

    目前可以把容器理解为一个简易的linux 系统。

  3. 仓库(repository)

    仓库就是存放镜像的地方,仓库分公有和私有,国外的有Docker Hub,国内阿里云等,都需要配置镜像加速。

二、Docker安装

2.1 Docker安装

以linux环境为例,

#1.卸载旧的版本

yum remove docker \
				  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#2.安装需要的jar包
yum install -y yum-utils

#3.设置镜像的仓库
    #默认国外镜像仓库######24年8月11日补充,国内不能访问docker镜像源了,这里不用执行
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 docker-ce社区 ee企业版
yum install docker-ce docker-ce-cli containerd.io
#也可以安装指定版本的
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

#24年8月11日补充,如果出现拉去镜像失败,可以编辑/etc/docker/daemon.json文件,然后重启一下systemctl restart docker
{ 
  "registry-mirrors" : 
    [ 
      "https://docker.m.daocloud.io", 
      "https://noohub.ru", 
      "https://huecker.io",
      "https://dockerhub.timeweb.cloud" 
    ] 
}

#5.启动docker 这个命令说明docker是个服务
systemctl start docker

查看docker 版本可以确定是否安装成功

docker version

测试运行,运行命令,会先从远程仓库中拉取hello-world镜像。看到Hello from Docker!,说明成功了。

#6.运行hello-world镜像
docker run hello-world

#7.查看hello-world镜像
docker images

[root@izuf67znusfv5r0k1fzac9z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

如果你不再需要Docker了,可以彻底卸载它

#8.卸载docker
#卸载软件和以依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除文件夹默认的工作目录
rm -rf /var/lib/docker

2.2 配置镜像加速

  1. 找到容器镜像服务

  2. 镜像加速地址

    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://d6ikb873.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload
    systemctl restart docker
    

    解释一下这段命令

    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://d6ikb873.mirror.aliyuncs.com"]
    }
    EOF
    
    #等价于
    touch /etc/docker/daemon.json
    vim /etc/docker/daemon.json
    # 然后将下列配置复制粘贴,最后wq保存
    {
      "registry-mirrors": ["https://d6ikb873.mirror.aliyuncs.com"]
    }
    
  3. 2024年8月28日补充

    由于docker最近中国地区不能访问官方镜像源,如果不能拉去镜像,可以通过其他源,注意需要重启docker。

    {
      "registry-mirrors" :
        [
          "https://docker.m.daocloud.io",
          "https://d6ikb873.mirror.aliyuncs.com",
          "https://noohub.ru",
          "https://huecker.io",
          "https://dockerhub.timeweb.cloud"
        ]
    }
    
    

2.3 回顾HelloWorld流程

2.4 底层原理

Docker 是怎么工作的?

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

Docker 为什么比VM快?

1、Docker有着比虚拟机更少的抽象层

2、docker 利用的是宿主机的内核,vm需要Guest OS

可以学习玩命令再回过头来看这些原理会简单一些