云原生之容器化技术Docker

1 篇文章 0 订阅
1 篇文章 0 订阅

docker容器历史

和虚拟机一样,容器技术也是一种资源隔离的虚拟化技术。

容器简史

容器概念始于 1979 年提出的 UNIX chroot,它是一个 UNIX 操作系统的系统调用,将一个进程及其子进程的根目录改变到文件系统中的一个新位置,让这些进程只能访问到这个新的位置,从而达到了进程隔离的目的。

2000 年的时候 FreeBSD 开发了一个类似于 chroot 的容器技术 Jails,这是最早期,也是功能最多的容器技术。Jails 英译过来是监狱的意思,这个“监狱”(用沙盒更为准确)包含了文件系统、用户、网络、进程等的隔离。2007 年 Google 实现了 Control Groups( cgroups ),并加入到 Linux 内核中,这是划时代的,为后期容器的资源配额提供了技术保障。2013 年推出到现在为止最为流行和使用最广泛的容器 Docker,相比其他早期的容器技术,Docker 引入了一整套容器管理的生态系统,包括分层的镜像模型,容器注册库,友好的 Rest API。

为什么需要容器

其一、这是技术演进的一种创新结果,其二,这是人们追求高效生产活动的一种工具。
Docker 容器的思想就是采用集装箱思想,为应用提供了一个基于容器的标准化运输系统。Docker 可以将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器。容器可以运行在几乎所有的操作系统上。这样容器就可以跑在任何环境中,因此才有了那句话:
Build Once, Run Anywhere

容器和虚拟机的区别

容器和 VM 的主要区别:
容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。容器使用宿主操作系统的内核,而虚拟机使用独立的内核。Docker 的局限性之一是,它只能用在 64 位的操作系统上。

Docker容器使用AUFS作为文件系统,有如下优势:

1)节省存储空间
 多个容器可以共享同一个基础镜像存储。
2)快速部署
 如果部署多个来自同一个基础镜像的容器时,可以避免多次复制操作。
3)升级方便
 升级一个基础镜像即可影响到所有基于它的容器。
4)增量修改
 可以在不改变基础镜像的同时修改其目录的文件,所有的更高都发生在最上层的写操作层,增加了基础镜像的可共享内容

docker 安装

自带源安装

CentOS 7 中 Docker 的安装
Docker 软件包已经包括在默认的 CentOS-Extras 软件源(联网使用centos7u2自带网络Yum源)里。因此想要安装 docker,只需要运行下面的 yum 命令:

	# yum install docker 	# 安装docker

启动 Docker 服务

	# systemctl start docker.service
	# systemctl enable docker.service

确定docker服务在运行
结果会显示服务端和客户端的版本,如果只显示客户端版本说明服务没有启动

[root@zifeiyu ~]# docker version 	# 查看 docker 版本
	Client:
	Version:         1.13.1
	API version:     1.26
	Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
	Go version:      go1.10.3
	Git commit:      7d71120/1.13.1
	Built:           Wed Mar  2 15:25:43 2022
	OS/Arch:         linux/amd64

	Server:
	Version:         1.13.1
	API version:     1.26 (minimum version 1.12)
	Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
	Go version:      go1.10.3
	Git commit:      7d71120/1.13.1
	Built:           Wed Mar  2 15:25:43 2022
	OS/Arch:         linux/amd64
	Experimental:    false

在这里插入图片描述

查看docker基本信息

	[root@zifeiyu ~]# docker info

校验Docker的安装

	[root@zifeiyu ~]# docker run -it ubuntu bash
	Unable to find image 'ubuntu:latest' locally
	Trying to pull repository daocloud.io/ubuntu ... 
	latest: Pulling from daocloud.io/ubuntu
	22ecafbbcc4a: Pull complete 
	580435e0a086: Pull complete 
	Digest: sha256:80c2902178d79f439b13c5a244f3b1ef67ca890dbbe58d19caa13301ca56a505

如果自动进入下面的容器环境,说明ubuntu镜像运行成功,Docker的安装也没有问题:可以操作容器了
	root@50a0449d7729:/# pwd     
	/
	root@50a0449d7729:/# ls
	bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

docker版本和官方源安装

moby、docker-ce与docker-ee 三者关系

moby是继承了原先的docker的项目,是社区维护的的开源项目,谁都可以在moby的基础打造自己的容器产品
docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品
docker-ee是docker公司维护的闭源产品,是docker公司的商业产品。

moby project由社区维护,docker-ce project是docker公司维护,docker-ee是闭源的。

