解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
镜像(image)
Docker镜像就是一个只读的模版。镜像可以用来创建Docker容器,一个镜像可以创建很多个容器。它也相当于是一个root文件系统。比如官方镜像centos:7就包含了完整的一套centos:7最小系统的root文件系统。相当于容器的”源代码“
容器(container)
可以把容器看做成是一个简易版的linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序
仓库(repository)
集中存放镜像文件的场所,类似与github仓库,存放各种git项目的地方,Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模版的地方。
仓库分为公开仓库(Public)和私有仓库(Private)
docker pull Registry
docker run -id registry /bin/bash
apt-get update
apt-get install 命令
curl -XGET http://192.168.21.200:5000/v2/_catalog
docker tag myubuntu:1.2 192.168.21.200:5000/myubuntu:1.2
vim /etc/docker/daemon.json
"insecure-registries":["192.168.21.200:5000"]
修改完成之后如果不生效的话重启docker
docker push 192.168.21.200:5000/myubuntu:1.2
curl -XGET http://192.168.21.200:5000/v2/_catalog
把原来的镜像删除时候
docker pull 192.168.21.200:5000/myubuntu:1.2
然后docker images 在此查看本地镜像
挂载目录的情况被默认为是不安全的行为。在Selinux里面挂载目录被禁止掉了,权限不够
有点类似于我们redis里面的rdb和aof文件
卷就是一个目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
docker run -it--privileged=ture -v /宿主机的绝对路径目录:/容器内目录 镜像名
将运用与运行的环境打包镜像,run后形成容器实例运行,但是我们对数据的要求希望是持久化的
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保存数据在docker中我们使用卷
特点:
1.数据卷可以在容器之间共享或重用数据
2.卷中的更改可以直接实时生效,
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止
直接命令添加
#命令 docker run -it --privileged=ture -v /宿主机绝对路径目录:/容器内目录 镜像名
公式:
#查看数据卷是否挂载成功
#容器和宿主机之间数据共享
读写(默认)
docker run -it -v/宿主机绝对路径目录:/容器内目录:rw 镜像名
默认同上案例,默认就是rw
只读
容器实例内部被限制,只能读取不能写
docker run -it -v/宿主机绝对路径目录:/容器内目录:ro 镜像名
宿主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 hub 上面查找 tomcat镜像
docker search tomcat # 本地搜索我们需要的镜像
docker pull tomcat #然后下载我们需要的版本,我这里选择的是默认版
docker images 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