Docker基础入门篇

Docker基础入门篇

1:Docker概念

Docker 是 PaaS 提供商 Docker Inc开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。 Docker是一个开放的平台,用于开发、运输和运行应用程序。Docker能够将应用程序与基础结构分开,这样就可以快速地交付软件。使用Docker可以与管理应用程序相同的方式管理基础结构。通过利用Docker的快速交付、测试和部署代码的方法,可以显著减少编写代码和生产中运行代码之间的延迟。

Docker提供了在称为容器的松散隔离环境中打包和运行应用程序的功能。隔离和安全性允许您在给定主机上同时运行多个容器。容器是轻量级的,因为它们不需要管理程序的额外负载,而是直接在主机内核中运行。这意味着可以在给定硬件组合上运行比使用虚拟机时更多的容器。可以在实际虚拟机的主机中运行Docker容器,Docker已经是云计算PASS平台的趋势。
	
# Docker的三大理念:构建  运输  运行

# Docker特性:
灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:您可以即时部署更新和升级。
便携式:您可以在本地构建,部署到云,并在任何地方运行。
可扩展:您可以增加并自动分发容器副本。
可堆叠:您可以垂直和即时堆叠服务。

# Docker组件:
镜像(Image)
容器(Container)
仓库(Repository)

镜像:类似于虚拟机,作用和虚拟机是一样的,唯独是组成部分会有些区别。简单的说如果我们想启动一个容器就必须要有镜像

容器: docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的。容器其实就是从镜像创建的一个实例。 我们可以对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。
缺点:不会像虚拟机那样隔离的那么彻底,我们可以将容器理解为简化版的linux,有进程运行在里面。

仓库: 根据docker的三大理念构建 运输 运行,我们就需要一个仓库来存放镜像,简单的说:我们将镜像创建完成就需要存放到仓库里面,进行集中式的管理。仓库这点类似于github,docker也有一个dockerhub,他也是一个公共对外的仓库。

2:Docker容器技术和传统虚拟机技术的特性比较

特性 容器 虚拟机
启动速度 秒级 分钟级
性能 接近原生 较弱
内存代价 很小 较多
硬盘使用 一般为MB 一般为GB
运行密度 单机支持上千个容器 一般几十个
隔离性 安全隔离 安全隔离
迁移性 优秀 一般

img/Virtual-Docke.png

3:Docker引擎

Docker Engine是一个C/S 结构的应用程序,包含以下主要组件:

服务器,是一种长时间运行的程序,称为守护程序进程( dockerd命令)。
一个REST API,它指定程序可以用来与守护进程通信并指示它做什么的接口。
命令行界面(CLI)客户端(docker命令)

img/engine-components-flow.png

4:Docker架构

img/docker-jg.png

Docker使用客户端 – 服务器架构。Docker 客户端与Docker 守护进程通信,后者负责构建,运行和分发Docker容器。Docker客户端和守护程序可以 在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序使用REST API,通过UNIX套接字或网络接口进行通信。

5:Docker能干什么?

img/802e00800b6dc-768x436.png

6:Docker常用八大场景:

1、简化配置,统一配置,通过镜像快速启动(Simplifying)
2、代码流水线管理,开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里实现了快速迁移(Code Oioeline Management)
3、开发效率,对开发人员,有了镜像,直接启动容器即可(Developer Productivity)
4、应用隔离,相对于虚拟机的完全隔离会占用资源,docker会比较节约资源(App lsolation)
5、服务器整合,一台服务器跑多个docker容器,提高服务器的利用率(Server Consolidation)
6、调试能力,debug调试(Debugging Capabilties)
7、多租户,一个租户多个用户,类似于阿里公有云的一个project下多个用户(Multi-tenancy)
8、快速部署,不需要启动操作系统,实现秒级部署(Rapid Deplovment)

7:Docker改变了什么?

面向产品:产品交付
面向开发:简化环境配置
面向测试:多版本测试
面向运维:环境一致
面向架构:自动化扩容(微服务)

1、更快速的交付和部署
对于开发和人员来说,最希望的就是一次创建和配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全称可见,使团队中的其他成员更容易理解应用程序是如何创建和工作。Docker容器很轻很快!容器的启动时间是秒级的,大量的节约开发、测试、部署的时间。

2、更高效的虚拟化
Docker容器的运行不需要额外的Hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3、更轻松的迁移和扩展
Docker容器几乎可以字啊任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4、更简单的管理
使用Docker,只需要小小的修改,就可以替代往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

8:Docker-ce安装并使用

1、安装docker-ce,OS要求Centos7+以上。

#安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2

#安装yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#安装Docker
yum install -y docker-ce

Docker已安装但尚未启动。该docker组已创建,但没有用户添加到该组。

2、安装特定版本的Docker CE

列出repo中的可用版本,然后选择并安装:列出仓库中可用的版本进行从最高到最低排序。

yum list docker-ce --showduplicates | sort -r
安装特定版本:

yum install docker-ce-<VERSION STRING>
例如:yum install docker-ce-18.06.1.ce

3、启动Docker并设置开机自启动
systemctl start docker && systemctl enable docker 

#验证是否可以运行docker
docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出

#查看Docker进程
[root@ecs-test ~]# ps -ef| grep docker
root       1390      1  0 22:58 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root       1651   1126  0 23:00 pts/0    00:00:00 grep --color=auto docker

4、查看docker信息及版本
#查看docker信息
[root@ecs-test ~]# docker info
[root@virtual_host ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
  scan: Docker Scan (Docker Inc., v0.12.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 20.10.12
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  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 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc version: v1.0.2-0-g52b36a2
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1160.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 972.3MiB
 Name: virtual_host
 ID: LIZB:RDVW:5VPA:XTI5:ESY5:MQ46:3XN4:KSAP:RUXP:P3CA:TAEB:UT5A
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

#查看docker版本
[root@ecs-test ~]# docker version
[root@virtual_host ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:45:41 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:44:05 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
5、Docker服务配置
	5.1 以非 root 用户身份管理 Docker
docker 守护进程绑定至 Unix 套接字,而不是 TCP 端口。默认情况下,该 Unix 套接字由用户 root 所有,而其他用户只能使用 sudo访问它。docker 守护进程始终以 root 用户身份运行。在使用 docker 命令时,如果不想使用 sudo,向docker组其中添加用户。docker 守护进程启动时,它将使 Unix 套接字的所有权可由 docker 组进行读取/写入。

usermod -aG docker $USER

5.2配置Docker守护程序
默认情况下,Docker守护程序侦听UNIX套接字上的连接以接受来自本地客户端的请求。通过编辑systemd或者daemon.json文件将Docker配置为侦听IP地址和端口以及UNIX套接字,可以允许Docker接受来自远程主机的请求。生产环境应使用TLS安全访问。

#ExecStart后追加
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

#重启服务
systemctl daemon-reload
systemctl restart docker

#查看进程
[root@ecs-test ~]# netstat -ntlp |grep dockerd
tcp6       0      0 :::2375                 :::*                    LISTEN      16086/dockerd

5.3镜像加速
使用Docker 官方国内加速器 https://registry.docker-cn.com,使用 Centos的系统,编辑 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
#编辑 /etc/docker/daemon.json文件
{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

#重启服务
systemctl daemon-reload
systemctl restart docker

或者使用阿里云和daoclound镜像

#daoclound 的Linux配置脚本
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
posted @ 2022-02-03 12:38  Layzer  阅读(43)  评论(0编辑  收藏  举报