docker理念
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
Docker三件套
镜像(image)
Docker镜像就是一个只读的模版。镜像可以用来创建Docker容器,一个镜像可以创建很多个容器。它也相当于是一个root文件系统。比如官方镜像centos:7就包含了完整的一套centos:7最小系统的root文件系统。相当于容器的”源代码“
容器(container)
可以把容器看做成是一个简易版的linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序
仓库(repository)
集中存放镜像文件的场所,类似与github仓库,存放各种git项目的地方,Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模版的地方。
仓库分为公开仓库(Public)和私有仓库(Private)
run干了什么
为什么docker比vm虚拟机快
新镜像推送私服库案例
1.下载镜像docker registry
docker pull Registry
2.运行私有库Registry,相当于本地有个私有docker hub
docker run -id registry /bin/bash
3.案例演示穿件一个新镜像,ubuntu安装ifconfig命令
apt-get update
apt-get install 命令
4.curl验证私服仓库上有什么镜像
curl -XGET http://192.168.21.200:5000/v2/_catalog
5.将新镜像myubuntu:1.2修改为符合私服规范的Tag
docker tag myubuntu:1.2 192.168.21.200:5000/myubuntu:1.2
6.修改配置文件使其支持http
vim /etc/docker/daemon.json
"insecure-registries":["192.168.21.200:5000"]
修改完成之后如果不生效的话重启docker
7.push推送到私服库
docker push 192.168.21.200:5000/myubuntu:1.2
8.curl验证私服库上有什么镜像
curl -XGET http://192.168.21.200:5000/v2/_catalog
9.pull到本地并运行
把原来的镜像删除时候
docker pull 192.168.21.200:5000/myubuntu:1.2
然后docker images 在此查看本地镜像
Docker容器卷
坑!
Docker挂载主机目录访问如果出现cannot open directory Permission denied
解决办法:在挂载目录后多加一个--privileged=turn参数
挂载目录的情况被默认为是不安全的行为。在Selinux里面挂载目录被禁止掉了,权限不够
数据卷是什么
有点类似于我们redis里面的rdb和aof文件
将docker容器内的数据保存进宿主机的磁盘中
卷就是一个目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
运行一个带有容器卷存储功能的容器实例
docker run -it--privileged=ture -v /宿主机的绝对路径目录:/容器内目录 镜像名
将运用与运行的环境打包镜像,run后形成容器实例运行,但是我们对数据的要求希望是持久化的
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保存数据在docker中我们使用卷
特点:
1.数据卷可以在容器之间共享或重用数据
2.卷中的更改可以直接实时生效,
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止
容器卷的案例
1.宿主机vs容器之间映射添加容器卷
直接命令添加
#命令 docker run -it --privileged=ture -v /宿主机绝对路径目录:/容器内目录 镜像名
公式:
#查看数据卷是否挂载成功
#容器和宿主机之间数据共享
2.读写规则映射添加说明
读写(默认)
docker run -it -v/宿主机绝对路径目录:/容器内目录:rw 镜像名
默认同上案例,默认就是rw
只读
容器实例内部被限制,只能读取不能写
docker run -it -v/宿主机绝对路径目录:/容器内目录:ro 镜像名
3.卷的继承和共享
宿主vs容器之间映射添加容器卷
读写规则映射添加说明
卷的继承和共享
容器1完成和宿主机的映射
docker run -it -v /mydocker/u:/tmp/u --name=x1 ubuntu /bin/bash
容器2继承容器1的卷规则
docker run -it --volumes-from x1 --name=x2 ubuntu
Docker上安装常用软件
总体步骤
搜索 拉取 查看 启动 停止 移除
docker安装tomcat
docker hub 上面查找 tomcat镜像
因为我们之前已经配置了阿里云的镜像,所以我们直接早本地上搜索就行
docker search tomcat # 本地搜索我们需要的镜像
docker pull tomcat #然后下载我们需要的版本,我这里选择的是默认版
docker images tomcat #查看是否有拉取到tomcat
使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
# -p 小写,主机端口:docker容器端口
# -P 大写 随机分配端口
# -i 交互
# t 终端
# d:后台
访问猫首页
这里访问是404 ,把容器内的webapps删了
mv webapps.dist webpps 文件在这个里面
这个太麻烦了 还需要手动修改 这个时候我们用下面的
免修改版说明
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8