Docker 是一个开源软件,用于开发应用、交付应用、运行应用。 Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
一、Docker初识
1.什么是Docker
- Docker 是一个开源的应用容器引擎,基于Go 语言实现并遵从 Apache2.0 协议开源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2.Docker vs VM
docker与vm比较
- 传统的虚拟机模拟出一套硬件来运行操作系统,也就是在硬件层面实现虚拟化,通常启动速度比较忙,资源消耗比较大。
- Docker容器化技术则是在操作系统层面实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件实现虚拟化。
3.Docker组成
Docker基本组成主要包括以下三部分内容:
Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过commit命令、Dockerfile等方式创建,也可以从Docker hub/registry上下载。
Docker container:容器是可写的,也是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
Docker repository: 存储镜像的仓库,用户通过它来共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
4.Docker优点
应用架构上 ,就比如那一个订购系统来举例子,本来是一个基本的静态网页用来电话订购,现在需要网络订购了,那么我们就需要引入DB,再然后为了提升性能,引入了类似Redis、Memcached、MQ缓存等中间件,到项目后期,发现单机不能满足性能要求了,然后引入了Nginx作为反向代理,总之,随着系统功能的日趋复杂,那么应用依赖就会逐渐复杂,不同组件的配置方法各不相同,运维人员进行应用配置可能会耗费大量时间。
应用部署上 ,Dockerfile的存在使得开发人员仅仅需要修改其配置文件就可以轻松构建具有不同依赖的镜像。同时保障了从开发、构建、测试、生成的一整套流程。
集群角度上 ,随着流量的逐渐增大,这个时候就要引入集群了,服务器由原来的一台变成两台,那么相同的配置在另一台主机进行相同的配置时间开销比较大,因此可以通过镜像来一键打包部署即可。
关于Docker优点,总结如下:
- 快速的应用部署和维护
- 更便捷的升级和扩缩容
- 更简单的系统运维
- 更高效的计算资源利用
- 支持多种操作系统,Windows、Mac和Debian等
5.Docker架构
关于官方文档中解释:Docker Architecture
Docker引擎 (Docker Engine)是一个服务端-客户端结构的应用,主要有这些部分:Docker守护进程、Docker Engine API、Docker客户端。
- Docker守护进程 (Docker daemons),也叫
dockerd
,是一个持久化的进程,用户管理容器。守护进程会监听Docker Engine API 的请求。 - Docker Engine API是用于与Docker守护进程交互用的的API。它是一个RESTful API,因此它不仅可以被Docker客户端调用,也可以被
wget
和curl
等命令调用。 - Docker客户端 ,也叫
docker
,是大部分用户与Docker交互的主要方式。用户通过客户端将命令发送给守护进程。命令会遵循Docker Engine API
6.Docker生态
Docker生态中还有一个非常重要的容器管理工具–Kubernetes,它是Google开源的用于在集群环境中管理、维护、自动扩展容器,通过Kubernetes可以很方便地在多个机器上管理和部署容器服务。现在已经得到IBM、Microsoft、RedHat等多个大公司的支持。
Docker现在出现了一个特殊的模式——swarm模式——可以用来管理容器集群。Docker Swarm允许使用Docker CLI运行swarm命令,因而很容易初始化一组容器,并向组中添加或删除容器。除了Docker Swarm,还有几个其他的容器协调管理器:
- Kubernetes,一个容器集群管理器。可以在你自己的服务器上或是在云上运行。
- DC/OS,一个特别的项目,提供了高级用户界面管理Docker容器。
- Nomad Project,一个部署和管理应用的软件,运行在Amazon ECS,DigitalOcean,Azure Container Service或Google云平台。
二、Docker安装
1. 命令行安装
这里测试环境是 Centos Linux 8版本,安装使用 yum
命令安装。
yum -y install docker-ce docker-ce-cli #下载Docker
docker version #查看docker版本号
docker images #存在的镜像
image-20220614152303600
- TAG:版本号(默认最新)
- REPOSITORY: 镜像名字
- IMAGET ID : 镜像全局唯一ID
- CREATED: 镜像创建时间
- SIZE:镜像大小
2. 设置加速仓库
注册阿里云开发者账户,进入仓库镜像模块,获取仓库加速域名。
仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系?
首先,仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器是存放实际的镜像的地方,注册索引则负责维护用户的账号,权限,搜索,标签等管理。注册服务器利用注册索引来实现认证等管理。
3. 配置普通用户管理Docker
由于需要使用普通用户对Docker进行管理,因此需要给普通用户配置Docker权限,根据 官方文档来进行配置。具体命令行如下:
sudo groupadd docker #加入Docker用户组
sudo usermod -aG docker $USER #将用户添加到用户组
newgrp docker #刷新权限
id $USER #查看用户情况
docker run hello-world #运行hello world测试
image-20220615190215061
三、Docker基本使用
- 获取镜像
docker pull REPOSITORY:TAG
- 运行镜像
docker run IMAGE_ID
- 删除镜像
docker rmi IMAGE_ID
- 暂停容器
docker stop CONTAINER_ID
docker run -i 镜像ID #交互模式启动容器
## 常用参数
-i, --interactive Keep STDIN open even if not attached
--ip string IPv4 address (e.g., 172.30.100.104)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--ipc string IPC mode to use
--isolation string Container isolation technology
--kernel-memory bytes Kernel memory limit
-p : 宿主机端口 :Docker运行端口
-P : 随机宿主机端口
-t : 命令终端
image-20220614154748840
Docker虚悬镜像:仓库名、标签都为的镜像。建议删除
前台启动和后台启动
docker run -d #守护式启动
docker run -i #前台式启动
#重新进入命令交互界面
docker exec -it 容器ID bashshell
docker attach 容器ID
区别:
- accatch 不会重新创建一个新的进程,使用
exec
会导致终端停止 - exec 会重新创建一个新的进程,不会导致终端停止,此种方法也是工作常用的
-
开源软件
+关注
关注
0文章
210浏览量
15956 -
编程
+关注
关注
88文章
3637浏览量
93934 -
Docker
+关注
关注
0文章
492浏览量
11939
发布评论请先 登录
相关推荐
评论