Docker学习Ⅰ

Docker概述

Docker为什么出现?

开发 -- 上线 必须解决的问题:应用环境 应用配置

开发 -- 运维 喜闻乐见的一句话: 我在我的电脑上可以运行 !

环境配置十分麻烦,每一个机器都要部署环境(redis集群,es,Hadoop...)费时费力

项目+环境打包发送给运维

Docker提出了解决方案:
jar(环境) -- 打包项目带上环境(镜像) -- Docker仓库:商店 -- 从商店下载镜像 -- 直接运行

Docker的思想就来自集装箱 !

隔离: Docker核心思想, 打包装箱, 每个箱子都是互相隔离的

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

Docker的历史

2010年, 几个搞 it 的年轻人, 在美国成立了一家公司 dotCloud...
做一些pass的云计算服务, LXC有关的容器技术...
他们将自己的技术(容器化技术), 命名Docker, 刚开始没有引起行业的注意...
随后他们选择了开源这条路 !
开放源代码, 立即引起了大量的注意 !
2014年4月9日, Docker 1.0发布...

VM和Docker的简单对比

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

Docker相关资源

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

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

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

Docker能干嘛?

  • 之前的虚拟机技术

缺点:
1.资源占用多
2.冗余
3.启动很慢
  • 容器化技术

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

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

DevOps (开发 运维)

应用更快速的交付和部署

传统: 一堆帮助文档, 安装程序

Docker: 打包镜像发布测试, 一键运行

更便捷的升级和扩缩容

使用Docker之后, 我们部署应用就和搭积木一样!

(项目+环境) 包整体升级

更简单的系统运维

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

更高效的计算资源利用

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

Docker安装

Docker的基本组成

镜像 ( image )

Docker 镜像就好比是一个模板, 可以通过这个模板来创建容器服务, redis镜像 ==> run ==> redis01(具体的容器, 提供服务)

通过这个镜像可以创建多个容器 (最终服务运行或项目运行就是在容器中进行的)

容器 ( container )

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

启动	停止	删除	基本命令

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

仓库 ( repository )

仓库就是存放镜像的地方
仓库分为公私有

Docker Hub ( 默认国外的 )
阿里云...都有容器服务器 ( 配置镜像加速 )

安装Docker

环境准备

  • linux基础
  • CentOS 7
  • 使用 Xshell

环境查看

# 系统内核是3.10以上的
[root@su01 ~]# uname -r
3.10.0-1062.18.1.el7.x86_64

# 系统版本
[root@su01 ~]# 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"

安装

帮助文档:

# 1.卸载旧的版本
yum remove docker 
    docker-client 
    docker-client-latest 
    docker-common 
    docker-latest 
    docker-latest-logrotate 
    docker-logrotate 
    docker-engine

# 2.需要的安装包
$ sudo yum install -y yum-utils

# 3.设置镜像的仓库
yum-config-manager 
    --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # https://download.docker.com/linux/centos/docker-ce.repo  #默认是国外的,我们不用

# 更新yum软件包索引
yum makecache fast

# 4.安装docker相关的  docker-ce 社区版	ee企业版
yum install docker-ce docker-ce-cli containerd.io

# 5.启动docker
systemctl start docker

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

# 7.测试
docker run hello-world

# 8.查看下载的 hello-world 镜像
[root@su01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

  • 了解:卸载docker
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
#  /var/lib/docker	docker的默认工作路径

阿里云镜像加速

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

  2. 找到镜像加速地址

  3. 配置使用

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

run hello-world的原理

底层原理

Docker是怎么工作的?

Docker 是一个 Client-Server 结构的系统, Docker 的守护进程运行在宿主机上. 通过 Socket 从客户端访问

DockerServer 接收到 Docker-Client 的指令, 就会执行这个命令

Docker 为什么比 VM 快?

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

  2. docker 利用的是宿主机的内核 (操作系统), vm 需要的是 Guest OS

    所以说, 新建一个容器的时候, docker 不需要像虚拟机一样重复加载一个操作系统的内核.

原文地址:https://www.cnblogs.com/straightup/p/13967361.html