Docker 学习总结

Docker概念

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker可大致分为三部分:

  1. Docker Engine
  2. images
  3. containers

images和containers是运行在Docker Engine上,我们根据自己的需求自定义images模板,运行images即自动生成containers

Docker的执行流程

执行流程大致可以用一张图来表示:

  1. 镜像的构建:由client端编写,存储在images(Server)中
  2. 拉去镜像:通过命令从远程长裤拉取
  3. 运行容器:通过命令,指定image运行容器

05.png

Docker相比VM的优点

image-20201207172040541.png

  1. 有助于Microservices的落地和部署
  2. 充分利用物理机资源,同时能够整合服务器资源
  3. 提高开发效率,测试效率,部署效率,有利于DevOps的落地,CICD
  4. 云原生落地,应用更好地迁移

其实最为明显的优点Docker动态获取机器资源,而VM需要在创建时指定资源大小

Docker命令

docker help 查看命令

  1. docker pull tomcat 拉去tomcat镜像
  2. docker images 查询本地镜像列表
  3. docker ps 查询 本地运行中的容器列表
  4. docker ps -a 查询本地所有容器列表
  5. docker run -d --name my-tomcat -p 9090:8080 image 创建docker容器,指定名称和映射端口
  6. docker rmi -f my-tomcat 删除镜像
  7. docker rm -f $(docker ps -aq) 删除所有容器
  8. docker exec -it my-tomcat /bin/bash 进入容器
  9. docker stop my-tomcat 停止tomcat容器
  10. docker kill my-tomcat 强制停止容器
  11. docker start my-tomcat 开启tomcat容器

注意:通过阿里云镜像下载的tomcat会有问题,容器运行后访问8080端口会404,解决方案:将webapps.dist中的所有文件移到webapps文件中 cp -r webapps.dist/* webappsmv webapps.dist webapps

  1. docker logs my-tomcat 查看容器日志
  2. docker build --rm --tag tomcat:8.0 . 使用当前文件夹下dockerfile文件构建镜像,标签设置为8.0
  3. docker save -o tomcat-image.tar tomcat:lastest 保存镜像到本地
  4. docker stats containerName 查看容器资源使用情况
  5. docker inspect container 查看容器详情信息

底层技术支持

Docker容器之所以能够将服务区分隔离,主要是通过linux中的namespace技术来实现的

今日所学内容:

两个namespace想要进行通信,必须两者之间有网卡进行相连

在docker中,当启动了docker service后,会默认创建一个docker0的网卡,在启动container时,会在container和docker 的namespace中创建 veth-pair ,多个服务即可由docker0来进行相互通信,简单点理解就是,docker0充当zookeeper、eruake、nacos等注册中心,多个container注册到docker0中,多容器进行通信