很多刚接触 Docker 的朋友会觉得概念抽象,其实把它想象成一个打包工具就明白了。你把代码、依赖、环境全部打成一个包,这个包在任何机器上跑起来效果都一样,这就是容器化的核心价值。
先从镜像说起。镜像是容器的模板,就像光盘里的系统安装文件。你可以从 Docker Hub 拉取现成的镜像,比如运行一个 Nginx 服务只需要一行命令:docker pull nginx。拉取完成后用 docker images 查看本地镜像列表,能看到镜像名称、标签和大小。建议给镜像打上版本标签,比如 nginx:1.24 而不是用默认的 latest,这样能避免线上环境突然升级导致的问题。
创建容器是下一步。用 docker run 命令启动容器,加上 -d 参数让它在后台运行,-p 参数映射端口。比如 docker run -d -p 8080:80 nginx 就是把容器的 80 端口映射到宿主机的 8080 端口。访问 localhost:8080 就能看到 Nginx 的欢迎页面。
镜像管理中最实用的是自定义镜像。写一个 Dockerfile 就能定义你的应用环境。第一行写 FROM 指定基础镜像,比如 FROM node:18-alpine。然后用 COPY 把代码复制进去,RUN 执行安装命令,最后 CMD 指定启动脚本。举个例子,一个 Node.js 应用的 Dockerfile 大概长这样:FROM node:18-alpine,WORKDIR /app,COPY package.json .,RUN npm install –production,COPY . .,CMD node server.js。写好后用 docker build -t myapp:1.0 . 来构建镜像。
容器运行中难免要排查问题。docker ps 查看运行中的容器,加上 -a 能看到所有包括已停止的。docker logs 容器 ID 查看日志输出。如果容器里需要临时执行命令,用 docker exec -it 容器 ID bash 就能进入容器内部。
最后说说数据持久化。容器删除后数据会丢失,所以要用卷来保存重要数据。启动容器时加上 -v 参数,比如 -v /host/data:/container/data,这样宿主机的目录就挂载到容器里了。数据库这类有状态服务一定要配卷。
掌握这些基础操作,你就能把大部分应用容器化了。关键是多动手,找个简单项目写个 Dockerfile 试着部署,遇到问题查日志,慢慢就熟练了。