docker
约 906 个字 -10 行代码 预计阅读时间 3 分钟
简介
是什么?
摘自官方文档:Docker is an open platform for developing, shipping, and running applications.
docker开发、测试和运维都会使用,是一种容器技术(其它的容器技术还有K8s),每一个docker容器都相当于一个linux虚拟机,可以根据不同的应用定制。
Docker 依赖于已存在并运行的 Linux 内核环境,实质上是在已经运行的 Linux 下制造了一个隔离的文件环境。因此,Docker 必须部署在 Linux 内核的系统上,Windows 上想使用 Docker 就必须安装 wsl。
Note
在 Windows 或者 macOS 上正常情况下应该会下载 Docker Desktop,该软件会提供图形化界面。
Docker Images
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件(比如交作业时把环境打包给助教),它包含运行时某个软件所需要的所有内容所需的所有内容,包括代码,库,环境变量和配置文件等。
常用指令:
- 获取镜像
docker pull:默认使用latest标签,也可以指定特定版本。 - 查看镜像
docker images或者docker image ls - 启动镜像
docker run:有很多可选参数,具体因镜像而异,常用的有指定端口映射-p xxxx:xxxx - 删除镜像
docker rmi
Docker Container
容器是镜像的实例,类似于OOP中类和对象的关系。
常用指令:
- 查看容器
docker ps:比如查看CONTAINER ID - 启动和停止容器
doker start/restart/stop/kill - 进入容器
docker exec:应用是跑在容器内部的,如果不是通过端口映射去连接,那么执行各种命令就需要进入容器内部 - 退出容器
exit - 删除容器
docker rm id
常见用法
打包环境就是它的核心功能,自不必多说,这里主要想说的是在实际开发中我们会用docker来完成哪些工作?
微服务
RPC 使得远端的服务可以像本地服务一样被调用,这样一来就没有必要区分到底是本地服务,还是远端服务,因而诞生了在不同服务器部署不同服务的想法,某台服务器上的应用可以调用其他服务器上的服务,不同服务器可以配置完全不一样的环境。而容器技术的出现使得我们并不需要真的有多台服务器,理论上可以在一台服务器上打包出各种服务,在这个想法的驱使下诞生了微服务微架构。
环境配置
在软件工程的方法论中,也许你曾看到过要把开发、测试和生成环境隔离开,但是要如何做到呢,源码基本都是同一套?除了配置文件之外,docker也可以发挥大用处,比如为每次测试都新建新的容器来提供服务(数据库没必要,数据库新建database就可以了)。
有了docker,我们能够很快速地完成某些东西的环境配置,比如PostgreSQL和Redis,之类拉取并运行即可,还可以便捷地改变配置(比如端口,因为可能会存在冲突),不再需要特别在意自己本地有没有什么会影响安装的东西。
常见问题
性能
docker 正常情况下性能是不太行的,因为一般在自己的笔记本上不会分给 docker 太多资源(情况就和虚拟机差不多)。
换源
大陆docker很可能被墙,所以需要换源(修改配置文件)。