docker-container-basics
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDocker Container Basics
Docker容器基础
Comprehensive guide to containerization with Docker, from image fundamentals to production deployments.
全面介绍Docker容器化的指南,涵盖从镜像基础到生产环境部署的所有内容。
When to Use
适用场景
- Building and running Docker containers
- Understanding Docker networking and volumes
- Debugging container issues
- Resource management and limits
- Container security best practices
- Multi-stage builds for optimization
- Registry operations (push/pull/login)
- Debugging container runtime issues
- 构建并运行Docker容器
- 理解Docker网络与卷
- 调试容器问题
- 资源管理与限制
- 容器安全最佳实践
- 多阶段构建优化
- 镜像仓库操作(推送/拉取/登录)
- 调试容器运行时问题
Core Concepts
核心概念
Container Lifecycle
容器生命周期
bash
undefinedbash
undefinedBuild image
Build image
docker build -t myapp:latest .
docker build -t myapp:latest .
Run container (foreground)
Run container (foreground)
docker run --rm -it myapp:latest
docker run --rm -it myapp:latest
Run container (background)
Run container (background)
docker run -d --name my-container myapp:latest
docker run -d --name my-container myapp:latest
View logs
View logs
docker logs -f my-container
docker logs -f my-container
Stop/start container
Stop/start container
docker stop my-container
docker start my-container
docker stop my-container
docker start my-container
Remove container
Remove container
docker rm my-container
docker rm my-container
View processes
View processes
docker ps -a
undefineddocker ps -a
undefinedImage Management
镜像管理
bash
undefinedbash
undefinedList images
List images
docker images
docker images
Tag image
Tag image
docker tag myapp:latest myapp:v1.0.0
docker tag myapp:latest myapp:v1.0.0
Remove image
Remove image
docker rmi myapp:latest
docker rmi myapp:latest
Inspect image
Inspect image
docker inspect myapp:latest
docker inspect myapp:latest
View image layers
View image layers
docker history myapp:latest
undefineddocker history myapp:latest
undefinedDockerfile Best Practices
Dockerfile最佳实践
Structure
结构
dockerfile
undefineddockerfile
undefinedUse specific version tags (NOT latest)
Use specific version tags (NOT latest)
FROM node:20.11-alpine
FROM node:20.11-alpine
Set working directory
Set working directory
WORKDIR /app
WORKDIR /app
Copy package files
Copy package files
COPY package*.json ./
COPY package*.json ./
Install dependencies
Install dependencies
RUN npm ci --only=production
RUN npm ci --only=production
Copy application code
Copy application code
COPY . .
COPY . .
Expose port (documentation only)
Expose port (documentation only)
EXPOSE 3000
EXPOSE 3000
Health check
Health check
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3
CMD node healthcheck.js
CMD node healthcheck.js
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3
CMD node healthcheck.js
CMD node healthcheck.js
Run application
Run application
CMD ["node", "server.js"]
undefinedCMD ["node", "server.js"]
undefinedMulti-Stage Builds
多阶段构建
dockerfile
undefineddockerfile
undefinedBuild stage
Build stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
Production stage
Production stage
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]
undefinedFROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]
undefinedOptimization
优化建议
- Use to exclude unnecessary files
.dockerignore - Minimize layer count (combine RUN commands with )
&& - Order commands by change frequency (stable → frequently changing)
- Use specific base image versions (not )
latest - Leverage layer caching for faster builds
- 使用排除不必要的文件
.dockerignore - 减少镜像层数(使用合并RUN命令)
&& - 按变更频率排序命令(稳定部分→频繁变更部分)
- 使用特定版本的基础镜像(而非)
latest - 利用镜像层缓存加速构建
Networking
网络配置
Network Types
网络类型
bash
undefinedbash
undefinedList networks
List networks
docker network ls
docker network ls
Create custom bridge network
Create custom bridge network
docker network create myapp-net
docker network create myapp-net
Run container on network
Run container on network
docker run -d --network myapp-net --name db postgres:15
docker run -d --network myapp-net --name api myapp:latest
docker run -d --network myapp-net --name db postgres:15
docker run -d --network myapp-net --name api myapp:latest
Container DNS resolution
Container DNS resolution
Services on same network can reach each other by container name
Services on same network can reach each other by container name
undefinedundefinedPort Mapping
端口映射
bash
undefinedbash
undefinedMap single port
Map single port
docker run -p 8080:3000 myapp:latest
docker run -p 8080:3000 myapp:latest
Map multiple ports
Map multiple ports
docker run -p 8080:3000 -p 8443:3000 myapp:latest
docker run -p 8080:3000 -p 8443:3000 myapp:latest
Map to random port
Map to random port
docker run -p 3000 myapp:latest
docker run -p 3000 myapp:latest
View port mappings
View port mappings
docker port my-container
undefineddocker port my-container
undefinedVolumes and Mounts
卷与挂载
Named Volumes
命名卷
bash
undefinedbash
undefinedCreate volume
Create volume
docker volume create mydata
docker volume create mydata
Run container with volume
Run container with volume
docker run -v mydata:/app/data myapp:latest
docker run -v mydata:/app/data myapp:latest
View volume details
View volume details
docker volume inspect mydata
docker volume inspect mydata
Clean up unused volumes
Clean up unused volumes
docker volume prune
undefineddocker volume prune
undefinedBind Mounts
绑定挂载
bash
undefinedbash
undefinedMount host directory into container
Mount host directory into container
docker run -v /host/path:/container/path myapp:latest
docker run -v /host/path:/container/path myapp:latest
Read-only mount
Read-only mount
docker run -v /host/path:/container/path:ro myapp:latest
undefineddocker run -v /host/path:/container/path:ro myapp:latest
undefinedTmpfs Mounts
Tmpfs挂载
bash
undefinedbash
undefinedMount temporary filesystem (memory-backed)
Mount temporary filesystem (memory-backed)
docker run --tmpfs /tmp:rw,size=1gb myapp:latest
undefineddocker run --tmpfs /tmp:rw,size=1gb myapp:latest
undefinedResource Limits
资源限制
Memory and CPU
内存与CPU
bash
undefinedbash
undefinedLimit memory
Limit memory
docker run -m 512m myapp:latest
docker run -m 512m myapp:latest
Limit CPU (1.0 = 1 core, 0.5 = half core)
Limit CPU (1.0 = 1 core, 0.5 = half core)
docker run --cpus 1.0 myapp:latest
docker run --cpus 1.0 myapp:latest
Memory swap limit
Memory swap limit
docker run -m 512m --memory-swap 1g myapp:latest
docker run -m 512m --memory-swap 1g myapp:latest
CPU shares (relative priority)
CPU shares (relative priority)
docker run --cpu-shares 1024 myapp:latest
undefineddocker run --cpu-shares 1024 myapp:latest
undefinedViewing Resource Usage
查看资源使用情况
bash
undefinedbash
undefinedMonitor container resources
Monitor container resources
docker stats
docker stats
Specific container
Specific container
docker stats my-container
undefineddocker stats my-container
undefinedContainer Debugging
容器调试
Execute Commands
执行命令
bash
undefinedbash
undefinedExecute command in running container
Execute command in running container
docker exec -it my-container /bin/sh
docker exec -it my-container /bin/sh
Run one-off command
Run one-off command
docker exec my-container npm test
undefineddocker exec my-container npm test
undefinedInspect Container
检查容器信息
bash
undefinedbash
undefinedView detailed container info
View detailed container info
docker inspect my-container
docker inspect my-container
View environment variables
View environment variables
docker inspect my-container | grep -A 20 "Env"
docker inspect my-container | grep -A 20 "Env"
View mounted volumes
View mounted volumes
docker inspect my-container | grep -A 10 "Mounts"
undefineddocker inspect my-container | grep -A 10 "Mounts"
undefinedView Logs
查看日志
bash
undefinedbash
undefinedTail logs
Tail logs
docker logs -f my-container
docker logs -f my-container
Last 100 lines
Last 100 lines
docker logs --tail 100 my-container
docker logs --tail 100 my-container
With timestamps
With timestamps
docker logs -t my-container
docker logs -t my-container
Since specific time
Since specific time
docker logs --since 2025-01-15T10:00:00 my-container
undefineddocker logs --since 2025-01-15T10:00:00 my-container
undefinedSecurity Best Practices
安全最佳实践
Non-Root User
非root用户运行
dockerfile
undefineddockerfile
undefinedCreate non-root user
Create non-root user
RUN groupadd -r appuser && useradd -r -g appuser appuser
RUN groupadd -r appuser && useradd -r -g appuser appuser
Use non-root user
Use non-root user
USER appuser
undefinedUSER appuser
undefinedRead-Only Filesystem
只读文件系统
bash
docker run --read-only -v /tmp:/tmp myapp:latestbash
docker run --read-only -v /tmp:/tmp myapp:latestCapability Dropping
权限缩减
bash
undefinedbash
undefinedDrop unnecessary capabilities
Drop unnecessary capabilities
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp:latest
undefineddocker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp:latest
undefinedSecurity Scanning
安全扫描
bash
undefinedbash
undefinedScan image for vulnerabilities
Scan image for vulnerabilities
docker scan myapp:latest
docker scan myapp:latest
Build with BuildKit (enables better layer caching and features)
Build with BuildKit (enables better layer caching and features)
DOCKER_BUILDKIT=1 docker build .
undefinedDOCKER_BUILDKIT=1 docker build .
undefinedRegistry Operations
镜像仓库操作
Docker Hub
Docker Hub
bash
undefinedbash
undefinedLogin
Login
docker login
docker login
Tag for registry
Tag for registry
docker tag myapp:latest username/myapp:latest
docker tag myapp:latest username/myapp:latest
Push image
Push image
docker push username/myapp:latest
docker push username/myapp:latest
Pull image
Pull image
docker pull username/myapp:latest
docker pull username/myapp:latest
Logout
Logout
docker logout
undefineddocker logout
undefinedPrivate Registry
私有镜像仓库
bash
undefinedbash
undefinedLogin to private registry
Login to private registry
docker login registry.example.com
docker login registry.example.com
Tag for private registry
Tag for private registry
docker tag myapp:latest registry.example.com/myapp:latest
docker tag myapp:latest registry.example.com/myapp:latest
Push to private registry
Push to private registry
docker push registry.example.com/myapp:latest
undefineddocker push registry.example.com/myapp:latest
undefinedTroubleshooting
故障排查
Container Won't Start
容器无法启动
bash
undefinedbash
undefinedCheck exit code and error logs
Check exit code and error logs
docker logs my-container
docker logs my-container
View container events
View container events
docker events --filter "container=my-container"
docker events --filter "container=my-container"
Inspect container config
Inspect container config
docker inspect my-container | grep -A 20 "State"
undefineddocker inspect my-container | grep -A 20 "State"
undefinedHigh Resource Usage
资源占用过高
bash
undefinedbash
undefinedMonitor in real-time
Monitor in real-time
docker stats
docker stats
Identify processes consuming resources
Identify processes consuming resources
docker top my-container
undefineddocker top my-container
undefinedNetwork Issues
网络问题
bash
undefinedbash
undefinedTest DNS resolution
Test DNS resolution
docker exec my-container nslookup db
docker exec my-container nslookup db
Test connectivity
Test connectivity
docker exec my-container curl http://db:5432
docker exec my-container curl http://db:5432
View network settings
View network settings
docker network inspect myapp-net
undefineddocker network inspect myapp-net
undefinedProduction Patterns
生产环境模式
Health Checks
健康检查
dockerfile
HEALTHCHECK \
CMD curl -f http://localhost:3000/health || exit 1dockerfile
HEALTHCHECK \
CMD curl -f http://localhost:3000/health || exit 1Signal Handling
信号处理
bash
undefinedbash
undefinedApplications should handle SIGTERM gracefully
Applications should handle SIGTERM gracefully
Docker gives 10 seconds (default) before SIGKILL
Docker gives 10 seconds (default) before SIGKILL
docker stop --time 30 my-container
undefineddocker stop --time 30 my-container
undefinedGraceful Shutdown
优雅关闭
bash
undefinedbash
undefinedWait for container to stop (with timeout)
Wait for container to stop (with timeout)
docker stop -t 30 my-container
docker stop -t 30 my-container
Verify container stopped
Verify container stopped
docker wait my-container
echo $? # Exit code
undefineddocker wait my-container
echo $? # Exit code
undefinedCommon Patterns
常见模式
Development Container
开发容器
bash
docker run -it \
-v $(pwd):/app \
-p 3000:3000 \
-e NODE_ENV=development \
myapp:devbash
docker run -it \
-v $(pwd):/app \
-p 3000:3000 \
-e NODE_ENV=development \
myapp:devProduction Container
生产容器
bash
docker run -d \
--name myapp \
--restart unless-stopped \
-m 1g \
--cpus 2 \
-p 3000:3000 \
-e NODE_ENV=production \
--health-cmd="curl -f http://localhost:3000/health" \
--health-interval=30s \
myapp:latestbash
docker run -d \
--name myapp \
--restart unless-stopped \
-m 1g \
--cpus 2 \
-p 3000:3000 \
-e NODE_ENV=production \
--health-cmd="curl -f http://localhost:3000/health" \
--health-interval=30s \
myapp:latestSidecar Pattern
边车模式
bash
undefinedbash
undefinedMain application
Main application
docker run -d --name app myapp:latest
docker run -d --name app myapp:latest
Sidecar (logging, monitoring, etc)
Sidecar (logging, monitoring, etc)
docker run -d --network container:app --volumes-from app logging-agent:latest
undefineddocker run -d --network container:app --volumes-from app logging-agent:latest
undefinedReferences
参考资料
- Docker documentation: https://docs.docker.com/
- Best practices: https://docs.docker.com/develop/dev-best-practices/
- Security: https://docs.docker.com/engine/security/