本文目录导读:

我来详细讲解如何创建和运行应用容器,这里以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
这些是创建和运行容器的主要方法,根据你的具体需求选择合适的工具和配置即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播