上文讲到了Docker的核心功能之类的介绍linux vi命令,此次或说详尽的使用技巧。

四、Docker使用方式解读4.1基础命令操作手册
把握Docker的基础命令是使用Docker的第一步。以下是最常用的Docker命令及其使用方式:
镜像管理命令:
搜索镜像:从DockerHub搜索镜像
docker search [OPTIONS] TERM
# 示例:搜索最新的Nginx镜像
docker search nginx:latest
拉取镜像:从DockerHub或私有库房拉取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 示例:拉取Nginx最新版镜像
docker pull nginx:latest
查看本地镜像:列举本地所有镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
# 示例:查看所有镜像
docker images
# 查看特定仓库的镜像
docker images nginx
删掉镜像:删掉指定的镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 示例:删除nginx:latest镜像
docker rmi nginx:latest
# 删除所有未打标签的镜像(虚悬镜像)
docker rmi $(docker images -q -f dangling=true)
建立镜像:从Dockerfile建立镜像
docker build [OPTIONS] PATH | URL | -
# 示例:从当前目录的Dockerfile构建镜像,指定标签为myapp:v1
docker build -t myapp:v1 .
容器管理命令:
运行容器:创建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 示例:运行Nginx容器,映射主机80端口到容器80端口
docker run -d -p 80:80 --name mynginx nginx:latest
查看容器:列举运行中的容器
docker ps [OPTIONS]
# 查看所有容器(包括停止的)
docker ps -a
# 查看最近创建的5个容器
docker ps -n 5
# 查看状态为退出的容器
docker ps -f status=exited
启动/停止/重启容器:
docker start [OPTIONS] CONTAINER [CONTAINER...] # 启动已停止的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] # 优雅停止容器(发送SIGTERM)

docker kill [OPTIONS] CONTAINER [CONTAINER...] # 强制停止容器(发送SIGKILL)
docker restart [OPTIONS] CONTAINER [CONTAINER...] # 重启容器
# 示例:停止名为mynginx的容器
docker stop mynginx
# 停止所有运行中的容器
docker stop $(docker ps -q)
步入容器:步入正在运行的容器
docker exec [OPTIONS] CONTAINER COMMAND
# 示例:进入mynginx容器的bash shell
docker exec -it mynginx bash
删掉容器:删掉容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 示例:删除名为mynginx的容器
docker rm mynginx
# 删除所有已停止的容器
docker rm $(docker ps -a -q)
查看容器日志:
docker logs [OPTIONS] CONTAINER
# 示例:查看mynginx容器的日志,实时输出
docker logs -f mynginx
# 查看最近100行日志
docker logs --tail 100 mynginx
系统管理命令:
查看系统信息:
docker info
清除系统资源:
docker system prune [OPTIONS]
# 清理所有停止的容器、虚悬镜像、无用网络
docker system prune
# 清理所有未使用的镜像(包括中间层)
docker system prune -a
# 清理磁盘空间
docker system prune --volumes
查看资源使用情况:
docker stats [OPTIONS] [CONTAINER...]
# 实时查看所有容器的CPU、内存、网络等资源使用情况
docker stats
4.2Dockerfile编撰实战
Dockerfile是用于建立Docker镜像的文本文件,包含了一系列建立指令。把握Dockerfile的编撰是创建自定义镜像的关键。
Dockerfile基础句型:
常用指令解读:
FROM:指定基础镜像
FROM ubuntu:22.04 # 使用Ubuntu 22.04作为基础镜像
FROM alpine:latest # 使用最新的Alpine Linux作为基础镜像
RUN:执行命令

RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
COPY:从建立上下文复制文件到镜像
COPY requirements.txt . # 将当前目录的requirements.txt复制到镜像根目录
COPY app/ /app/ # 将app目录复制到镜像的/app目录
ADD:类似COPY,但支持URL和压缩文件解压
ADD https://example.com/archive.tar.gz /tmp/
ADD app.tar.gz /app/ # 自动解压tar.gz文件
ENV:设置环境变量
ENV PYTHONUNBUFFERED 1 # 设置Python不缓冲输出
ENV PORT 8080
WORKDIR:设置工作目录
WORKDIR /app # 设置工作目录为/app
EXPOSE:申明容器窃听的端口
EXPOSE 80 # 声明容器监听80端口
EXPOSE 8080/tcp # 明确指定TCP协议
CMD:定义容器启动时执行的命令
CMD ["python", "app.py"] # 推荐的JSON数组格式
CMD python app.py # shell格式
ENTRYPOINT:设置容器的入口点
ENTRYPOINT ["nginx", "-g", "daemon off;"] # 确保容器以Nginx前台进程运行
USER:设置运行容器的用户
USER nobody # 以非root用户运行容器,提高安全性
实战案例:建立PythonFlask应用镜像
假定我们有一个简单的Flask应用,目录结构如下:
myapp/
├── app.py
├── requirements.txt
└── Dockerfile
app.py内容:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
requirements.txt内容:
flask==2.3.3
Dockerfile内容:
# 使用Python 3.9作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY app.py .
# 暴露5000端口
EXPOSE 5000
# 设置环境变量
ENV FLASK_APP app.py
ENV FLASK_ENV production
# 定义容器启动命令
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
建立和运行镜像:
# 构建镜像
docker build -t flask-app:v1 .
# 运行容器
docker run -d -p 5000:5000 flask-app:v1
访问应用:
curl http://localhost:5000
# 输出:Hello, Docker!
多阶段建立优化:
为了减少镜像容积docker dionaea,可以使用多阶段建立:
# 第一阶段:构建阶段
FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip wheel --no-cache-dir -r requirements.txt -w wheels
# 第二阶段:运行阶段
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /app/wheels /wheels
COPY app.py .
RUN pip install --no-deps --no-cache-dir /wheels/*
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
4.3docker-compose多容器编排
DockerCompose是Docker官方提供的多容器编排工具,用于定义和运行多个互相关联的容器。它非常适宜开发、测试和大型生产环境。
docker-compose.yml文件结构:
一个典型的docker-compose.yml文件包含以下几个部份:
version:指定Compose文件格式版本services:定义各个服务(容器)networks:定义网路volumes:定义数据卷
实战案例:WordPress+MySQL布署
我们将使用docker-compose布署一个完整的WordPress站点,包含MySQL数据库和WordPress应用。
创建docker-compose.yml文件:
version: '3.8'
services:
db:
image: mysql:8.0
volumes:

- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
restart: always
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
environment:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
restart: always
volumes:
db_data:
关键配置说明:
services.db:定义MySQL数据库服务services.wordpress:定义WordPress服务volumes.db_data:定义数据卷docker dionaea中国linux操作系统,用于持久化MySQL数据
常用docker-compose命令:
启动服务:
docker-compose up [OPTIONS]
# 后台启动
docker-compose up -d
# 重新构建并启动
docker-compose up --build -d
停止服务:
docker-compose stop # 优雅停止
docker-compose down # 停止并删除容器、网络(默认保留数据卷)
docker-compose down --volumes # 停止并删除所有资源(包括数据卷)
查看状态:
docker-compose ps # 查看所有服务状态

docker-compose logs # 查看服务日志
docker-compose logs -f # 实时查看日志
步入容器:
docker-compose exec wordpress bash # 进入WordPress容器
建立镜像:
docker-compose build # 构建或重新构建服务镜像
多环境配置:
可以使用.env文件来管理环境变量,提升配置的灵活性。创建.env文件:
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
WORDPRESS_DB_HOST=db:3306
更改docker-compose.yml,使用环境变量:
services:
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_PASSWORD}
- WORDPRESS_DB_NAME=${MYSQL_DATABASE}
这样可以轻松切换不同环境的配置(开发、测试、生产)。
下一章会讲具体实战,感兴趣的同学可以关注收藏一下。
#docker#
