本文目录导读:

我来详细讲解如何创建和运行应用容器,这里以Docker为例,这是最流行的容器工具。
创建运行容器的基本流程
编写 Dockerfile
# 基础镜像 FROM node:18-alpine # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY package*.json ./ # 安装依赖 RUN npm install # 复制源代码 COPY . . # 暴露端口 EXPOSE 3000 # 启动命令 CMD ["npm", "start"]
构建镜像
# 基本构建 docker build -t my-app:1.0 . # 带标签构建 docker build -t my-app:latest . # 使用缓存构建 docker build --cache-from my-app:latest -t my-app:1.0 .
运行容器
# 基本运行 docker run my-app:1.0 # 后台运行 docker run -d my-app:1.0 # 端口映射 docker run -d -p 3000:3000 my-app:1.0 # 命名容器 docker run -d --name my-container -p 3000:3000 my-app:1.0
常用的容器工具
Docker Desktop
安装 Docker Desktop
- Windows/Mac: 从 docker.com 下载
- Linux:
sudo apt-get install docker-ce docker-ce-cli containerd.io
常用命令示例
# 下载镜像 docker pull nginx:latest docker pull mysql:8.0 # 运行 MySQL 容器 docker run -d \ --name mysql8 \ -e MYSQL_ROOT_PASSWORD=root123 \ -e MYSQL_DATABASE=testdb \ -p 3306:3306 \ mysql:8.0 # 运行 Nginx 容器 docker run -d \ --name nginx-web \ -p 80:80 \ -v /path/to/html:/usr/share/nginx/html \ nginx:latest
Docker Compose(多容器应用)
docker-compose.yml 示例
version: '3.8'
services:
# Web 应用
web:
build: .
ports:
- "3000:3000"
environment:
- DB_HOST=mysql
- DB_USER=root
- DB_PASSWORD=root123
depends_on:
- mysql
volumes:
- .:/app
# 数据库
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: testdb
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
# Redis 缓存
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
mysql_data:
启动多容器应用
# 启动所有服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down # 重新构建并启动 docker-compose up -d --build
Podman(Docker的替代方案)
# 安装 Podman # Mac: brew install podman # Linux: dnf install podman / apt install podman # 创建容器 podman run -d --name web-app -p 8080:80 nginx:latest # 构建镜像 podman build -t my-app . # 和 Docker 命令基本一致 podman ps podman images podman stop containername
Containerd(轻量级容器运行时)
# 使用 ctr 命令(containerd 的客户端) ctr images pull docker.io/library/nginx:latest ctr run docker.io/library/nginx:latest nginx-server # 使用 nerdctl(更友好的命令) nerdctl run -d -p 80:80 --name webserver nginx:latest
实战示例:创建完整应用
Python Flask 应用
app.py
from flask import Flask
import os
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Docker Container!"
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
Dockerfile
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . ENV PORT=5000 EXPOSE 5000 CMD ["python", "app.py"]
requirements.txt
flask==2.0.1
构建和运行
# 构建 docker build -t flask-app:1.0 . # 运行 docker run -d \ --name my-flask-app \ -p 5000:5000 \ -e PORT=5000 \ flask-app:1.0 # 测试 curl http://localhost:5000
容器管理命令
生命周期管理
# 查看运行中的容器 docker ps # 查看所有容器(包括停止的) docker ps -a # 停止容器 docker stop container_id # 启动已停止的容器 docker start container_id # 重启容器 docker restart container_id # 删除容器 docker rm container_id # 强制删除运行中的容器 docker rm -f container_id
日志和调试
# 查看日志 docker logs container_id # 实时查看日志 docker logs -f container_id # 进入容器内部 docker exec -it container_id /bin/bash # 查看容器详细信息 docker inspect container_id # 查看资源使用 docker stats
数据持久化
# 创建数据卷 docker volume create mydata # 挂载数据卷 docker run -d \ --name web-app \ -v mydata:/app/data \ -p 3000:3000 \ my-app:1.0 # 挂载本地目录 docker run -d \ -v /host/path:/container/path \ my-app:1.0
最佳实践
容器优化
# 多阶段构建 # 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 运行阶段 FROM nginx:alpine COPY --from=builder /app/build /usr/share/nginx/html EXPOSE 80
安全建议
# 使用非root用户运行 docker run -u 1000:1000 my-app:1.0 # 限制资源 docker run \ --memory="512m" \ --cpus="1.0" \ my-app:1.0 # 只读文件系统 docker run --read-only my-app:1.0
网络配置
# 创建网络 docker network create mynetwork # 在指定网络运行容器 docker run --network mynetwork --name web my-app:1.0 # 连接到已有容器网络 docker run --network container:web nginx:latest
这些是创建和运行容器的主要方法,根据你的具体需求选择合适的工具和配置即可。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。