今天学习Docker

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、Docker概念?

  • Docker 是一个用于开发、发布和运行应用程序的开放平台,通过利用 Docker 快速交付、测试和部署代码的方法。隔离和安全性允许您在给定主机上同时运行多个容器。
  • 针对于软件管理,软件部署管理的对象是一个环境,除了文件/还有二进制的软件和它依赖的运行环境。由于操作系统和依赖库的体量很大,难以照搬代码管理的方式,用版本控制和中心仓库俩解决部署的问题。

二、Docker使用的好处?

1.更快速的交付和部署:使用人员可以通过镜像构建一套标准的开发环境,开发完之后,测试和部署人员可以通过直接使用相同的环境来部署代码。
2.更轻松的迁移和扩展:Docker容器可以在任意平台进行运行,包括物理机/虚拟机等;
3.更简单的更新的管理:使用DockerFile,只需要小小的配置更改,就可以替代以往的大量的更新操作,所有修改都是以增量的方式进行分发和更新。

  • 对于开发人员
    1.可以一机多用的,每个应用都运行在独立的虚拟化环境中,具有隔离性。
    2.Docker每个复杂的软件都可以制作Docker镜像,分享给大家使用。

  • 对于测试人员
    使用Docker,不需要做任何配置,就能保证开发和测试的环境是一致的,测试人员只需要关注 测试本身即可。

  • 对于运维人员
    服务快速部署能力,扩缩容,版本回退在几秒钟就可以完成。

三.Docker三大组件?

Docker三大组件是仓库/镜像/容器;

3.1 镜像

镜像所占的磁盘空间小于所有的镜像之和,原因是镜像采用分层的机制,相同部分独立成层,只需要存储一份即可。通过联合文件系统叠加在一起,用户看起来就像一个完整的文件系统。

**镜像两个特性:**一个是有的分层只能读不能修改,另一个是上层的镜像优先级高于底层镜像。
在这里插入图片描述
如果想要修改镜像B,首先需要基于B创建一个新容器M1,在容器M1上修改a.txt 文件的内容,最后通过docker commit命令提交生成一个新的镜像B‘;

3.1.1 常用命令

docker images:查看所有镜像
docker pull 镜像名称:获取镜像
docker search 镜像名称:搜索镜像
docker rmi 镜像名称:删除镜像名称
docker images:查看镜像
docker inspect :查看该镜像的详细信息
docker logs -f 镜像名称: 查看镜像日志

3.2 容器

3.2.2 常用的容器命令:

docker ps -a | grep 容器Id:查看容器的状态
docker start 容器id:启动容器
docker stop 容器id:停止容器
docker inspect 容器id:查询容器信息
docker logs -f 容器Id:查询日志
docker stats 容器Id:查看容器所占用的系统资源
docker exec +容器名+容器内执行命令:
docker inspect 容器名 |tail -n 20 :查看后20行
docker exec 容器名 ps aux:查看该容器启动了哪些命令
docker run -it -d 镜像名称

3.3 仓库

4.数据卷

容器数据卷存在于linux系统中,目的是将docker容器中的重要数据存放到linux中。
设计目的就是数据的持久化,完全独立于容器的生命周期,因此删除容器的同时不会删除数据库。

4.1常用命令:

docker run -it --privileged=true -v linux宿主机绝对路径:容器绝对路径 镜像名称
docker run -it --privileged=true -v linux宿主机绝对路径:容器绝对路径:ro 镜像名称 只能在linux系统中执行写如操作,容器只读权限。
// 首先要创建容器u1
docker run -it -v /tmp/testdocker/:/tmp/testdocker/ --name=“u1” ubuntu /bin/bash
// 然后退出容器u1,创建容器u2,并让u2的容器数据卷继承u1,相当于执行 docker run -it -v /tmp/testdocker/:/tmp/testdocker/ --name=“u2” ubuntu /bin/bash
docker run -it --volumes-from u1 --name=“u2” ubuntu /bin/bash

5.网络模式

5.1 bridge:为每个容器分配、设置ip等,并将容器连接到一个docker0,虚拟网络,默认为该模式;

概念:
在这里插入图片描述

  • Docker服务默认会创建一个 docker0网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理网卡或虚拟网卡。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,docker0网桥的作用是主机和容器之间互相通信的桥梁,这就将所有容器和本地主机都放到同一个物理网络。
  • docker run命令执行的时候,如果不指定网桥模式的话,使用的就是bridge模式,在docker容器启动之后,会在linux虚拟机中虚拟一个docker容器网桥(docker0),而通过bridge模式启动的容器,将会以docker0的ip地址作为网关,并根据网关的前三段不变原则分配对应的ip地址,在上面的命令中可以通过docker inspect 容器id/名称 | tail -n 20查看容器使用的网桥模式和ip地址。
  • 网桥docker0将会创建对等的虚拟设备接口,其中一个叫veth,另一个叫eth0,由于所有docker容器都和网桥docker0连接在一起,而网桥docker0和linux宿主机连接在一起,所以容器之间、容器和宿主机都是可以相互通信的。
5.2 host:直接复用宿主机的ip地址与外界通信,不在通过docker0网关进行转换。

在这里插入图片描述

  • 概念:而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,而是使用宿主机的IP和端口。如果容器想使用的端口已经被占用了,那么容器所用端口就会在原来的基础上递增,直到找到合适端口,假设8080端口已经被其他容器占用了,然后tomcat容器使用host模式启动,那么这个tomcat容器将会使用8081端口
5.3 none:在none模式下,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo。需要我们自己为Docker容器添加网卡、配置IP等。也就是禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
5.4 自定义网络:自定义网络本身就维护好了容器名和ip的对应关系,我们使用ip或者容器名都可以ping通对应的容器。
  • 如果两个容器需要通信,我们不能写死ip,毕竟ip可能在容器重启之后就会发生变化,所以我们需要写死的是容器名称,那么就需要让两个容器之间可以通过容器名称进行通信,这就需要使用是自定义器网络。
  • 这种情况在搭建集群的时候经常要使用,比如redis集群之间的互相通信要使用容器名称而不是ip
5.5 常用的命令:

docker network create :创建网络模式
docker network ls:查询网路的列表

// 创建自定义网络,其中custom_nework是自定义网络名称
docker network create custom_network

// 创建容器tomat81,使用自定义网络
docker run -it -p 8081:8080 --network custom_network --name tomcat81 billygoo/tomcat8-jdk8

// 创建容器tomat82,使用自定义网络,记得执行下面命令需要新开一个窗口
docker run -it -p 8082:8080 --network custom_network --name tomcat82 billygoo/tomcat8-jdk8

// 在容器tomcat81中执行ping命令,发现可以ping通
ping tomcat82

// 在容器tomcat82中执行ping命令,发现可以ping通
ping tomcat81

六、DockerFile

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

  • 基础知识:
    指令执行顺序从上到下,依次执行。

表示注释

每条指令都会创建一个镜像层,并且对镜像进行提交

  • 步骤:
    编写Dockfile文件
    使用docker build命令构建镜像
    对镜像使用docker run XXX运行容器实例

七、Docker Compose

7.1概念:
  • 可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动 / 关闭这些容器。
  • 部署一个web微服务项目,不仅包含微服务容器本身,还包括redis、mysql等容器,如果使用docker run命令,那么这些容器全部启动和关闭就太累了,所以docker官方给我们提供了docker-compose多服务部署的工具。Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器。
  • 使用的docker-compose.yml
7.2常用命令:

docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务(控制台会出现日志),即启动docker-compose.xml
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose exec yml里面的服务id # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
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 # 启动服务
docker-compose stop # 停止服务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值