docker初学
1.docker:系统平滑移植,容器虚拟化技术,基于go语言实现的云开源项目。一次镜像,处处运行。将应用打包成镜像。解决运行环境和配置问题。
2.docker基本组成
|
1.镜像image:类似一个集装箱,一个只读的模板,一个镜像可以创建多个容器,一个最小系统的root文件系统 2.docker容器container:使用镜像创建的运行实例,可以把容器看成一个简易版的Linux环境和运行其中应用程序,每个容器都是相互隔离的,保证安全的平台 3.仓库respository:存放镜像的地方 |
3.整体架构及通讯原理简述
|
1.用户使用docker client 与docker daemon建立通信,并发送请求个后者 2.docker daemon作为docker架构中的主体部分,首先提供docker server的功能使其可以接受docker client的请求 3.docker engine执行docker内部的一系列工作,每一项工作都已是以一个job的形式存在 4,job运行的过程中,当需要容器镜像时,则从docker registry中下载镜像,并通过镜像管理驱动graph driver将下载的镜像以graph的形式存储 5.当需要为docker创建网络环境是,通过网络管理驱动network driver创建并配置docker容器网络环境 6.当需要限制docker容器在运行资源或执行用户指令等操作是,则通过exec driver来完成 7.Libcontainer是一项独立的容器管理包,networkdriver以及exec driver都是通过里边container来实现具体对容器进行的操作 |
4.docker 安装 查看官网 https://docs.docker.com/engine/install/centos/
5.输入 docker run hello-world 查看是否成功

run 干了什么

5.docker为什么比虚拟机快
1.比虚拟机更少的抽象层
2.docker利用的是宿主机的内核,而不是加载操作系统的os内核
6.docker常用命令
|
1.帮助启动类命令 systemctl start docker 启动docker systemctl stop docker 停止docker systemctl restart docker 重启docker systemctl status docker 查看docker 状态 systemctl enable docker 开启启动 docker info 查看docker概要信息 docker --help 查看帮助文档 docker 命令 --help 查看具体命令帮助文档 2.镜像命令 docker images 【-a 全部镜像 | -q 只查看镜像id】 查看已存在镜像 docker serach 【--limit 5 最多stars的5个】 镜像名 查看远程仓库是否有此镜像 docker pull 镜像名 【:tag版本号】 下载镜像 默认latest docker system df 查看镜像、容器、数据卷所占的空间 docker rmi 【-f 强制删除】镜像ID(可以多个) 删除某个镜像 docker rmi -f $(docker images -qa) 删除全部镜像 面试题:docker虚悬镜像是什么:仓库名,标签都是<none>的镜像,俗称虚悬镜像 3.容器命令 docker run [options] [id|name] bash -i:交互式操作 -t: 终端 --name:给容器启动指定一个名称 -P:随机端口映射 大写P -p:指定端口映射 小写p -d:指定容器的后台运行 bash :shell终端 例如:docker run -it ubuntu bash exit:退出停止 ctrl + p +q :退出不停止 docker ps 【options】 :列出正在运行的容器实例 -a :列出当前所有正在运行的容器+历史上运行的过的 -l:显示最近闯将的容器 -n:显示最近n个创建的容器 -q:静默模式,只显示容器编号 docker [start | restart | stop | kill | rm(-f 强制)] id 容器启动,停止,重启,杀掉,删除容器 docker logs id 查看容器日志 docker inspect 容器ID 查看容器内部细节 docker exec -it 容器ID bash 重新进入已经运行容器内部 exit退出不会停止容器 docker attach 容器ID 重新进入已经运行容器内部 exit退出会停止容器 工作中最好使用 docker exec docker cp 容器ID:路径 目的主机:路径 docker拷贝容器文件到本地 容器备份 docker export 容器ID > 文件名.tar 导出容器内容作为一个tar归档文件 cat 文件名.tar |docker import 镜像用户/镜像名:镜像版本号 :从tar包中的内容创建一个新的文件系统再导入为镜像对应 export
|
7.docker镜像
1.是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
2.UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个 虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体 的应用镜像。
3.特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
4.Docker镜像层都是只读的,容器层是可写的 当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。当容器启动时,一个新的可写层被加 载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。 所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有 镜像层都是只读的。
5.外网联通的情况下载容器中安装命令使用 apt-get
apt-get update 更新包管理工具
apt-get -y install vim 安装vim
安装完成之后可以使用commit提交我们自己的新镜像供大家使用 docker commit -m " add vim cmd " -a="ziyu(作者)" 容器ID 仓库:版本号
例如 : docker commit -m "add vim cmd" -a="ziyu" fdf7fc6ca2b2 guigu:1.1.0
6.本地镜像发布到阿里云流程


7.搭建私有dockers仓库
|
1.下载registry镜像 docker pull registry
运行私有库Registry,相当于本地有个私有Docker hub docker run -d -p 5000:5000 -v /root/myregistry/:/tmp/registry --privileged=true registry 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
演示在dockers安装ifconfig命令 docker run -it ubuntu bash apt-get update apt-get -y install net-tools
docker commit -m "ifconfig" -a="ziyu" 1ba76515b4b5 newubuntu:1.2 将本地的新生成的镜像文件提交到本地仓库 模板:docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
curl -XGET http://192.168.92.168:5000/v2/_catalog 验证私服仓库上有什么镜像
将新镜像newubuntu:1.2修改符合私服规范的Tag 按照公式: docker tag 镜像:Tag Host:Port/Repository:Tag 自己host主机IP地址,填写同学你们自己的,不要粘贴错误,O(∩_∩)O 使用命令 docker tag 将zzyyubuntu:1.2 这个镜像修改为192.168.92.168:5000/newubuntu:1.2 docker tag newubuntu:1.2 192.168.92.128:5000/newubuntu:1.2 修改配置文件使之支持http
docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,建议重启docker docker push 192.168.92.128:5000/newubuntu:1.2 将镜像推送到私服库 curl -XGET http://192.168.92.128:5000/v2/_catalog 验证
docker pull 192.168.92.168:5000/newubuntu:1.2 拉去到本地运行 |
8.docker容器数据卷
|
1.卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷 2.将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保 存数据在docker中我们使用卷。 特点: 1:数据卷可在容器之间共享或重用数据 2:卷中的更改可以直接实时生效,爽 3:数据卷中的更改不会包含在镜像的更新中 4:数据卷的生命周期一直持续到没有容器使用它为止 2.容器卷记得加入 --privileged=true Docker挂载主机目录访问如果出现cannot open directory .: Permission denied 解决办法:在挂载目录后多加一个--privileged=true参数即可
3.宿主vs容器之间映射添加容器卷 直接使用命令 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 docker run -it --name myu3 --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash docker inspect 容器ID 查看是否挂载成功
1 docker修改,主机同步获得 2 主机修改,docker同步获得 3 docker容器stop,主机修改,docker容器重启看数据是否同步 读写规则添加说明(默认是rw) 1.容器内部限制,只能读取不能写使用 ro 2.命令 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名 卷的继承和共享(相当于使用多盘备份) 1. 容器1完成和宿主机的映射 docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu 2.容器2继承容器1的卷规则 docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu |
9.mysql实例
|
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 |







浙公网安备 33010602011771号