Docker常用操作
目录
文章目录
- Docker常用操作
-
- 目录
- Docker容器管理
- Docker镜像管理
- Docker网络与数据管理
- [Docker Compose操作](#Docker Compose操作)
- 高级使用技巧与调试
- 实际项目案例
-
- [示例项目:搭建一个 Flask + MySQL 应用](#示例项目:搭建一个 Flask + MySQL 应用)
- AI创作声明
Docker容器管理
Docker 容器是 Docker 的核心,它将应用及其所有依赖包打包到一个标准化的单元中,能够在任何地方快速运行。在本节中,我们将介绍如何管理容器。
创建并启动容器
-
使用
docker run命令启动一个新的容器,并指定镜像。这里我们以启动一个 Ubuntu 容器为例:bashdocker run -it ubuntu bash
这会拉取 Ubuntu 镜像并启动一个容器,进入到容器内的 bash 命令行环境。
查看运行中的容器
要查看当前运行的容器,可以使用:
bash
docker ps
该命令会列出所有正在运行的容器及其相关信息,如容器ID、镜像名称、运行时间等。
停止容器
停止运行中的容器,使用:
bash
docker stop <容器ID或容器名称>
错误示例
如果尝试启动一个不存在的镜像,会出现如下错误:
bash
docker run -it nonexistent_image bash
错误提示:Unable to find image 'nonexistent_image' locally。
调试技巧:在启动之前,使用 docker images 命令查看是否存在该镜像,或者使用 docker pull <镜像名> 拉取镜像。
Docker镜像管理
镜像是容器的基础,Docker 镜像包含了操作系统、软件包、应用程序等必要的文件和配置。
拉取镜像
使用 docker pull 命令从 Docker Hub 下载镜像:
bash
docker pull nginx
查看本地镜像
列出本地所有的 Docker 镜像:
bash
docker images
删除镜像
如果不再需要某个镜像,可以使用 docker rmi 删除:
bash
docker rmi <镜像ID或镜像名称>
错误示例
如果删除正在使用的镜像,Docker 会报错:
bash
docker rmi nginx
错误提示:Error response from daemon: conflict: unable to delete...。
调试技巧:使用 docker ps -a 查看是否有正在使用该镜像的容器,停止或删除容器后再删除镜像。
Docker网络与数据管理
Docker 提供了多种方式来配置容器的网络和数据存储。你可以使用不同类型的网络和挂载数据卷来提升容器之间的通信和数据持久化。
创建自定义网络
使用以下命令创建一个自定义的 Docker 网络:
bash
docker network create my_network
启动容器并连接到网络
将容器连接到自定义网络:
bash
docker run --network my_network -it ubuntu bash
使用数据卷存储数据
Docker 数据卷(Volumes)用于持久化容器的数据。创建并挂载一个数据卷:
bash
docker volume create my_volume
docker run -it -v my_volume:/data ubuntu
错误示例
尝试将容器连接到不存在的网络时,会报错:
bash
docker run --network nonexistent_network -it ubuntu bash
错误提示:network nonexistent_network not found。
调试技巧:使用 docker network ls 查看当前 Docker 环境中的网络,确保网络名称正确。
Docker Compose操作
Docker Compose 是一种用于定义和运行多容器 Docker 应用的工具。它允许用户通过配置文件管理多个容器的生命周期。
创建 docker-compose.yml 文件
在项目根目录下创建一个 docker-compose.yml 文件,定义多个服务:
yaml
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
启动服务
使用以下命令启动 Compose 定义的所有服务:
bash
docker-compose up
停止服务
使用以下命令停止所有运行中的服务:
bash
docker-compose down
错误示例
如果 docker-compose.yml 文件存在格式错误,启动时会报错:
bash
docker-compose up
错误提示:ERROR: yaml.parser.ParserError: while parsing a block collection。
调试技巧:检查 docker-compose.yml 文件的格式,使用在线 YAML 校验工具检查是否有语法错误。
高级使用技巧与调试
优化镜像大小
构建镜像时,可以使用多阶段构建(multi-stage build)来优化镜像的体积。例如,先在一个临时的镜像中安装构建工具,然后将最终应用复制到一个轻量级镜像中:
dockerfile
# 第一阶段:构建阶段
FROM node:14 AS builder
WORKDIR /app
COPY . .
RUN npm install
# 第二阶段:运行阶段
FROM node:14-slim
WORKDIR /app
COPY --from=builder /app .
CMD ["node", "app.js"]
使用 Docker 容器日志进行调试
查看容器的标准输出和错误信息:
bash
docker logs <容器ID或容器名称>
错误示例
如果容器因为某个原因退出,可以使用以下命令查看容器的日志信息:
bash
docker logs <退出容器ID>
错误提示:No such container。
调试技巧:确保容器ID正确,或者使用 docker ps -a 查看所有容器的状态。
实际项目案例
示例项目:搭建一个 Flask + MySQL 应用
-
创建项目目录结构:
plaintextmy_flask_app/ ├── app.py ├── Dockerfile ├── requirements.txt └── docker-compose.yml -
编写
app.py:pythonfrom flask import Flask import mysql.connector app = Flask(__name__) @app.route('/') def hello_world(): db = mysql.connector.connect(host="mysql", user="root", password="example", database="test") cursor = db.cursor() cursor.execute("SELECT * FROM users") result = cursor.fetchall() return f"Users: {result}" if __name__ == '__main__': app.run(host='0.0.0.0') -
编写
Dockerfile:dockerfileFROM python:3.8-slim COPY requirements.txt /app/ WORKDIR /app RUN pip install -r requirements.txt COPY . /app CMD ["python", "app.py"] -
编写
docker-compose.yml:yamlversion: '3' services: web: build: . ports: - "5000:5000" mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: test -
启动服务:
bashdocker-compose up --build -
访问应用 :在浏览器中访问
http://localhost:5000。
AI创作声明
本文部分内容由 AI 辅助生成,并经人工整理与验证,仅供参考学习,欢迎指出错误与不足之处。