Docker学习
简介
1、docker是什么?
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的的容器虚拟化技术。
2、传统虚拟和docker的不同之处
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程
- 容器内的应用进程直接运行于宿主内核,容器没有自己的内核,而且也没有硬件虚拟,因此容器要比虚拟机更为轻便
- 每个容器之间相互隔离,每个容器有自己的容器系统,容器进程之间不会相互影响,能区分计算资源
3、docker架构图
4、docker的三大要素
-
镜像:镜像就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建多个容器。
-
容器:docker利用容器独立运行的一个或一组应用。容器是用镜像创建的运行实例。他可以被开始、启动、停止等。每个容器都是相互隔离的、保证安全的平台。可以把容器看成是一个 简易版的Linux和运行在其中的应用程序。
-
仓库:仓库是存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库又存放了多个镜像,每个镜像有不同的标签(Tag)
总结:仓库-(包含多个)->镜像-(包含多个)->容器
总结:我们把应用程序和配置依赖打包好行程一个可交付的运行环境,这个打包好的运行环境就是镜像文件,只有通过这个镜像文件才能生成docker容器。
5、docker的安装
6、底层原理
1、执行 docker run 命令之后发生了什么?
2、底层原理
待补充…
7、常用的命令
1、帮助命令
docker version:查看docker版本
docker info:docker的详细信息
docker --help:docker帮助命令
2、镜像命令
docker images:列出本地的所有镜像
docker search xxx:查找某个镜像
docker search -s 10 xxx:列出收藏数不小于10的镜像
docker pull xxx:拉取镜像
docker rmi -f xxx:强制删除某个镜像
docker rmi -f $(docker images -qa):删除全部镜像
3、容器命令
docker run -it --name myname xxx:以交互模式运行容器xxx并取名为myname,为容器重新分配一个伪输入终端
docker run -it -p 自定义端口:被映射的端口 xxx:在指定端口启动容器
docker run -d xxx:以守护进程的方式启动一个容器
docker ps:查看docker里面正在运行的容器
docker ps -l:查看上次运行的容器
docker ps -n 3:查看上3次运行的容器
exit:退出并关闭容器
Ctrl+P+Q:容器不停止退出
docker start xxx:启动已经被停止的容器
docker restart xxx:重启容器
docker stop xxx:停止容器
docker kill xxx:强制停止
docker rm xxx:删除已停止的容器
docker rm $(docker ps -a -q):一次性删除多个容器
docker logs -t -f xxx:打印日志,带时间不停地追加
docker inspect xxx:查看容器内部的详细信息
docker attach xxx:进入已经退出(Ctrl+P+Q)的容器并进行交互
docker exec -it xxx ls(命令行):不进入容器执行命令行
复制容器内的文件到宿主:
docker cp 容器ID:容器内路径 目的主机路径
8、Docker镜像
1、什么是镜像?
镜像是一种轻量级、可独立运行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需要的的所有内容。
2、UnionFS
UnionFS(联合文件系统)是一种分层、轻量级且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。UnionFS文件系统是Docker镜像的基础 。
特性:一次同时加载多个文件系统,但从外面看来,只能看到一个文件系统,联合加载会把各种文件系统叠加起来,这样最终的文件系统会包含所有底层的文件目录。
为什么采用分层结果:最大的好处就是共享资源,比如有好多个镜像都从base镜像构建而来,那么宿主主机只需要在磁盘上保存一份base镜像,同时内存中也只需加载一份base镜像,就可以为所有容器服务了。
3、commit操作
docker commit -a=“作者” -m=“注释信息” 当前容器ID xxx/xxx:xxx(标签)
9、Docker容器数据卷
1、基础知识
卷的设计目的就是数据的持久化,完全独立于容器的生命周期,因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
1、数据卷可在容器之间共享或重用数据
2、卷的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到容器没有使用它为止
2、数据卷的添加
1、直接命令添加
docker run -it -v /宿主机的绝对目录:/容器内目录 镜像名
验证:使用docker inspect 容器ID查看
2、DockerFile添加
…
3、数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的数据,称之为数据卷容器。
使用步骤:
1、新建一个父容器:docker run -it --name=“doc01” zy/centos
2、新建一个子容器继承这个父容器
docker run -it --name=“doc02” --volumes-from dc01 zy/centos
效果:在父容器中新建的文件夹和文件会在子容器中复制一份。子容器添加的文件同样会出现在父容器和其他子容器中,从而达到共享文件的效果。
10、Docfile解析
1、基础知识
什么是Dockerfile?
Dockerfile是用来构建Docker镜像的构建文件,是由一系列参数和命令构成的脚本
(2)构建三步骤
编写Dockerfile文件----->docker build------>docker run
2、编写方式
1、基本语法
- 每条保留字指令都必须为大写字母且后面至少要跟一个参数
- 指令按照从上到下的顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
以centos为例:
FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c68-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-06-02"
# Default command
CMD ["/bin/bash"]
2、Dockerfile的执行流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作,提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新的容器
- 执行dockerfile中的下一条指令,直到所有的指令都执行完成
3、Dockerfile保留字指令
FROM:
MAINTAINER:
RUN:
EXPOSR:
WORKDIR:
ENV:
ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和
COPY:
VOLUME:
CMD:
ENTRYPOINT: 指定一个容器启动时要运行的命令
ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发
4、编译指令
docker build -t 新镜像名字:TAG
11、推送镜像到阿里云
1、运行要推行的容器
2、推送命令
首先使用docker ps命令查看运行容器的ID
docker commit -a=pss -m=“我的推送” 容器ID 容器名称:TAG
此时使用docker images 可以看到上一步推送的镜像
3、推送的阿里云
登录阿里云开发者:
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
创建命名空间
在本地执行一下命令进行推送: