最近在做项目,所有的功能都实现了之后就剩下部署了,而部署的过程便学习到了新的技术——Docker。本文只会讲一些理论的知识,因为不同系统的电脑安装方法可能会有差异,所以就不做介绍,可根据具体的系统版本查找对应的教程官网安装教程
1、为什么要用Docker
一个软件的实现分为开发和运维两大部分,在开发阶段已经把所有的代码写好了,到了运维时就需要进行部署。部署的过程就常常出现更换了设备就运行不了的情况,这就是由于操作系统、运行环境、应用配置可能不相同而导致的结果。如果每次部署都要考虑这么多的情况则太过麻烦。所以Docker应运而生!
2、什么是Docker
Docker的目标是在任何地方构建、发布并运行任何应用。解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
通俗说,Docker就是连带原始环境一起全部打包安装,从而省去了配置环境过程的一种工具(类似于虚拟机)。消除“在我的电脑上能正常工作,换一台电脑就不行的现象”
3、Docker的好处
- 在一个高并发、高流量的大项目中,往往部署项目是以集群的方式部署的,通俗说就是在多个设备上进行部署。如果每一个设备都要一遍遍安装需要的所有环境,那么工程量过于庞大。而使用Docker把所有的内容打包成一个镜像文件,那么之后在所有的设备上都只需要安装这一个镜像文件便能快速高效地完成部署工作
- 之前说了Docker类似于虚拟机,但是和虚拟机相比,Docker的加载速度会更快,而且相当于是一个精简版的操作系统,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。
4、三要素
- 镜像(image):模板,类似于一个类。当我们把代码、环境打包好之后就叫做镜像文件。
- 容器(container):用镜像创建的运行实列,类似于由类创建出的对象。利用容器便可独立运行程序,对于每一个容器都可以启动、开始、停止、删除,并保证每个容器都是相互隔离的。可把容器看作一个精简版的Linux环境。
- 仓库(repository):集中存放镜像的地方。用法一般就是先构建一个镜像然后上传到远程仓库里,等有需要了便从仓库种下载下来使用。
5、常用命令
帮助命令
命令 | 作用 |
---|---|
docker version | 查看docker版本 |
docker info | 查看docker的信息(比version更详细) |
docker help | 查看各种docker命令,类似man |
镜像命令
命令 | 作用 | 选项 |
---|---|---|
docker images | 显示当前本地存在的镜像 | -a显示所有镜像和对应每一层的内容; -q只显示镜像ID; --digests显示镜像的摘要信息; --no-trunc显示镜像完整的信息 |
docker search 镜像名 | 查询镜像 | -s显示指定星级范围的镜像 |
docker pull 镜像名:版本 | 下载镜像,若省略版本则默认下载最新版本 | |
docker rmi 镜像名:版本 | 删除镜像,若省略版本则默认删除最新版本 | -f强制删除 |
docker commit 容器ID 目标镜像名 | 提交容器副本使之成为新的镜像,也就是说假如一个容器做了一些新的修改,通过commit便可以创建出一个最的镜像 | -m提交的描述信息;-a作者 |
docker build | 根据dockerFile创建镜像 | -f指出dockerFile的路径;-t新镜像的名字 |
容器命令
命令 | 作用 | 选项 |
---|---|---|
docker run 镜像名字 | 执行容器,先检查本地有没有该镜像,若没有则从仓库下载,然后根据镜像生成容器运行 | –name为容器指定一个新名称; -d后台运行容器; -i开启一个可交互的容器(比如ubuntu); -t 为容器分配一个伪输入终端-i,-t通常一起使用; -p手动分配一个访问端口; -P随机生成一个访问端口 |
docker ps | 查看docker正在运行的所有容器 | -a显示所有正在运行的容器和已停止的容器 |
exit | 关闭容器 | |
ctrl + p + q | 暂时离开容器回到宿主机但并没有关闭 | |
docker start 容器名 | 启动容器 | |
docker restart 容器名 | 重启容器 | |
docker stop 容器名 | 停止容器 | |
docker kill 容器名 | 强制关闭容器 | |
docker rm 容器名 | 删除容器 | -f强制删除 |
docker logs 容器ID | 查看容器日志 | -t显示时间; -f一直追加打印最新的日志; --tail数字 显示最新的多少条日志 |
docker top 容器ID | 查看容器内部正在运行的进程 | |
docker inspect 容器ID | 查看容器内部结构细节 | |
docker exec -it 容器ID 命令 | 创建正在运行的容器的子进程执行指定的命令并返回结果(只要结果不进去) | |
docker attach 容器ID | 进入正在运行容器并通过命令进行交互(先进去再得到结果) | |
docker cp 容器ID:容器内路径 目的主机路径 | 从容器将文件拷贝到宿主机 |
总结:
- 以往写代码都只考虑能运行就可以,从来不考虑程序运行的环境是什么样的,更不会在意更换环境后代码还好不好使。以后要学会除了考虑代码之外,还要考虑配置环境、运行环境、依赖包等共同参与到程序正常运行的各种因素。
- 正常来说使用的远程仓库是来自hub.docker.com,这是国外的网站,下载镜像会比较慢。所以需要更换国内的远程仓库来实现加速下载的目的。这种技巧不只适用于此,也适用于Linux下载软件、pip下载第三方库文件等等都是有类似的方式
- Docker也是目前很流行的一个技术,很多大型的企业都在使用。所以学习这样的主流技术也是很有必要的