Docker之基础命令
1. 镜像管理
基础操作
docker pull <镜像名:标签> # 拉取镜像(如 `docker pull nginx:latest`)
docker search <关键词> # 搜索镜像
docker images # 查看本地镜像
docker rmi <镜像ID或名称> # 删除镜像
docker rmi $(docker images -q) # 删除所有镜像(谨慎!)
镜像构建与导出
# 通过 Dockerfile 构建镜像
docker build -t <镜像名:标签> <上下文路径> # 如 `docker build -t myapp:v1 .`
# 将容器打包为新镜像
docker commit <容器ID> <新镜像名:标签> # 如 `docker commit abc123 myapp:v2`
# 导出镜像为 tar 文件
docker save -o xxx.tar <镜像名:标签> # 或 `docker save myapp:v1 > myapp.tar`
# 从 tar 文件加载镜像
docker load -i xxx.tar # 或 `docker load < myapp.tar`
2. 容器管理
基础操作
# 启动容器(常用选项)
docker run [选项] <镜像名>
# -d: 后台运行
# -p: 端口映射(主机端口:容器端口)
# -v: 数据卷挂载(主机路径:容器路径)
# --name: 指定容器名称
# --rm: 容器退出后自动删除(测试常用)
# -e: 设置环境变量
# --restart: 重启策略(如 `--restart unless-stopped`)
# 示例:启动 MySQL 并持久化数据
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql:/var/lib/mysql \
-p 3306:3306 \
--restart unless-stopped \
mysql:latest
# 查看容器
docker ps # 运行中的容器
docker ps -a # 所有容器(含已停止)
docker stats # 实时资源占用
# 容器生命周期
docker start/stop/restart <容器ID或名称>
docker rm -f <容器ID> # 强制删除运行中的容器
docker rm $(docker ps -aq) # 删除所有容器(谨慎!)
进入容器与操作
# 进入容器交互终端
docker exec -it <容器ID> /bin/bash # 或 `/bin/sh`
# 从容器复制文件到宿主机
docker cp <容器ID>:<容器路径> <宿主机路径>
# 查看容器日志
docker logs -f <容器ID> # 实时跟踪日志
3. 网络与数据卷
网络管理
docker network ls # 查看网络列表
docker network create --subnet=172.18.0.0/16 mynet # 创建自定义网络
docker run --net mynet --ip 172.18.0.2 ... # 指定容器IP
数据卷管理
docker volume create <卷名> # 创建数据卷
docker volume inspect <卷名> # 查看卷详情
docker run -v <卷名或主机路径>:<容器路径> ... # 挂载数据卷
4. 高级功能
容器自启动与重启策略
# 启动时设置重启策略(推荐 `unless-stopped`)
docker run -d --restart unless-stopped nginx
# 更新已有容器的重启策略
docker update --restart unless-stopped <容器ID>
时区与宿主机映射
# 容器时区设置为宿主机时区(如 Asia/Shanghai)
docker run -e TZ=Asia/Shanghai -v /etc/localtime:/etc/localtime:ro ...
# 映射宿主机命令(如使用宿主机的 `docker` 命令)
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
镜像推送与标签管理
# 登录镜像仓库(如网易云)
docker login -u <用户名> -p <密码> hub.c.163.com
# 打标签并推送镜像
docker tag <本地镜像ID> hub.c.163.com/yourname/repo:tag
docker push hub.c.163.com/yourname/repo:tag
5. 实战示例
RabbitMQ 与 Redis
# RabbitMQ(带管理界面)
docker run -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
--restart unless-stopped \
rabbitmq:3.7.5-management
# Redis
docker run -d --name redis \
-p 6379:6379 \
--restart unless-stopped \
redis
Spring Boot 应用
# Dockerfile 示例
FROM openjdk:8-jdk-alpine
ADD target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建并运行:
docker build -t myapp .
docker run -d -p 8080:8080 --restart unless-stopped myapp
6. 系统维护
# 清理无用资源
docker system prune # 清理临时文件
docker system prune -a # 清理所有未使用镜像
# 查看容器IP
docker inspect -f '{{.NetworkSettings.IPAddress}}' <容器ID>
# 批量操作
docker stop $(docker ps -aq) # 停止所有容器
docker rm $(docker ps -aq) # 删除所有容器