安装Docker

本文介绍了Docker的基础知识,包括Docker是什么、其组成、与虚拟机的区别,以及Docker的安装步骤和基础命令。Docker利用namespace、cgroup技术实现资源隔离,通过Docker主机、服务端、客户端、仓库和镜像来构建容器。相较于虚拟机,Docker在资源利用率、启动速度和开销方面具有优势。此外,文章还提到了容器规范的开放标准和Docker的存储引擎选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker是什么?

Docker是一个在2013年开源的应用程序,并且是一个基于go语言编写的PAAS服务。

Docker最早采用LXC技术,之后改为自己研发并开源的runc技术运行容器。

Docker相比虚拟机的交付速度更快,资源消耗更低,Docker采用客户端、服务端架构,使用远程api来管理和创建Docker容器。

Docker的三大理念是build(构建)、ship(运输)、run(运行)。

Docker遵从apache2.0协议,并通过namespace、cgroup等技术来提供容器的资源隔离与安全保障。

Docker的组成

官网:https://docs.docker.com/get-started/overview/

Docker主机 host:一个物理机或者虚拟机,用于运行docker服务进程和容器

Docker服务端 Server:Docker守护进程,运行docker容器

Docker客户端 client:客户端使用docker命令或其他工具调用docker api

Docker仓库 registry:保存镜像的仓库,类似于git或svn这样的版本控制器

Docker镜像 images:镜像可以理解为创建实例使用的模板

Docker容器 container:容器是从镜像生成对外提供服务的一个或一组服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WgrLog8F-1622793682857)(01.docker介绍与安装/image-20210531152229098.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hIdvJfQY-1622793682860)(01.docker介绍与安装/image-20210531152329941.png)]

Docker与虚拟机之间的对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UL2r4pUX-1622793682862)(01.docker介绍与安装/image-20191028193918568.png)]

  • 资源利用率更高:一台物理机可以运行数百个容器,但一般只能运行数十个虚拟机
  • 开销更小:不需要启动单独的虚拟机占用硬件资源
  • 启动速度更快:可以在数秒内完成启动

Docker安装及基础命令

  • 安装docker-ce以及客户端
[root@docker-server ~]# yum install wget.x86_64 -y
[root@docker-server ~]# rm -rf /etc/yum.repos.d/*
[root@docker-server ~]# wget -O /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker-server ~]# wget -O /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
[root@docker-server ~]# wget -O /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker-server ~]# yum install docker-ce -y
  • 启动docker
[root@docker-server ~]# systemctl enable docker.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@docker-server ~]# systemctl start docker.service 
  • 快速开始
[root@docker-server ~]# docker pull nginx
[root@docker-server ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    d1a364dc548d   5 days ago   133MB
[root@docker-server ~]# docker run -d -p 80:80 nginx
e617ca1db9a5d242e6b4145b9cd3dff9f7955c6ab1bf160f13fb6bec081a29e4
[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
e617ca1db9a5   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 5 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   intelligent_turing
[root@docker-server ~]# docker exec -it e617ca1db9a5 bash
root@e617ca1db9a5:/# cd /usr/share/nginx/html/
root@e617ca1db9a5:/usr/share/nginx/html# ls
50x.html  index.html
root@e617ca1db9a5:/usr/share/nginx/html# echo 'docker nginx test' > index.html 
[root@docker-server ~]# curl 192.168.80.10
docker nginx test

容器规范

容器技术除了docker之外,还有coreOS的rkt,还有阿里的Pouch,还有红帽 的podman,为了保证容器生态的标准性和健康可持续发展,包括Linux基金会、Docker、微软、红帽、谷歌和IBM等公司在2015年6月共同成立了一个叫open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前OCI一共发布了两个规范分别是runtime spec和image format spec,不同的容器公司只需要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。

runtime是真正运行容器的地方,因此运行了不同的容器runtime需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境,目前主流的三种runtime:

lxc:linux上早期的runtime,Docker早期就是采用lxc作为runtime

runc:是目前docker默认的runtime,runc遵守oci规范,因此可以兼容lxc

rkt:是coreOS开发的容器runtime,也负荷oci规范

docker info信息

[root@docker-server ~]# docker info 
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc.)

Server:
 Containers: 2		# 当前主机运行容器总数
  Running: 1		# 有几个容器是正在运行的
  Paused: 0			# 有几个容器是暂停的
  Stopped: 1		# 有几个容器是停止的
 Images: 1			# 当前服务器的镜像数
 Server Version: 20.10.6		# 服务端版本
 Storage Driver: overlay2		# 正在使用的存储引擎
  Backing Filesystem: xfs		# 后端文件系统,即服务器的磁盘文件系统
  Supports d_type: true			# 是否支持d_type
  Native Overlay Diff: true		# 是否支持差异数据存储
  userxattr: false
 Logging Driver: json-file		# 日志文件类型
 Cgroup Driver: cgroupfs		# cgroups类型
 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				# 是否支持swarm
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc			# 默认的runtime
 Init Binary: docker-init		# 初始化容器的守护进程
 containerd version: d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 init version: de40ad0
 Security Options:				# 安全选项
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64		# 宿主机内核版本
 Operating System: CentOS Linux 7 (Core)	# 宿主机操作系统
 OSType: linux								# 宿主机操作系统类型
 Architecture: x86_64						# 宿主机架构
 CPUs: 1									# 宿主机cpu数量
 Total Memory: 1.781GiB						# 宿主机总内存
 Name: docker-server						# 宿主机主机名
 ID: ARN5:ESPO:FEZ4:KDZ6:RWGG:WQ3X:SIXN:3FVG:ATXH:JAXA:ENGH:RAVE
 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 存储引擎

目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的系统支持,如需要磁盘分区的时候传递d-type文件分层功能,即需要传递内核参数开启格式化磁盘的时候指定功能。

官网关于存储引擎的信息:

https://docs.docker.com/storage/storagedriver/select-storage-driver/

由于存储引擎选择错误引起的血案(扩展阅读)

https://www.cnblogs.com/youruncloud/p/5736718.html

镜像加速配置

打开网址

http://cr.console.aliyun.com/

登陆之后点击镜像加速器,按照指导说明即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值