一、Docker简介
- 介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
- 本教程的前提知识
- 前提知识
1.强制:熟悉Linux命令和相关背景知识(本博客都有相关教程)
2.建议:Git相关的知识和maven相关知识储备
- 为什么会有Docker的出现
在正常的开发到上线的过程中,针对不同的环境,需要重复准备代码运行的环境,在不同的环境下,会出现版本不兼容的问题,没有一个标准化的解决方案,Docker的出现,利用镜像技术,解决了这个问题,Docker解决了在不同环境不兼容的问题,大大提高了开发运维的工作效率,另外,大大提升可扩展性。(一次封装,到处运行)
- 官网:
中文官网:https://www.docker-cn.com/
英文安装:https://www.docker.com/
- 仓库:
官方仓库:https://hub.docker.com/
阿里云仓库:后续详细介绍
二、Docker安装
- 安装前提
Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS6.5或者以上版本
CentOS 仅发行版本中的内核支持Docker,Docker运行在CentOS 7 上,要求系统为64位,系统内核版本是3.10以上。
Docker运行在CentOS6.5或者更高的CentOS上,要求系统为64位,系统内核版本为2.6.32-431或者以上版本。
查看自己的内核
uname -r命令用于打印当前系统的相关信息
- CentOS 7 查看内核版本
cat /etc/redhat-release
- Docker架构图
client:操作Docker的终端
Regietry:Docker的仓库
- Docker的三大要素
- 仓库:仓库第集中存放镜像的场所。仓库分为公开仓库和私有仓库,最大的公开仓库是Docker Hub。国内最大的公开仓库是阿里云仓库。
- 镜像:Docker镜像(Image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器。
- 容器:Docker利用容器独立运行的一个或者一组应用,容器是用镜像创建的运行实例。它可以被启用、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。
-安装步骤(centOS6.8版本)
1.yum install -y epel-release
2.yum install -y docker-io
3.安装后的配置文件:/etc/sysconfig/docker
4.启动docker后台服务:service docker start
5.docker version验证
验证安装成功!
- 安装步骤(centOS 7 版本)
安装CE版本
1.先卸载老的版本:sudo yum remove docker (如果没安装过就跳过此步骤)
2.安装所需的软件包。yum-utils 提供了 yum-config-manager 实用程序,并且 devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.安装最新版本的 Docker CE,或者转至下一步以安装特定版本。
$ sudo yum install docker-ce
4.更新 yum 软件包索引。
$ sudo yum makecache fast
5.安装最新版本的 Docker CE,或者转至下一步以安装特定版本。
$ sudo yum install docker-ce
6.启动 Docker。
$ sudo systemctl start docker
7.验证是否正确安装了 docker,方法是运行 hello-world 镜像。
$ sudo docker run hello-world
官方安装文档:https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/
三、Docker常用命令
docker 帮助命令
- Docker 的版本号
docker version
这个命令可以查看docker 相关版本的信息
- Docker 详细信息
docker info
这个命令可以查询到docker相关的详细信息,比docker version 信息详细
- 帮助命令 help
docker --help
这里有所有的docker相关的命令,可以直接查阅
docker 镜像命令
- docker images
列出本地的所有镜像
各个属性的说明:
- REPOSITORY:表示镜像仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
同一个仓库源里面可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 来表示不同的镜像,如果你不指定一个镜像的版本标签,会默认取latest的版本的镜像。- OPTIONS说明:
-a:列出本地所有的镜像(包括中间镜像层)
-q:只显示镜像ID
-digests:显示镜像的摘要信息
–no-trunc:显示完整的镜像信息
- docker search
解释:去 https://hub.docker.com官方仓库里面查找对应镜像
docker search 【OPTIONS】镜像名字
OPTIONS说明:
–no-trunc:显示完整的镜像描述信息
-s:列出搜藏数不小于制定值的镜像
–automated:只列出automated build类型的镜像
举例:
查找tomcat镜像
这个是在官方仓库里面查到的等同于docker search tomcat
- docker pull下载镜像
举例:docker pull tomcat 等同于 docker pull tomcat:latest
- docker rmi
1.docker rmi -f 镜像ID (或者name) 强制删除
2.docker rmi -f 镜像名1 镜像名2 (或者ID)多个删除
3.docker rmi -f $(docker images -qa) 删除全部的镜像
docker 容器命令
- 新建并启动容器
docker run images名称
- OPTIONS说明:
–name=“容器的新名字” 为容器指定一个名字
-d: 后台运行容器,并返回容器的ID,即启动守护式容器
-i:以交互模式运行容器,通常于-t一起使用
-t:为容器重新分配一个伪输入终端,通常和-i同时使用
-P:随机端口映射
-p:指定端口映射,有下面四种格式
- ip:hostPort:containerPort
- ip:containerPort
- hostPort:containerPort
- containerPort
- 列出当前所有正在运行的容器
docker ps
- 退出容器
exit 关闭并退出
ctrl+P+Q 不关闭退出
- 启动容器
docker start 容器ID 或者name
- 重启容器
docker restart 容器ID或者mane
- 停止容器
docker stop 容器ID或者name
- 强制停止容器(即刻停止)
docker kill 容器ID或者name
- 删除已停止的容器
docker rm 容器ID或者name
- 一次性删除多个容器
docker rm $(docker ps -qa)
docker ps -qa | xargs docker rm
- 启动守护式容器
docker run -d 容器ID或者mane
当没有前台应用使用时候,立即自己关闭
- 查看容器日志
docker logs -f -t --tail 容器ID
-t:是时间戳
-f:跟随最新的日志打印
–tail : 数字显示最后多少行
- 查看容器内运行的线程
docker top 容器ID
- 查看容器内部细节
docker inspect 容器ID
- 进入正在运行的容器并以命令行进行交互
docker exet -it 容器ID bashShell
重新进入docker attach 容器ID
上两个区别:
exet:是在容器中打开新的终端,并且可以启动新的进程
attach:直接进入容器启动命令的终端,不会启用新的进程
- 从容器内拷贝文件到主机
docker cp 容器ID:容器内路径 目的主机路径
四、Docker镜像
- 镜像原理
UnionFS(联合文件系统):
联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下, 联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率
docker特点:
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的叫做镜像层。
- Docker 镜像的commit
docker commit 提交容器副本使之成为一个新的镜像
docker commit -m=“提交描述信息” -a=“作者” 容器 ID要创建的目标镜像名:【标签名】
五、Docker容器数据卷
- 容器数据卷是什么
Docker 的理念:将运用与运行的环境打包形成容器运行,运行可以伴随这容器,但是我们对数据的要求希望是持久化的,容器之间希望是共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么容器本删除后,数据就没有的,为了能保存数据在docker中我们使用数据卷来完成。
- 容器数据卷能干什么
docker数据卷功能主要有两个:容器的持久化|容器间继承和共享数据
卷就是目录或者文件,存在与一个或者多个容器中,有docker挂载到容器中,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性。卷的设计的目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除的时候删除其挂载的数据卷
特点:
1.数据卷可在容器之间共享或者是重用数据
2.卷中的更改可以字节生效
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一致持续到没有容器使用为止
- 数据卷实操
- 容器内添加数据卷
1.直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
这样就可以容器中的数据可以实时存在宿主机,保证容器的持久化,数据层的同步不再做展示。
带权限的添加
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
这个添加完的数据卷,在容器中是只读,只能是宿主机往容器中写东西,容器不可以往宿主机写东西。
2.DockerFile添加
DockerFile可以为容器添加数据卷,详情在DockerFile中详细讲述。
- 数据卷容器
- 数据卷容器是什么
命名的容器挂载数据卷,其他容器通过挂载中国风实现数据共享,挂载数据卷的容器,称之为数据卷容器。- 容器间传递共享(–volumes-from)
容器之间配置信息的传递,数据卷的生命周期一直持续带没有容器使用为止。
六、DockerFile解析
- DockerFile是什么
Dockerfile是用来构建Docker镜像的构建文件,是有一系列的命令和参数构成的脚本。这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
- DockerFile构建步骤
1.编写Dockerfile文件
2.docker build
3.docker run
- DockerFile文件是什么样子的
在https://hub.docker.com/网站上搜索一个centOS为例,可以看到DockerFile就是这样的。
- DockerFile构建过程解析
- DockerFile内容基础知识
1.每条保留字指令都必须是大写字母且后面要跟随至少一个参数
2.指令安装从上到下的顺序执行
3.#表示注释信息
4.每条指令都会创建一个新的镜像层,并对镜像提交- Docker执行DockerFile的大致流程
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit 操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的容器
5.执行dockerfile中的下一条指令知道所有指令都执行完成。
- dockerfile 介绍总结
从应用软件的角度来看,DockerFile.Docker镜像和Docker容器分别代表软件的三个不同的阶段。
- Dockerfile是软件的原材料
- Docker镜像是软件的交付品
- Docker容器可以认为是软件的运行状态
- DockerFile体系结构(基本语法)
FROM 基础镜像base image
RUN 执行命令
ADD 添加文件
COPY 拷贝文件
CMD 执行命令
EXPOSE 当前容器对外暴露的端口
WORKDIR 指定路径,创建容器后,终端默认登录后的工作目录,一个落脚点
MAINTAINER 维护者
ENV 设定环境变量
USER 指定路径
VOLUME 逻辑卷挂载点mount point
ENV用来在构建镜像过程中设置环境变量
- 案例
- Base镜像(scratch)
Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。- 自定义镜像mycentos
Hub默认CentOS镜像
需求:自定义mycentos 使镜像登录后默认路径改变
安装 vim和ifconfig
Hub默认CentOS镜像状况如下:
1.编写
2.构建
docker build -t 新建镜像名称:TAG
3.运行
build后的镜像直接run就好了,这里不再赘述。
七、Docker常用安装
- 总体安装步骤
1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.停止镜像 6.移除容器
- 安装Tomcat
docker hub上面查找Tomcat镜像
docker search tomcat
从docker hub上面拉取Tomcat镜像到本地
docker pull tomcat
可能拉取时间比较长,请耐心等待docker images查看是否有拉取的Tomcat
使用Tomcat镜像创建容器(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
说明:
-p 主机端口:docker容器端口
-P 随机分配端口
-i 交互
-t 终端
- 安装Redis
从docker hub 拉取Redis镜像到本地 标签为3.2
使用Redis3.2镜像创建容器
使用镜像
在主机下/jiangwenke/myredis/conf/redisconf目录下新建redis.conf文件
vim /jiangwenke/myredis/conf/redisconf/redis.conf
测试redis-cli连接上来
测试持久化文件生成
八、Docker本地镜像发布到阿里云
- 本地镜像发布到阿里云流程
- 镜像生成方法
利用DockerFile创建镜像
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
- 将本地镜像推送到阿里云
本地镜像素材原型
阿里云开发者平台
创建仓库镜像
将镜像推送到registy
- 将阿里云镜像下载到本地
此部分不做详细说明
docker基础部分到此结束,可能由于时间原因整理不够充分
参考文档:尚硅谷docker视频