Docker基础梳理

一、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视频

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值