网站首页 > 技术文章 正文
前言
最近书读得不少,但是能进脑子的不多,这本书读完也有两个星期了想着再不拿出来回忆一波就完全白送了。毕竟实战的机会不多,更多的还得靠脑子想。为了看一下自己脑子装的是浆糊还是水,写这篇笔记时尽可能不看资料,不翻原书,纯手工编写,不做CV搬运工。
书评
总的来说这是一本不错的书,应该是一本入门比较好的书籍了(虽然我学得不怎么样...)。单纯看官网的时候一脸懵逼,完全不知道在说什么,看完这本书了之后,至少对docker有了一个较为清晰的认识,相信自己也算是半只脚入了门。
docker简介与核心概念
docker是一个基于linux虚拟化的容器技术。与传统VMware之类基于操作系统的虚化不同,docker提供的是基于应用程序的虚拟化,因此docker无论是性能还是速度都是非常厉害。
docker里面有许多概念,但这些概念与我们常用的技术还是比较相似的,多多少少可以从平常的使用或者看到的内容中看到一些相似的影子。当我们需要安装一个操作系统时,我们通常会使用 “系统镜像”来安装。在docker中也是一样,我们需要运行一个容器,则我们需要先有一个镜像(image) 。镜像想要在互联网上快速分发,就需要一个统一的资源仓库,这个官方的资源仓库就是docker hub。镜像往资源库的上传、下载操作,就像源代码的拉取推送操作。除此之外docker还有文件与网络等一些比较重要的内容。
docker镜像
当我们需要指定一个镜像时,我们需要用仓库+名称+标记来标识,如果是docker官方的仓库则使用名称+标记即可,而标记通常使用的是版本号。当然如果不用版本号也可以,它表示了我们将使用最新版本(latest)。当然docker并不建议使用latest,因为latest代表的永远是最新的版本,这是一个变化的版本,在生产环境中更需要一个稳定的场景。
docker镜像操作非常之多,想要全部精通还是不容易的。沿着增删改查的思路,梳理一下镜像操作。
查询操作
- docker images 查询镜像列表
- docker inspect 【IMAGE NAME】查询单个镜像内容
拉取镜像
- docker pull 【IMAGE】
删除镜像
- docker rmi 【IMAGE NAME】删除镜像
- docker image rm 【IMAGE NAME】删除镜像
构建镜像
- docker build 利用docker file构建镜像
还有一些其它操作,比如说 导入导出用于镜像文件拷贝传递之类操作等等。
docker容器
容器是docker最核心的概念,
查看容器
- docker ps [-a] 查看所有的容器(-a 可以看到未运行的容器)
- docker inspect 【CONTAINER NAME】 查看容器的明细信息
启停容器
- docker start 【CONTAINER NAME】启动容器
- docker stop 【CONTAINER NAME】停止容器
- docker run 【IMAGE】 拉取镜像并启动
docker run 是平时自己玩的时候使用最多的命令,从0到1一步到位直接启动容器。
删除容器
- docker rm 【CONTAINER NAME】
网络
网络是docker在使用中比较重要的部分之一,docker提供了三种网络模式 bridge、host、null,其中host是主机共享模式,也就是直接使用主机网卡与网络;bridge是桥接模式,也是最为常见的一种网络模式。
桥接模式既可以提供网络隔离也可以提供网络共享,因此桥接模式的使用也是最广泛的。
查看网络
- docker network ls 查看网络列表
- docker network inspect 【NAME】 查看网络明细
网络隔离的实现
当我们新建一个桥接网络(或者使用默认的桥接网络)时,该网络会分派一段子网ip地址,例如我环境中的docker0的子网为172.17.0.1/16。由于是子网,所以在默认的情况外部是无法访问到该子网的。如果我们建立多个不同的桥接网络时,这些网络也将会相互相互不连通从而达到网络隔离。
每次新建一个容器并使用桥接网络时,docker会分派一对虚拟网卡,进行1对1通讯,一个在容器内部,一个在容器的外部。在容器内外可以通过ip addr命令查看网卡信息,可以看到匹配的网卡。
跨主机互联
桥接模式通过子网的方式提供内部网络,而子网是不能直接与主机外部网络通信的,想要通信则需要网络转发,这也就是nat。nat全名network address tranlation将内部容器对外的请求和外部对内部容器的请求进行翻译处理,例如当子网访外网时,主机的nat将请求的请求ip地址改为了主机的ip地址。
在容器启动时,可以通过参数-P或者-p指定端口,此时会在nat表产生相关的记录。可以通过sudo iptables -t nat -nvL 查看。
文件与数据
除了网络的使用,docker也会使用文件系统。docker是通过UFS(联合文件系统)来实现的文件管理。将文件分为一层一层的,这个从镜像拉取时比较明显。而这些层都是只读的,最后会在上面加上一个可写层构成最终的文件系统。虽然docker的联合文件系统号称高性能,但是跟直接进行文件读写操作性能还是差了太多。
除了性能较差之外,docker容器内部的文件会随着docker容器删除而消息,这对于一些重要的数据文件(比如数据库),是不可接受的。因此docker提供了相应方案可以让文件直接放在主机上,再挂载到容器中,这就是数据卷。
数据卷命令
- docker volume ls 查看数据卷列表
- docker volume inspect 【卷ID】 查看卷详细信息
- docker volume create 创建数据卷
- docker volume rm 删除数据卷
常规的数据卷的指定在dockerfile中就完成了,不需要启动容器的单独处理。
数据卷数据位置
在主机上数据卷的位置可以从 docker volume inspect中看到,默认为 /var/lib/docker/volumes/{卷ID}/_data 这个路径。而在容器内部的地址则可以通过 docker container inspect 查看容器信息中的mounts节点可以看到。例如mysql,内部映射的地址为 /var/lib/mysql。
结尾
docker的内容很多,留下深刻印象的也就是以上的一些东西了。像仓库与私有化部署、数据卷容器等等之类的东西大多只能记住是干什么的了。而像compose、wasm、k8s之类由于没有实战机会,估计学起来会更加困难了。
猜你喜欢
- 2024-10-14 Docker Overlay 网络学习 dockercompose 网络
- 2024-10-14 盘点c++几种常见的设计模式及具体实现
- 2024-10-14 Docker新手福音!这个开源控制面板让你更快上手Docker
- 2024-10-14 Docker-掌握这三种方法,创建自己的docker镜像
- 2024-10-14 docker 基础概念 docker基于什么
- 2024-10-14 小白也能轻松上手,深度体验绿联私有云DX4600 Docker功能
- 2024-10-14 一文带你了解docker常用命令 docker常用命令及参数
- 2024-10-14 Docker最佳实践的反模式 docker反向代理
- 2024-10-14 docker中容器如何实现通信 docker容器之间如何通信
- 2024-10-14 工程化Docker:确保应用程序的可靠性、可扩展性和可维护性
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)