Docker基础知识

本是古典 何须时尚 2023-01-17 07:37 210阅读 0赞

目录

什么是Docker?

Docker与虚拟主机的区别?

Docker的最大优点?

Docker安装

Docker的核心组件

Docker Container隔离机制

Docker中的网络模式

Docker的持久化机制

Docker常用命令


什么是Docker?

  • 通俗地讲,Docker 类似于集装箱。在一艘大船上,各种货物要想被整齐摆放并且相互不受到影响,我们就需要把各种货物进行集装箱标准化。
  • Docker 要做的就是把各种软件打包成一个集装箱(镜像),然后分发,且在运行的时候可以相互隔离。

Docker与虚拟主机的区别?

  • 虚拟主机创建时必须指定CPU、内存、磁盘的大小,这些是固定的,不能动态分配;
  • 而Docker可以动态申请资源。

Docker的最大优点?

  • Docker 镜像解决了环境打包的问题,它直接打包了应用运行所需要的整个“操作系统”,而且不会出现任何兼容性问题,它赋予了本地环境和云端环境无差别的能力,这样避免了用户通过“试错”来匹配不同环境之间差异的痛苦过程, 这便是 Docker 的精髓。
  • 它通过简单的 Dockerfile 来描述整个环境,使开发者可以随时随地构建无差别的镜像,方便了镜像的分发和传播。相较于以往通过光盘、U盘、ISO文件等方式进行环境的拷贝复制,Docker镜像无疑把开发者体验提高到了前所未有的高度。这也是 Docker 风靡全球的一个重要原因。

Docker安装

https://docs.docker.com/engine/install/centos/

Docker的核心组件

  • Container:运行的每一个应用相当于一个Container,由对应的Image模板创建,Container相当于一个小型Linux,在Centos中通过namespace隔离;
  • Image:包含了容器运行时所需要的所有基础文件和配置信息,如果将Image比喻为Class,则Container为Class创建的Object
  • Docker engine:Docker的执行引擎;
  • Docker hub:用于存储和分发Image,分为共有仓库和私有仓库。

Docker Container隔离机制

  • Docker 容器则是通过 Linux 内核的 Namespace 技术实现了文件系统、进程、设备以及网络的隔离,然后再通过 Cgroups 对 CPU、 内存等资源进行限制,最终实现了容器之间相互不受影响。

    • Namespace:用于资源隔离,如进程、网络等;
    • CGroup:用来做资源限制,如内存、cpu限制;
    • UnionFileSystem:用来做image和container分层,每一层可以被共享。例如两个业务镜像都是基于 CentOS 7 镜像构建的,那么这两个业务镜像在物理机上只需要存储一次 CentOS 7 这个基础镜像即可,从而节省大量存储空间。

Docker中的网络模式































Libnetwork常见网络模式

作用

场景

null空间网络模式

不提供任何容器网络

出于安全考虑,通过一种隔离的网络环境处理一些保密任务

bridage桥接模式(默认)

使容器间可以互通

容器间需要网络互通

host主机网络模式

使容器内的程序可以使用主机的网络

容器需要控制主机网络或通过主机网络提供服务

container网络模式

将两个容器放到同一网络空间中,可以直接通过localhost本地访问

两个容器直接通过localhost访问,一般用于网络接管或代理

Docker的持久化机制

  • Docker通过volume技术将container中的数据持久化到宿主机;
  • volume的实现原理是在主机的 /var/lib/docker/volumes 目录下,根据volume的名称创建相应的目录,然后在每个volume的目录下创建 _data 目录,在容器启动时如果使用 —mount 参数,Docker 会把主机上的目录直接映射到容器的指定目录下,实现数据持久化。

Docker常用命令

docker engine

  1. # 启动docker
  2. sudo systemctl start docker

仓库

  1. # 登录阿里云个人仓库
  2. docker login --username=白与黑0319 registry.cn-hangzhou.aliyuncs.com
  3. # 给要推送的image打tag
  4. docker tag f9d940b74ba5 registry.cn-hangzhou.aliyuncs.com/hujinyang/onlylove-image:v1.0
  5. # push推送镜像到指定仓库和命名空间下
  6. docker push registry.cn-hangzhou.aliyuncs.com/hujinyang/onlylove-image:v1.0
  7. # pull image从指定仓库和命名空间
  8. docker pull registry.cn-hangzhou.aliyuncs.com/hujinyang/onlylove-image:v1.0

image

  1. # 查看docker镜像
  2. docker images
  3. # 拉取镜像
  4. docker pull tomcat
  5. # 重命名镜像
  6. docker tag tomcat mytomcat
  7. # 删除镜像
  8. docker rmi mytomcat
  9. # 创建image有两种方式:
  10. # 1、docker build dockerfile【推荐的方式:可以明确过程】
  11. docker build -t onlylove-image .
  12. # 2、docker commit【将运行中的容器提交为镜像,不确定过程】
  13. docker commit [container] [newimage]

container

  1. # 查看运行的容器
  2. docker ps
  3. # 查看全部container,包括exited的容器,并列出容器的大小
  4. docker ps -as
  5. # 通过image创建容器并启动
  6. docker run -d --name my-tomcat -p 8888:8080 tomcat
  7. # 直接启动现有容器
  8. docker start my-tomcat
  9. # 进入容器
  10. docker exec -it my-tomcat sh
  11. # 停止容器
  12. docker stop my-tomcat
  13. # 删除容器
  14. docker rm my-tomcat
  15. # 删除所有容器
  16. docker rm -f $(docker ps -a))
  17. # 查看所有容器的ip
  18. docker inspect -f '{
  19. {.Name}} - {
  20. {.NetworkSettings.IPAddress }}' $(docker ps -aq)

构建自定义镜像并启动

  1. #1.定义dockerfile
  2. vim dockerfile
  3. # 输入内容保存
  4. FROM openjdk:8
  5. ADD ./4528102_www.5qel4c.cn.pfx /
  6. COPY onlylove.jar onlylove-image.jar
  7. CMD ["java","-jar","onlylove-image.jar"]
  8. #2.构建镜像
  9. docker build -t onlylove-image .
  10. #3.根据镜像创建容器
  11. docker run -d --name onlylove -p 8081:8081 onlylove-image
  12. #4.查看日志
  13. docker logs onlylove

docker资源查看与资源限制

  1. # 查看容器使用状态
  2. docker stats onlylove
  3. # --memory 100M :内存限制
  4. # --cpu-shares 10 :CPU权重
  5. docker run -d --name my-tomcat --memory 100M --cpu-shares 10 -p 8888:8080 tomcat

发表评论

表情:
评论列表 (有 0 条评论,210人围观)

还没有评论,来说两句吧...

相关阅读

    相关 docker基础知识总结

    什么是docker? docker是容器化技术。 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的