Docker入门其实很简单:三天时间从零到部署第一个容器

提起Docker,很多人第一反应是”高大上”、”难学”。其实真没那么神秘,我当初也是被这些名词吓到了,真正学起来才发现,Docker的核心思想特别简单,就是打包和隔离。今天我就用大白话,带你快速入门Docker。

Docker到底是啥

简单说,Docker就是个打包工具。把你写的代码、依赖的库、配置文件,全部打包成一个镜像。这个镜像在哪台机器上都能跑,环境一模一样,再也不会有”在我机器上能跑”这种问题了。

容器和虚拟机的区别也得说说。虚拟机是模拟一整套硬件和操作系统,又重又慢。容器是共享主机内核,只隔离进程,轻量级,启动快,资源占用少。同样配置,虚拟机跑10个,容器能跑100个。

安装Docker

安装Docker现在特别简单,官方有脚本一键安装。Ubuntu上就一条命令的事,装完启动服务,验证一下能跑hello-world,就完事了。要是这步都卡住了,建议先补补Linux基础。

Windows和Mac用户更简单,下载Docker Desktop,一路下一步就行。装好后还能用图形界面管理容器,对新手特别友好。

核心概念其实就三个

镜像、容器、仓库,就这三个核心概念。镜像是模板,容器是实例,仓库是存放镜像的地方。跟面向对象编程有点像,镜像是类,容器是对象,理解了这个就通了。

镜像是只读的,容器是镜像的运行实例。一个镜像可以创建多个容器,每个容器之间是隔离的,互不影响。这个设计特别巧妙,保证了环境一致性。

常用命令就那些

docker pull拉取镜像,docker run运行容器,docker ps查看运行中的容器,docker stop停止容器,docker rm删除容器。就这五个命令,能解决80%的问题。

日志查看用docker logs,进入容器用docker exec,这两个命令也常用。特别是排查问题的时候,进容器里看看配置,查查日志,特别方便。

镜像管理也简单,docker images看本地镜像,docker rmi删除镜像,docker build构建镜像。参数不多,多敲几次就记住了。

Dockerfile怎么写

Dockerfile是指令集,告诉Docker怎么构建镜像。看着复杂,其实就几个关键字。FROM指定基础镜像,RUN执行命令,COPY复制文件,CMD指定启动命令。就这四个,能写出简单的Dockerfile了。

举个例子,Node.js应用就五行:FROM node,WORKDIR /app,COPY代码,RUN安装依赖,CMD启动。Python、PHP、Java都差不多,换个基础镜像的事。

写Dockerfile有些经验之谈。基础镜像尽量选小的,像alpine这种,镜像小,构建快。依赖安装和代码复制分开,能利用缓存,加快构建速度。敏感信息用环境变量,别写死在Dockerfile里。

数据持久化

容器有个特点,删了就没了。那数据怎么办?Docker有数据卷的概念,可以把数据存在容器外面。这样容器删了重建,数据还在。

数据卷有两种,一种是自己管理的volume,一种是绑定挂载。简单应用用volume就行,复杂点用bind mount,灵活度更高。

数据库容器一定要配置数据持久化,不然容器一删,数据全没了。我见过好多人踩这个坑,辛苦跑的数据说没就没了,哭都来不及。

网络配置

容器之间要通信,就得配置网络。Docker默认有个桥接网络,容器能通过这个名字互相访问。如果需要和外部通信,可以映射端口,把容器端口映射到主机。

多容器应用,比如Web应用加数据库,可以用docker-compose来管理。一个yml文件定义所有服务,启动停止都方便。

Docker Compose多容器编排

实际项目中,很少有单个容器的。一般都是Web、数据库、缓存好几个服务。Docker Compose就是用来管理多容器的,一个配置文件定义所有服务,依赖关系、网络配置都写清楚,启动的时候自动按顺序来。

compose文件也不复杂,定义每个服务用什么镜像,配置什么环境变量,挂载什么数据卷,端口怎么映射。写好后docker-compose up一键启动,特别方便。

实战:部署个WordPress

理论说了这么多,来实战一个。用Docker部署WordPress,就两个服务,WordPress和MySQL。写个compose文件,定义两个服务,配置好环境变量,启动就行。

数据库服务用mysql镜像,配置root密码和数据库名。WordPress服务用wordpress镜像,配置数据库连接信息。端口映射8080到80,浏览器访问就能看到安装界面了。

整个过程不超过10分钟,比传统方式快多了。传统方式得装PHP、装MySQL、配置环境,没半小时下不来。Docker就两条命令,这就是效率。

常见问题

新手常问:镜像太大怎么办?选小基础镜像,用多阶段构建,清理不必要的文件。容器启动失败怎么办?看日志,99%的问题日志里都有提示。数据怎么备份?定期导出volume,或者用专门的备份工具。

还有安全问题,别用root运行容器,定期更新基础镜像,扫描镜像漏洞。生产环境尤其要注意,别把测试镜像直接上线。

学习资源推荐

Docker官方文档其实写得不错,有问题先查文档。GitHub上有很多现成的Dockerfile,参考别人的写法,能少走弯路。遇到问题别闷头想,Stack Overflow上搜一下,基本都有答案。

总结

Docker入门真的不难,核心概念就那些,常用命令就几个。找个简单应用,自己动手打包部署一次,比看十篇教程都管用。我当初就是部署了个WordPress,一下子就开窍了。

记住,工具是为人服务的,能解决问题就行。别被那些高大上的名词吓到,动手试试,其实很简单。

更多Docker和容器化资源:https://mjj.728.hk/