Docker
学习内容:
- Docker概述
- Docker安装
- Docker命令
- Docker镜像
- Docker数据据卷
- DockerFile
- Docker网络原理
- IDEA整合Docker
- Docker Compose 集群
- Docker Swarm 集群管理
- CI、CD
- Jenkins
Docker概述
在项目开发中,项目开发的流程:产品设计------>产品开发------>产品部署与测试------>产品投放生产环境。在这之中,存在一个问题:产品开发完成后,需要将产品部署到服务器上。那么在部署的时候,我们首先需要配置产品运行的环境,jdk,mysql等环境,并且在不同的操作系统上,环境的配置也是不一样的。如果采用集群,那么相同的环境需要重复的配置,并且配置环境的配置也很繁琐。那么我们就需要解决,在不同平台中快速配置环境和部署应用的问题?那么docker就能够很好的帮助我们解决这个问题。(这就是所谓的持续集成和持续交付,CI/CD)
Docker概念
docker是一个开源应用容器引擎。Docker 能够将应用程序与基础架构分离,以便可以快速交付软件。使用 Docker,可以像管理应用程序一样管理基础架构。通过利用 Docker 的快速发布、测试和部署代码的方法,可以显著减少编写代码和在生产环境中运行代码之间的延迟。
Docker 提供了在松散隔离的环境中打包和运行应用程序(称为容器)的功能。隔离和安全性允许在指定的主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的所有内容,因此无需依赖主机上当前安装的内容。可以在工作时轻松共享容器,并确保与之共享的每个人都能获得以相同方式工作的相同容器。
Docker的优点
- 快速持续的交付应用程序
- 响应式部署和扩展。
- 轻量级
- 可移植性高
- 同一个服务器中,更加高效的利用资源
Docker历史
- 2010年,DotCloud公司成立,主要提供基于Paas的云计算技术服务,孵化Docker初代产品。
- 起初Docker是闭源的,虽然产品很好,但是没有引起行业的关注。
- 2013年3月DotCloud公司宣布Docker开源。在开源的之后,越来越多的TI人员关注到docker优点,并加入Docker开源社区。
- 2014年6月,docker1.0正式发布,并且称为此时最火爆的开源技术。知道至今。
- 后面DotCloud公司改名为Docker。
- 后面微软也推出了K8s(kubernetes)
docker架构
docker使用的时C/S体系结构。Docker Client(客户端) 通过docker命令与 Docker daemon(服务端)进行交互。服务端根据客户端的命令,执行构建、运行、发布Docker容器。
docker中最重要的就是Images和Container,分别是镜像和容器。类比java,镜像就是类,容器就是对象。我们可以通过镜像创建一个容器,去运行我们的应用。例如:通过mysql镜像创建一个mysql容器,这个mysql容器中就运行了mysql。我们使用mysql就可以使用容器中的mysql。
那么docker中的镜像从那里来呢?镜像可以通过远程仓库获取,远程仓库包括dockerhub(GitHub差不多)和私有仓库。
docker daemon(docker 守护进程)
docker守护进程监听docker客户端发起的docker命令请求,并且管理Docker对象,如镜像、容器、网络和卷。守护进程还可以和其他的守护进程通信,以便管理Docker服务。
docker client(docker 客户端)
docker客户端是用户与Docker服务端交互的主要方式。docker端使用命令时,命令会发送到服务端,并执行这些命令。
docker registry (docker 仓库)
-
dockerhub
dockerhub类似github,github是用于存放代码的远程仓库。而dockerhub则是用于存放镜像的远程仓库。我们可以通过
docker pull
拉去远程仓库的镜像到本地。也可以通过docker push
将本地的镜像提交到远程仓库。 -
private registry
我们可以自己配置一个类似于dockerhub的远程仓库,用于存放镜像。后面会有讲解。
images与container
images和container,就好比java中的类和对象的关系。容器的创建是需要通过镜像创建的。镜像就是一个模板,根据这个模板创建容器,(即容器是镜像的实例)。
images:
镜像的创建需要创建一个Dockerfile,用于定义创建镜像和运行镜像所需的步骤。
container:
容器是镜像的可运行实例。可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新镜像。
默认情况下,容器与其他容器及其主机相对隔离。可以控制容器的网络、存储或其他底层子系统与其他容器或主机之间的隔离程度。
容器由其镜像以及在创建或启动它时提供给它的任何配置选项定义。当容器被移除时,未存储在持久存储中的对其状态的任何更改都会消失。
虚拟机(VM)和容器
虚拟机VM
-
虚拟机的创建,需要先安装虚拟机管理系统,常用的虚拟机管理有VMWare。
-
然后,再通过操作系统镜像,安装虚拟机OS。
-
安装的这个虚拟机OS就是一个拥有所有功能的OS。因此,它的大小很大。启动的时候,也比较慢。
-
虚拟机中一些不用的功能,就会占用资源,因此计算机资源的利用率低。
容器
- 容器的创建,需要先安装Docker。Docker比VMWare小很多。
- 通过镜像创建容器。
- 容器使用的宿主机的原生OS,因此比虚拟机少了一层OS。使用宿主机的原生命令。显然性能更好,占用的内存夜宵,运行速度也快。
- 因此它占用的计算机资源是很小的,所以在单机中可以运行几千个容器。
VM与容器对比:
技术 | 虚拟机 VM | 容器 container |
---|---|---|
大小 size | 大 | 小 |
启动速度 | 分级 | 秒级 |
性能 | 性能低 | 性能高 |
系统支持量级 | 单机只能运行十几个 | 单机能运行几千个个 |
开发语言GO,开源项目
docker是用Go语言编写的,并利用Linux内核的几个特性来提供其功能。Docker使用一种被称为容器的技术提供独立的工作区。运行容器时,Docker会为容器创建一组命名空间,namespaces。这些命名空间提供了一个隔离层。容器的每个方面都在独立的命名空间中运行,其访问权限仅限于该命名空间。(即容器的运行时相互独立的,不会影响其他容器。)
Github开源地址:
https://github.com/docker/docker-ce
Docker官方文档地址
https://docs.docker.com/
docker的使用场景
- web应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或者其他的后台应用
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS
Docker安装与卸载
安装:
- 如果你之前安装了旧版的Docker,那么需要先卸载之前的旧版本。
#remove old version
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# remove docker data
sodu rm -rf /var/lib/docker
-
设置存储库
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
安装docker引擎
#安装最新版本 sudo yum install docker-ce docker-ce-cli containerd.io #安装指定版本 sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
-
启动docker
sudo systemctl start docker
卸载:
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Dockerhub
dockerhub类似于github,是用于存储镜像的远程仓库。其中有很多的公共镜像,我们可以下载公共镜像到本地。我们也可以将自己的镜像push上去,并且可以设置镜像是否公开。那么下面我们来讲一下如何创建远程私有镜像。
创建远程仓库
-
创建docker账户
-
登录docker
-
创建私人远程镜像
镜像推送
此时,创建完镜像后。此时远程镜像是空的。现在我们需要将我们本地的镜像push到运程
-
登录docker
docker login
-
本地镜像打上标签
docker tag mysql:latest ariverh/mysql:latest
-
push本地镜像
docker push ariverh/mysql:latest
Docker命令
命令学习
-
查看docker有哪些命令
#显示更加详细的信息 docker info #显示版本信息 docker version #查看docker指令 docker --help
-
docker命令查看帮助
#docker帮助指令 docker command --help
镜像命令(images)
#本地镜像
docker images
#本地镜像id
docker images