1.Docker的概念
Docker是几月Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是i通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用火数据库应用等等)及其运行环境能供做到“一次惊醒,处处运行”
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
1.2Docker的应用
2.安装Docker
Docker可以运行在,MAC.Windows、Centos等操作系统上。
# 1、yum包更新到最新--更新centos7系统
yum update
#2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、设置yum源--指定docker下载路径
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#4、安装docker ,出现输入的界面都按y。 ce:社区版【】 ee:企业版【收费】
yum install -y docker-ce
# 5、查看docker版本,验证是否验证成功
docker -v
2.1Docker架构
-
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
-
容器(Container) :Docker 利用容器(Container)独立运行的一个或一组应用。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台
-
仓库(Repository)是集中存放镜像文件的场所。
类似于
Maven仓库,存放各种jar包的地方;
github仓库,存放各种git项目的地方;
Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/),
存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等
2.2配置Docker镜像加速器
默认情况下,将来从docker hub (https://hub.docker.com/)上下载docker镜像,太慢。一般都会配置镜像加速器:
==阿里云==
网易云
腾讯云
我用的是阿里云
3.Docker常用的命令
3.1Dcoker服务相关的命令
1.启动docker服务:systemctl start docker
2.关闭docker服务:systemctl stop docker
3.重启docker服务:systemctl restaert docker
4.开启启用docker:systemctl enable docker
5.查看docker状态:systemctl status docker
6.docker的帮助命令: systemctl 命令 --help
3.2Docker镜像相关命令
1.查看本地有哪些镜像:docker images
2.查看仓库的镜像:docker search 镜像名
3.删除本地镜像: docker rmi 镜像名:版本号
docker rmi 镜像id
4.拉取镜像到本地:docker pull 镜像名:版本号 ---如果没有指定版本号 默认为最新版本
5.帮助命令: docker 命令 --help
3.3Docker容器相关命令
1.运行容器
docker run -it --name= 容器名 centos:7 /bin.bash
-i:保持容器一直运行,因为勇气没有客户端练就就会自动关闭
-t:给容器分配伪终端接受命令
--name:给容器取名字
/bin/bash 进入零七的初始化指令 这里相当于是单开一个shell窗口
exit: 退出容器 --关闭当前容器
ctrl+q+p:退出容器---不会关闭容器
2.查看本地容器
docker ps --查看运行的容器
docker ps -a --查看所有的容器
3.进入容器 --运行的容器
docker exec -it 容器id /容器名 /bin/bash
4.启动一个容器
docker start 容器di/容器名
5.关闭容器
docker stop 容器id/容器名
6.删除容器
docker rm 容器id/容器名【删除的为停止的容器】
docekr rm -f 容器id/容器名【强制删除容器】
7.查看容器的日志
docker logs 容器id/容器名
4.容器的数据卷
思考:Docker容器和外部机器可以直接交换文件吗?
思考:Docker容器删除后,容器中的数据还在吗?
思考:容器之间想要进行数据交换?
4.1数据卷的概念:
数据卷是宿主机中的一个目录或文件
当容器目录和数据卷目录绑定后 对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器可以被挂载多个数据卷
作用:
1.解决数据持久化问题
2.解决外部机器和容器的间接通讯问题
3.解决容器之间的数据交换
4.2配置数据卷
1. 宿主机容器卷中的内容发生改变对应容器内的目录也跟着改变
2. 容器内的目录发生改变宿主机容器卷内的内容也跟着变化
3. 删除容器后,再次开启容器并挂载容器卷。数据依然存在
4. 一个容器挂载多个容器卷
5. 多个容器挂载一个容器卷
5.Docker应用部署
5.1安装mysql
1. 从远程仓库拉取mysql镜像: docker pull mysql:5.7
2. 运行mysql容器:
docker run -id --name=容器名 -p 宿主机端口:容器的端口 -e MYSQL_ROOT_PASSWORD=密码 镜像名[mysql:5.7]
> -p :表示宿主机的端口和容器内部端口映射
> -e :表示环境设置
3. 外界navicat连接mysql容器.
如果删除容器后,容器内的数据就会不存在,
使用数据卷,即使删除容器,容器的数据依然有保存。
docker run -id -p 3308:3306 -v /app/mysql/log:/var/log/mysql -v /app/mysql/data:/var/lib/mysql -v /app/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name=mysql70 mysql:5.7
5.2安装tomcat
1.拉取镜像 docker pull
2.运行容器 docker run -id --name=容器名 -p 8080:8080 tomcat:版本号
3.测试范文tomcat
有些会报404 未找到 我的就就是除了这个
下边是 解决办法
原因:tomcat容器内部没有webapps目录
1.docker exec -it 容器名 /bin/bash
5.3安装redis
(1)简单版
1.docker run -id --name=容器名 -p 6379:6379
2. 连接redis--window图形化界面
为了如果想修改redis的配置文件,或者redis重启后数据丢失。就比较 麻烦了。
(2)完整版
1.创建一个目录 /app/redis 并把redis.conf 放入该目录,之前一定有redis配置文件
2.创建一个目录/app/redis/data --存放redis持久化数据
docker run -id --name=容器名 -v /app/redis/redis.conf:/usr/redis/redis.conf -v /app/redis/data:/data -p 6380:6379 redis:6.0.20 redis-server /usr/redis/redis.conf
测试: 修改redis.conf配置文件---默认数据库16---改为15个
测试: docker exec -it 容器名 /bin/bash
redis-cli
set key
value save
把容器删除--在重写启动一个容器--新的容器中是否存在原来的数据。
5.4安装rabbitmq
docker run -id --name=容器名 -p 5672:5672 -p 15672:15672 rebbitmq:managment
测试: 访问