Docker知识点总结

Docker三要素

  • 镜像:Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
  • 容器:Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 仓库:仓库(Repository)是集中存放镜像文件的场所,类似于Maven,github,Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

Docker基础指令

帮助启动类命令

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态: systemctl status docker
  • 开机启动: systemctl enable docker
  • 查看docker概要信息: docker info
  • 查看docker总体帮助文档: docker --help
  • 查看docker命令帮助文档: docker 具体命令 --help

镜像命令

  • 列出本地主机的镜像:docker images [OPTIONS]
    • -a :列出本地所有的镜像(含历史镜像)
    • -q :只显示镜像ID
  • 搜索镜像:docker search [OPTIONS] 某个XXX镜像名字
    • –limit : 只列出N个镜像,默认25个
  • 拉取镜像:docker pull 镜像名字[:TAG]
  • 查看镜像/容器/数据卷所占的空间:docker system df
  • 删除镜像:docker rmi [OPTIONS] 镜像名或镜像ID
    • -f 强制删除

容器命令

  • 新建+启动容器:docker run [OPTIONS] **IMAGE** [COMMAND] [ARG...]
    • –name=“容器新名字”
    • -d: 后台运行容器并返回容器ID
    • -i:以交互模式运行容器
    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用,即启动交互式容器
    • -P: 随机端口映射
    • -p: 指定端口映射
  • 列出当前所有正在运行的容器:docker ps [OPTIONS]
    • -a:列出当前所有正在运行的容器+历史上运行过的
    • -l:显示最近创建的容器
    • -n:显示最近n个创建的容器
    • -q:静默模式,只显示容器编号
  • 退出容器
    • run进去容器,exit退出,容器停止
    • run进去容器,ctrl+p+q退出,容器不停止
  • 启动已停止运行的容器:docker start 容器ID或者容器名
  • 重启容器:docker restart 容器ID或者容器名
  • 停止容器:docker stop 容器ID或者容器名
  • 强制停止容器:docker kill 容器ID或者容器名
  • 删除已停止的容器:docker rm 容器ID
    • -f 强制删除
  • 查看容器日志:docker logs 容器ID
  • 查看容器内运行的进程:docker top 容器ID
  • 查看容器内部细节:docker inspect 容器ID
  • 进入正在运行的容器并以命令行交互:docker exec -it 容器ID /bin/bash
  • 重新进入容器:docker attach 容器ID
    • 退出容器直接停止,exec就不会,建议使用exec
  • 从容器内拷贝文件到主机:docker cp 容器ID:容器内路径 目的主机路径
  • 导出容器:docker export 容器ID > 文件名.tar
  • 导入容器:cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

数据卷

定义:卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

用法

  • 一般用法:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

  • 读写规则映射添加说明:默认就是读写(rw)

    • docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
    • 例子:容器实例内部被限制,只能读取不能写docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
  • 卷的继承和共享

    • 容器1完成和宿主机的映射:docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
    • 容器2继承容器1的卷规则:docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu

特点

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

DockerFile

定义:Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

构建三步骤

  1. 编写Dockerfile文件
  2. docker build命令构建镜像
  3. docker run镜像运行容器实例

DockerFile构建镜像过程解析

  • Dockerfile基础知识
    1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
    2. 指令按照从上到下,顺序执行
    3. #表示注释
    4. 每条指令都会创建一个新的镜像层并对镜像进行提交
  • Docker执行Dockerfile的大致流程
    1. docker从基础镜像运行一个容器
    2. 执行一条指令并对容器作出修改
    3. 执行类似docker commit的操作提交一个新的镜像层
    4. docker再基于刚提交的镜像运行一个新容器
    5. 执行dockerfile中的下一条指令直到所有指令都执行完成

DockerFile常见保留字指令

  • FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令,两种格式
    • shell 格式:RUN <命令行指令> 例如:RUN yum -y install vim
    • exec 格式:RUN [“可执行文件”,“参数1”,“参数2”] 例如:RUN ["./test.php",“dev”,“offline”]
    • RUN是在 docker build时运行
  • EXPOSE:当前容器对外暴露出的端口
  • WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  • USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root
  • ENV:用来在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
  • COPY:类似ADD,拷贝文件和目录到镜像中。功能没ADD强大,推荐使用ADD
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD:指定容器启动后的要干的事情
    • Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
    • 和RUN命令的区别:CMD是在docker run 时运行,RUN是在 docker build时运行
  • ENTRYPOINT:也是用来指定一个容器启动时要运行的命令
    • 类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖, 而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
    • ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。

Docker网络

类似于VMware虚拟机的网络连接方式:NAT,网桥,仅主机模式。但是又与之不同。

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

常用命令

  • 查看网络:docker network ls
  • 查看网络源数据:docker network inspect 网络名字
  • 创建网络:docker network create 网络名字
  • 删除网络:docker network rm 网络名字

网络模式

  • bridge模式:使用–network bridge指定,默认使用docker0
  • host模式:使用–network host指定
  • none模式:使用–network none指定
  • container模式:使用–network container:NAME或者容器ID指定
bridge
  • Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
  • docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。
  • 网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。
  • 每个容器实例内部也有一块网卡,每个接口叫eth0。
  • docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。

image-20220327221740055

host
  • 直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。
  • 容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。
  • 容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

image-20220327221201769

none

在none模式下,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo,需要我们自己为Docker容器添加网卡、配置IP等。

container

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

image-20220327221926519

自定义网络

自定义网络默认使用的是桥接网络bridge。

使用方式:新建一个自定义网络,新建多个容器加入自定义网络,多个容器在同一个网络中可以通过容器名(服务名)互ping成功,而不必须使用IP。

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

容器编排

简介:Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。

使用场景:同时部署多个服务的时候使用

例如:假如要实现一个Web微服务项目,除了Web服务容器本身,往往还需要再加上后端的数据库mysql服务容器,redis服务器,注册中心Nacos,甚至还包括负载均衡容器等等,如果手动一个个创建容器,很麻烦,且先后顺序也可能出错

Compose使用的三步骤

  1. 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  2. 使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
  3. 最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

Compose常用命令

  • docker-compose -h # 查看帮助
  • docker-compose up # 启动所有docker-compose服务
  • docker-compose up -d # 启动所有docker-compose服务并后台运行
  • docker-compose down # 停止并删除容器、网络、卷、镜像
  • docker-compose exec yml里面的服务id # 进入容器实例内部
  • docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
  • docker-compose top # 展示当前docker-compose编排过的容器进程
  • docker-compose logs yml里面的服务id # 查看容器输出日志
  • docker-compose config # 检查配置
  • docker-compose config -q # 检查配置,有问题才有输出
  • docker-compose restart # 重启服务
  • docker-compose start # 启动服务
    er-compose编排过的容器进程
  • docker-compose logs yml里面的服务id # 查看容器输出日志
  • docker-compose config # 检查配置
  • docker-compose config -q # 检查配置,有问题才有输出
  • docker-compose restart # 重启服务
  • docker-compose start # 启动服务
  • docker-compose stop # 停止服务
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值