docker

Docker概述

Docker是一个开源平台,通过将应用程序隔离到轻量级、可移植的容器中,自动化应用程序的部署、扩展和管理。容器是独立的可执行单元,封装了运行应用程序所需的所有必要依赖项、库和配置文件,可以在各种环境中稳定地运行。

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

隔离:docker核心思想!

docker的思想来源于集装箱

docker 十分轻巧!!!

基于Go语言开发的,开源项目!

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

  • Vm: linux centos原生镜像 (一个电脑!) 隔离,需要开启多个虚拟机! 几个G 几分钟
  • docker:隔离,境像(最核心的环境 4m + jdk + mysql)十分的小巧, 运行像就可以了! 小巧! 几个M KB秒级启动!

虚拟机技术缺点:
1、资源占用十分多
2、冗余步骤多
3、启动很慢 !
容器化技术
容器化技术不是模拟的一个完整的提作系统

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

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

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

文档地址: https://docs.docker.com/ (超级详细)

仓库地址: https://hub.docker.com/

容器和Docker

Docker是一种简化创建、部署和管理容器的平台。它为开发人员和管理员提供了一组工具和API,用于管理容器化的应用程序。使用Docker,您可以将应用程序代码、库和依赖项构建和打包成一个容器映像,该映像可以在支持Docker的任何环境中分发和一致地运行。

容器的必要性

应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker: 打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像,扩展 服务器A ! 服务器B

更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

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

Docker 的基本组成

img

镜像(image ) :
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===> run ==> tomcat01 容器(提供服务器)通过这个镜像可以创建多个容器( 最终服务运行或者项目运行就是在容器中的)。
容器(container) :
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的

启动,停止,删除,基本命令!

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

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

安装Docker

环境准备

  1. Linux基础
  2. CentOS 7或以上版本
  3. 使用Xshell连接远程服务器进行操作

环境查看

1
2
#系统内核是3.10以上
用uname -r查看

系统版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@163 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

安装

  1. 卸载旧版本

    yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
    
  2. 需要的安装包

    1
    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相关的

    yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    ce 社区 ee企业

  5. 启动Docker

    systemctl start docker

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

    [root@163 ~]# docker version
    Client: Docker Engine - Community
    Version: 24.0.5
    API version: 1.43
    Go version: go1.20.6
    Git commit: ced0996
    Built: Fri Jul 21 20:36:32 2023
    OS/Arch: linux/amd64
    Context: default

    Server: Docker Engine - Community
    Engine:
    Version: 24.0.5
    API version: 1.43 (minimum version 1.12)
    Go version: go1.20.6
    Git commit: a61e2b4
    Built: Fri Jul 21 20:35:32 2023
    OS/Arch: linux/amd64
    Experimental: false
    containerd:
    Version: 1.6.21
    GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
    runc:
    Version: 1.1.7
    GitCommit: v1.1.7-0-g860f061
    docker-init:
    Version: 0.19.0
    GitCommit: de40ad0

  7. sudo docker run hello-world

  8. 查看一下下载的这个 hello-world镜像

    docker images

了解

docker卸载

1
2
3
4
5
6
7
1. 卸载依赖

```yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras```

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

阿里云镜像加速

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

请添加图片描述

  1. 找到镜像加速器

  2. 配置使用

1
2
3
4
5
6
7
8
9
10
11
sudo mkdir -p /etc/docker 

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

sudo systemctl daemon-reload

sudo systemctl restart docker

底层原理

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

Docker为什么比VM快
1、Docker有着比虚拟机更少的抽象层
2、docker 利用的是宿主机的内核,vm 需要是 Guest OS。
在这里插入图片描述
所以说,新建一个容器的时候,docker不需要想虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的,而docker 是利用 宿主机的操作系统吗,省略了这个复杂的过程,秒级!

在这里插入图片描述