简介:本文为Docker新手提供一站式入门指南,涵盖核心概念(镜像、容器、仓库)及安装、基础操作、进阶技巧与最佳实践,助力开发者高效管理容器化应用。
在传统开发环境中,开发、测试与生产环境的差异常导致“在我的机器上能运行”的尴尬。Docker通过容器化技术将应用及其依赖(库、配置、环境变量)打包为独立、轻量的运行环境,实现“一次构建,处处运行”。其核心优势包括:
镜像是一个只读模板,包含运行应用所需的一切:代码、运行时、依赖、环境变量等。例如,一个Nginx镜像包含Nginx二进制文件、配置文件及默认网页。
# 拉取官方Nginx镜像docker pull nginx:latest# 查看本地镜像列表docker images# 删除镜像docker rmi nginx:latest
容器是镜像的可运行副本,通过镜像启动后成为一个独立的进程环境。每个容器拥有独立的文件系统、网络空间和进程树。
# 基于Nginx镜像启动容器(端口映射:主机80→容器80)docker run -d -p 80:80 --name my-nginx nginx:latest# 查看运行中的容器docker ps# 进入容器内部(交互式终端)docker exec -it my-nginx /bin/bash# 停止并删除容器docker stop my-nginx && docker rm my-nginx
仓库是集中存储和分发镜像的服务,类似GitHub。Docker Hub是官方默认仓库,也可自建私有仓库(如Harbor)。
# 登录Docker Hub(需提前注册账号)docker login# 标记本地镜像为可推送格式docker tag my-app:v1 username/my-app:v1# 推送镜像到仓库docker push username/my-app:v1# 从仓库拉取镜像docker pull username/my-app:v1
# 卸载旧版本(如有)sudo apt-get remove docker docker-engine docker.io containerd runc# 安装依赖sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common# 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加稳定版仓库sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 安装Docker引擎sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装sudo docker run hello-world
编辑/etc/docker/daemon.json(Linux)或Docker Desktop设置(Windows/macOS),添加国内镜像源:
{"registry-mirrors": ["https://registry.docker-cn.com","https://mirror.baidubce.com"]}
重启Docker服务生效。
Dockerfile是文本文件,定义镜像构建步骤。示例:构建一个Python Flask应用镜像。
# 基于官方Python镜像FROM python:3.9-slim# 设置工作目录WORKDIR /app# 复制依赖文件并安装COPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt# 复制应用代码COPY . .# 暴露端口EXPOSE 5000# 启动命令CMD ["python", "app.py"]
构建镜像:
docker build -t my-flask-app:v1 .
容器内文件默认随容器删除而丢失。使用卷可将数据存储在主机或网络存储中。
# 创建命名卷docker volume create my-vol# 启动容器并挂载卷docker run -d -p 5000:5000 --name my-app -v my-vol:/app/data my-flask-app:v1
Docker默认提供三种网络模式:
自定义网络示例:
# 创建自定义网络docker network create my-net# 启动容器并加入网络docker run -d --name db --network my-net mysql:5.7docker run -d --name app --network my-net -e DB_HOST=db my-flask-app:v1
latest标签,明确指定版本(如nginx:1.23)。
# 构建阶段FROM golang:1.19 AS builderWORKDIR /appCOPY . .RUN go build -o myapp .# 运行阶段FROM alpine:3.16COPY --from=builder /app/myapp /usr/local/bin/CMD ["myapp"]
--memory和--cpus限制容器资源。
docker run -d --memory="512m" --cpus="1.5" my-app:v1
# 使用json-file日志驱动并限制大小docker run -d --log-driver=json-file --log-opt max-size=10m my-app:v1
Docker通过镜像、容器与仓库的组合,为开发者提供了高效、一致的容器化解决方案。从基础操作到进阶技巧,掌握这些核心概念后,可进一步探索Docker Compose(多容器编排)、Kubernetes(集群管理)等高级工具。未来,随着云原生技术的普及,Docker将成为开发者必备技能之一。
行动建议:
hello-world验证环境。