要使用免费的docker,从https://github.com/docker/docker-ce上获取。
要使用收费的docker,从https://www.docker.com/products/docker-enterprise上获取。

安装

    docker-ce的release计划跟随moby的release计划,可以使用下面的命令直接安装最新的docker-ce:
    # curl -fsSL https://get.docker.com/ | sh

CentOS
   如果是centos,上面的安装命令会在系统上添加yum源:/etc/yum.repos.d/docker-ce.repo 
   # wget https://download.docker.com/linux/centos/docker-ce.repo
   # mv docker-ce.repo /etc/yum.repos.d
   # yum install -y docker-ce

    或者直接下载rpm安装:
    # wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
    # yum localinstall docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
注意:
 	在说docker的时候尽量说Linux docker
    因为Docker on Mac,以及 Windows Docker(Hyper-V 实现),实际上是基于虚拟化技术实现的,跟我们介绍使用的 Linux 容器完全不同。

国内源安装新版docker

使用aliyun docker yum源安装新版docker
删除已安装的Docker

# yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-selinux \
              docker-engine-selinux \
              docker-engine

配置阿里云Docker Yum源

# yum install -y yum-utils device-mapper-persistent-data lvm2 git
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装指定版本

# yum list docker-ce --showduplicates 	# 查看Docker版本

安装较旧版本(比如Docker 17.03.2) :
需要指定完整的rpm包的包名,并且加上--setopt=obsoletes=0 参数:
# yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

安装Docker新版本(比如Docker 18.03.0):
加上rpm包名的版本号部分或不加都可以:
# yum install docker-ce-18.03.0.ce  -y
或者
# yum install docker-ce -y

启动Docker服务

#systemctl enable docker
#systemctl start docker

在这里插入图片描述

查看docker版本状态

[root@zifeiyu ~]# docker -v
Docker version 23.0.1, build a5ee5b1


[root@zifeiyu ~]# docker version
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:51:00 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:48:42 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.18
  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

在这里插入图片描述

查看docker运行状态

[root@zifeiyu ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.16.0
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 23.0.1
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2456e983eb9e37e47538f59ea18f2043c9a73640
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 3.10.0-1062.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 972.4MiB
 Name: zifeiyu
 ID: NDZG:Z2WM:XWSR:FNU3:SYUO:WDRM:GVWL:POEJ:JXZA:W7WD:JY6O:5NLD
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

问题

报错1:
    docker info的时候报如下错误
    bridge-nf-call-iptables is disabled

解决1:
    追加如下配置,然后重启系统
    # vim /etc/sysctl.conf   
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-arptables = 1

问题2:
    虚拟机ping百度也能ping通,但是需要等好几秒才出结果,关键是下载镜像一直报错如下
    # docker pull daocloud.io/library/nginx
    Using default tag: latest
    Error response from daemon: Get https://daocloud.io/v2/: dial tcp: lookup daocloud.io on 192.168.1.2:53: read udp   192.168.1.189:41335->192.168.1.2:53: i/o timeout

解决2:
    我的虚拟机用的网关和dns都是虚拟机自己的.1或者.2,把DNS改成8.8.8.8问题就解决了,ping百度也秒出结果
    # vim /etc/resolv.conf
    nameserver 8.8.8.8

更换镜像源

正常情况下,我们刚安装完 docker ,在拉取镜像的时候速度会比较慢,这时我们可以给 docker 换一个镜像源。

镜像源

Docker中国区官方镜像

https://registry.docker-cn.com

网易

 http://hub-mirror.c.163.com

ustc

https://docker.mirrors.ustc.edu.cn

中国科技大学

https://docker.mirrors.ustc.edu.cn

阿里云:阿里云具体看官方(很简单,详细)

https://cr.console.aliyun.com/

修改(替换)镜像源

进入/etc/docker/目录

[root@zifeiyu docker]# cd /etc/docker

查看是否存在daemon.json文件

[root@zifeiyu docker]# ls
certs.d  daemon.json  key.json  seccomp.json

修改daemon.json文件(不存在会自动创建)

[root@zifeiyu docker]# vim daomon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

在这里插入图片描述

输入:wq保存退出,注意:
然后我们再用ls命令看看有没有了

重新加载daemon和docker
输入以下命令就可以重新加载和重启了

[root@zifeiyu docker]# sudo systemctl daemon-reload
[root@zifeiyu docker]# sudo systemctl restart docker

在这里插入图片描述
最后,再去拉取镜像就会快很多!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值