今天咱们来聊聊 Docker 这个好东西。想象一下,你写了一个程序,在自己电脑上跑得好好的,一到别人机器上就各种报错,缺这个少那个。Docker 就是来解决这个麻烦的,它把你的程序和运行环境一起打包,走到哪儿都能跑。
先说镜像,你可以把它理解成一个模板。就像做月饼的模具,有了模具才能批量生产。Docker 镜像里装的是操作系统、运行环境、你的代码,所有东西都封在一起。怎么获取镜像呢?最简单的是从官方仓库拉取,比如你想用 Python,就执行 docker pull python:3.11,这会下载一个 Python 3.11 的基础镜像。下载完可以用 docker images 看看本地有哪些镜像,就像查看你收藏的模具清单。
有了镜像就能运行容器了。容器是镜像的运行实例,相当于用模具做出来的月饼。执行 docker run -it python:3.11 bash,这会启动一个容器并进入交互模式。参数 -it 让你能和容器互动,bash 是启动的命令。进去之后你会发现这是一个干净的 Python 环境,想装什么包都行,怎么折腾都不影响主机。
实际项目中,你不会每次都手动敲命令,而是写一个 Dockerfile 来定义镜像。这就像给你的月饼配方写张说明书。第一行写 FROM python:3.11,表示基于哪个基础镜像。然后用 WORKDIR /app 设置工作目录,COPY . . 把当前目录的文件拷进去,RUN pip install -r requirements.txt 安装依赖,最后 CMD [“python”, “app.py”] 指定启动命令。写好后执行 docker build -t myapp . 就能打包成自己的镜像,-t 后面是镜像名字,最后的点表示 Dockerfile 在当前目录。
镜像管理有个实用技巧,就是给镜像打标签。比如 docker tag myapp myapp:v1.0,这样能区分不同版本。推送镜像到仓库用 docker push myusername/myapp:v1.0,前提是你先 docker login 登录了。拉取别人的镜像就 docker pull,和本地镜像管理是一个逻辑。
容器运行起来后,用 docker ps 查看正在跑的容器,docker logs 容器 ID 看日志,docker exec -it 容器 ID bash 可以进入运行中的容器调试。这些命令就像你的工具箱,用得多了就顺手了。
最后说个常见场景,怎么让容器和主机交换文件?用挂载卷。docker run -v /主机路径:/容器路径 myapp,这样两边的文件是同步的,改哪边都能实时看到。数据库数据、配置文件都适合这么处理,容器删了数据还在。
Docker 这东西,开始觉得玄乎,多用几次就明白了。核心就两句话:镜像是模板,容器是实例。把环境打包好,部署就不再是噩梦。今天先讲到这,动手试试比光看强。