Docker 学习总结
Docker概念
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker可大致分为三部分:
- Docker Engine
- images
- containers
images和containers是运行在Docker Engine上,我们根据自己的需求自定义images模板,运行images即自动生成containers
Docker的执行流程
执行流程大致可以用一张图来表示:
- 镜像的构建:由client端编写,存储在images(Server)中
- 拉去镜像:通过命令从远程长裤拉取
- 运行容器:通过命令,指定image运行容器

Docker相比VM的优点

- 有助于Microservices的落地和部署
- 充分利用物理机资源,同时能够整合服务器资源
- 提高开发效率,测试效率,部署效率,有利于DevOps的落地,CICD
- 云原生落地,应用更好地迁移
其实最为明显的优点Docker动态获取机器资源,而VM需要在创建时指定资源大小
Docker命令
docker help 查看命令
docker pull tomcat拉去tomcat镜像docker images查询本地镜像列表docker ps查询 本地运行中的容器列表docker ps -a查询本地所有容器列表docker run -d --name my-tomcat -p 9090:8080 image创建docker容器,指定名称和映射端口docker rmi -f my-tomcat删除镜像docker rm -f $(docker ps -aq)删除所有容器docker exec -it my-tomcat /bin/bash进入容器docker stop my-tomcat停止tomcat容器docker kill my-tomcat强制停止容器docker start my-tomcat开启tomcat容器
注意:通过阿里云镜像下载的tomcat会有问题,容器运行后访问8080端口会404,解决方案:将webapps.dist中的所有文件移到webapps文件中
cp -r webapps.dist/* webapps或mv webapps.dist webapps
docker logs my-tomcat查看容器日志docker build --rm --tag tomcat:8.0 .使用当前文件夹下dockerfile文件构建镜像,标签设置为8.0docker save -o tomcat-image.tar tomcat:lastest保存镜像到本地docker stats containerName查看容器资源使用情况docker inspect container查看容器详情信息
底层技术支持
Docker容器之所以能够将服务区分隔离,主要是通过linux中的namespace技术来实现的
今日所学内容:
两个namespace想要进行通信,必须两者之间有网卡进行相连
在docker中,当启动了docker service后,会默认创建一个docker0的网卡,在启动container时,会在container和docker 的namespace中创建 veth-pair ,多个服务即可由docker0来进行相互通信,简单点理解就是,docker0充当zookeeper、eruake、nacos等注册中心,多个container注册到docker0中,多容器进行通信
