1 Docker概述
1.1 Docker为什么出现
环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop)!费事费力
发布一个项目(jar+(Redis MySQL jdk ES)),项目能不能都带上环境安装打包!
之前在服务器配置一个应用的环境Redis、MySQL、jdk、ES、Hadoop,配置超麻烦了,不能够跨平台,windins,最后发布到Linux!
Docker通过隔离机制,可以将服务器利用到极致。
1.2 Docker 的历史
2010年,几个搞IT的年轻人,就在美国成立了一家公司dotcloud
,做一些pass的云计算服务!LXC有关的容器技术!他们将自己的技术命名为Docker。
Docker容器技术,也是一种虚拟化技术。
Docker基于Go语言开发的
官网:https://www.docker.com/
文档:https://docs.docker.com/
仓库地址:https://hub.docker.com/
1.3 Docker能干嘛
之前的虚拟技术特点
虚拟技术特点:
- 资源十分多
- 冗余步骤多
- 启动很慢
比较Docker和虚拟机技术的不同
- 传统虚拟机,虚拟出一个硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
- 容器内的应用直接运行在 宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件。
- 每个容器间是互相隔离。
DevOps(开发、运维)
应用更快速的交付和部署
传统:一键帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的审计和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像,扩展,服务器A!服务器 B
更简单的系统运维
在容器化之后,我们的开发没测试环境都是高度一致的。
更高效的计算资源利用
Docker是内核级别虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
镜像(image):
docker镜像好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动、停止、删除、基本命令
目前就可以把这个容器理解为就是一个简易的linux系统。
仓库(respository):
仓库就是存放镜像的地方!
仓库为公有仓库和私有仓库!
Docker Hub(默认是国外的)
阿里云…都有容器服务器(配置奖项加速!)
2 安装Docker
环境准备
- 需要会一点点的Linux的基础
- CentOS 7
- 我们使用XShell连接远程服务器进行操作
环境查看
安装到centos
https://docs.docker.com/engine/install/centos/
了解:卸载docker
2.1 容器镜像服务/镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2.2 底层原理
Docker如何工作
Docker是一个Client - Server的机构系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。
DockerServer接收到Docker-Client的指令,就会执行这个指令。
3 Docker的常用命令
3.1 帮助命令
帮助文档地址
官网:https://www.docker.com/
文档:https://docs.docker.com/
3.2 镜像命令
3.2.1 images查看所有本地的主机上的镜像
3.2.2 search搜索镜像
仓库地址:https://hub.docker.com/
3.2.3 下载镜像
3.2.4 rmi 删除镜像
3.3 容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
3.3.1 新建容器并启动
3.3.2 列出所有的运行的容器
3.3.3 退出容器
3.3.4 删除容器
3.3.5 启动和停止容器的操作
3.4 常用其他命令
后台启动容器
查看日志
查看容器中进程信息ps
查看镜像的元数据
进入当前正在运行的容器
从容器内拷贝文件到主机上
4 Docker镜像讲解
4.1 镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,字节打包docker镜像,就可以直接跑起来
如何得到镜像:
- 从远程仓库下载
- 朋友开呗给你
- 自己制作一个镜像DockerFile
4.2 commit镜像
实战测试
提交镜像
5 容器数据卷
5.1 什么事容器数据卷
docker的理念回顾
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!
需求:数据可以持久化
MySQL,容器删了,删库跑路 =需求:MySQL数据可以存储在本地=
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器内的目录,同步到linux上面
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的
5.2 使用数据卷
方式一:直接使用命令阿里挂载 -v
双向绑定
好处:我们以后修改只需要本地修改即可,容器内会自动同步!
5.3 实战安装MySQL
5.4 具名和匿名挂载
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data
我们同过具名挂载可以方便的找到我们的一个jaunty,大多数情况下在使用具名挂载
扩展:
6 初识DockerFile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本
通过这个脚本可以生成镜像
方式二:
dockerfile1 文件内容
构建:生成自己的容器镜像
启动
这个卷和外部一定有一个同步目录
6.1 数据卷容器
多个mysql同步数据
6.2 DockerFile构建过程
dockerfile是用来构建docker镜像的文件!命令参数脚本
构建步骤:
- 编写一个dokcerfile文件
- docker build构建为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub、阿里云镜像仓库)
基础知识:
- 每个保留关键字(指令)都必须是大写字母
- 执行从上到下顺序执行
-
#
表示注释 - 每一个指令都会创建提交一个新的镜像层,并提交
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。
Dokcer镜像逐渐成为了企业交付的标准,必须要掌握
步骤:开发、部署、运维—>缺一不可
DokcerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,做种发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务
6.3 DockerFile的指令
以前用别人的,现在用自己写的
6.4 实战测试
构建自己的centos
2.通过这个文件构建镜像
-f: 确定dokcerfile文件
命令:docker build -f dockerfile文件路径 -t 镜像名:[tag]
3.运行
查看镜像历史操作
6.5 CMD域ENTRYPOINT区别
测试cmd
构建
运行
展示出了所有 目录
测试entrypoint
6.6 实战:Tomcat镜像
1、 准备镜像文件tomcat压缩包,jdk压缩包
2、 编写dockerfile文件
Dockerfile
:官方命名,build会自动寻找这个文件
4 启动镜像
进入容器
6、发布项目(由于做了卷挂载,我们字节在本地编写项目就可以发布了)
6.7 发布自己的镜像
DockerHub
地址:https://hub.docker.com/
给镜像添加tag
发布到阿里云镜像服务
容器镜像服务
- 创建命名空间
- 创建容器镜像服务
- 创建命名空间
- 创建容器镜像
- 浏览阿里云
7 Docker网络
7.1 理解Dokcer0
原理
1、每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了dokcer,就会有一个网卡docker0交接模式
7.2 docker – link
思考一个场景,我们编写了一个微服务,database url=ip,项目不重启,数据库ip换掉了,我们系统可以处理这个问题,可以用名字来访问服务器
docker0问题:他不支持容器名连接访问
7.3 自定义网络
容器互联:
网络模式:
bridge:桥接docker(默认)
none:不配置网络
host:和宿机共享网络
container:容器内网络连通(用的少)
好处:
redis:不同的集群使用不同的网络,保证集群是安全和健康的
mysql:
7.4 网络连通
容器连接到网络
Docker Compose
Docker Swarm
CI/CD Jenkins流水线