Docker
解决开发环境,测试环境,生产环境之间的开发环境不匹配问题。
将软件(依赖环境和源代码(打包))装在一个容器中在三个解决环境迁移问题,我们用的就是Docker容器。
Docker架构
Image是Docker镜像,相当与一个root文件系统。
container是容器,是镜像运行的实体。
repository是仓库,有官方提供的,也有公司自己的私服,用来保存镜像。
关系:
Image --> container
类 —> 对象
Docker命令
Docker镜像相关命令
1.查看镜像:
docker images
2.搜索镜像:
docker search 软件名
3.拉取镜像:
docker pull 软件名 :【版本号】(不填的话就是默认下载最新的)
4.删除镜像:
docker rmi 镜像id。如果镜像id一样的话,还可以通过版本号删除
docker images -q 获取所有镜像的id,
docker rmi docker images -q
删除所有镜像
Docker容器相关命令
1.查看正在运行的容器:
docker ps (-a)不加-a则只查看运行中的容器,加了就能查看历史用过的所有容器
2.退出容器:
exit
3.创建容器:
docker run 参数
参数: -it 交互式容器 -id 守护式容器 --name 名字 为容器命名
4.启动容器:
docker start 容器名字
5.关闭容器 :
docker stop 容器名字
数据卷
1.数据卷定义
宿主机的目录(或文件)和容器中的目录(或文件)挂载起来,即相互绑定,宿主机的目录(或文件)就称为数据卷。绑定后,双方的变化会同步进行。
注: 数据卷的使用可以使得容器数据持久化,即当数据卷和容器中的目录绑定后,容器中的变化,都会同步到宿主机中的数据卷中。而且还可以实现外部机器和容器间接通信,即外部机器不可以和容器直接进行信息交换,但是可以和宿主机进行信息交换,通过改变数据卷,容器中的与数据卷相互绑定的目录也随之改变,从而实现间接通信。还可以实现容器之间的数据交换,即容器之间不能相互交换数据,但是多个容器之间都和一个相同的数据卷相互绑定,通过数据卷这个作为中间媒介,来实现容器之间的数据交换。
2.配置数据卷
docker run -v 宿主机目录(或文件)绝对路径: 容器内目录(或文件)绝对路径 …
3.数据卷容器
Docker应用部署
MySQL部署
1.搜索镜像
2.拉取镜像
3.创建容器
4.操作容器中的mysql
端口映射
Tomcat部署
Nginx部署
Redis部署
Dockerfile
1.Docker镜像原理:
分层的文件系统
2.文件管理子系统:
bootfs:包含bootloader(引导加载程序)和kernel(内核)
rootfs:root文件系统
注: 底层是bootfs,第二层是rootfs基础镜像,往上可以叠加镜像,上层的镜像可以使用到下层的镜像(就像一个三明治,往上面可以叠加镜像(面包片))
注: 每个镜像的安装包大小比镜像的大小要小的原因是,镜像还需要依赖父镜像以及基础镜像,底层的镜像都可以是上层的父镜像
镜像制作
1.容器转为镜像
容器转为镜像:
docker commit 容器id 镜像名称:版本号
镜像转为压缩文件:
docker save -o 压缩文件名称 镜像名称:版本号
压缩文件转为另一个镜像:
docker load -i 压缩文件名称
2.dockerfile
文本文件,包含了很多指令,每条指令构建一层,基于基础镜像,最终构建处一个新的镜像。
关键字
FROM 指定父镜像
RUN 执行命令
CMD 容器启动命令
ENTRYPOINT 入口
Docker私有仓库
上传镜像
拉取镜像