一、docker的常用命令
bash
# 以拉取mysql为例
sudo docker pull [仓库地址/命名空间/]mysql[:版本号]
#
sudo docker run -d --name my_mysql -p 3306:3306 -v mysql_data:data mysql
# -d 后台运行
# -p 端口映射 宿主机:容器
# -v 挂载卷 宿主机目录:容器内目录
# --name 容器名称(唯一)
# -e 容器环境变量
sudo docker run -it --rm alpine
# -it 命令行直接进入到容器内部
# --rm 命令行退出,直接删除容器
# --restart always内部原因停止启动 unless-stopeed手动停止不再启动
# --network network_name 相同子网可以通过服务名称(docker会解析为ip)来访问
# 进入到容器内部
sudo docker exec -it ID /bin/bash
# 删除镜像
sudo docker rmi ID
# 删除容器
sudo docker rm -f ID
# -f:强制删除运行中的容器
sudo docker container prune -f
# 删除所有Exited状态的容器
# 查看所有容器列表
sudo docker ps -a
# 停止/启动/重启容器
sudo docker stop ID
sudo docker start ID
sudo docker restart ID
# 查看容器运行参数(挂载卷/端口映射)
sudo docker inspect ID
# 创建挂载卷mysql_data
sudo docker volume create mysql_data
# 查看挂载卷目录
sudo docker volume inspect mysql_data
# 查看创建的挂载卷
sudo docker volume list
# 删除挂载卷
sudo docker volume rm mysql_data
# 删除没有容器使用的挂载卷
# sudo docker volume prune -a
# 创建⼀个新的⽹络
docker network create [network]
# 删除⼀个⽹络
docker network rm [network]
# 列出可⽤⽹络
docker network ls
二、镜像打包推送
bash
# 推送到远程仓库(阿里云)
# 1. 登录阿里云
docker login --username=你的阿里云账号 registry.cn-hangzhou.aliyuncs.com
docker login --username=aliyun8255908013 crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com
# 2. 给镜像打标签
docker tag 本地镜像名:版本号 registry.cn-hangzhou.aliyuncs.com/你的命名空间/你的仓库名:版本号
docker tag [ImageId] crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com/lumingxin05/dev:[镜像版本号]
docker tag my-redis:1.0 crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com/lumingxin05/dev:1.0
# 3. 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/你的命名空间/你的仓库名:版本号
docker push crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com/lumingxin05/dev:[镜像版本号]
docker push crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com/lumingxin05/dev:1.0
# 拉取镜像
docker pull crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com/lumingxin05/dev:[镜像版本号]
docker pull crpi-d4kav2noux69n9lq.cn-hangzhou.personal.cr.aliyuncs.com/lumingxin05/dev:1.0
三、Dockerfile的用法
Dockerfile是一个文本文件 = 定制 Docker 镜像的说明书。
1.创建Dockerfile文件
bash
touch Dockerfile
2.写入内容
bash
# 1. 基础镜像:基于官方 redis
FROM redis:7.0
# 2. 自定义:给镜像加个标签(可选)
LABEL author="my-redis"
# 3. 容器启动命令(和你之前run一样)
CMD ["redis-server", "--appendonly yes", "--requirepass 123456"]
3.用 Dockerfile 构建镜像
bash
docker build -t my-redis:1.0 .
# my-redis:1.0:你自己的镜像名字
# .:Dockerfile 在当前目录
- 用你自己构建的镜像运行容器
bash
docker run -d --name my-redis-container -p 6399:6379 my-redis:1.0
四.docker-compose.yml
1.对照图:

2.docker-compose.yml的写法:
1.基本骨架:
bash
# compose.yml 无需写 version 字段(v2+ 已弃用 version 声明)
services: # 核心区:定义每一个容器服务
mysql:
...
redis:
...
volumes: # 可选:命名卷(持久化数据)
mysql_data:
redis_data:
networks: # 可选:自定义网络
backend:
driver: bridge
2.服务通用字段:
bash
# 1. image ------ 基础镜像
# 2. container_name ------ 自定义容器名
# 3. ports ------ 端口映射
# 4. volumes ------ 挂载
# 5. environment ------ 环境变量
# 6. healthcheck ------ 健康检测
# 7. restart ------ 重启策略
# 8. networks ------ 加入自定义网络
###################################################
# 自定义网络:服务间用服务名互访
networks:
backend:
driver: bridge
# 服务
services:
mysql:
image: mysql:8.0.40
container_name: mysql-service
restart: unless-stopped
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- mysql_data:/var/lib/mysql # 数据持久化(命名卷)
- ./mysql/my.cnf:/etc/my.cnf:ro # 配置文件(只读)
- ./mysql/sql.d:/docker-entrypoint-initdb.d:ro # 初始化脚本
- /etc/localtime:/etc/localtime:ro
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p123456"]
start_period: 30s
interval: 10s
timeout: 5s
retries: 10
networks:
- backend
redis:
image: redis:7.4.1
container_name: redis-service
restart: unless-stopped
command: redis-server /usr/local/etc/redis/redis.conf --requirepass 123456
volumes:
- redis_data:/data # 数据持久化
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "-a", "123456", "--no-auth-warning", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- backend
# 命名卷:docker 管理,数据不会丢
volumes:
mysql_data:
redis_data:
3.常用命令:
1.生命周期管理:
bash
docker compose up -d [] 后台启动所有服务(不存在的镜像会自动 pull,不存在的容器会自动创建)
docker compose stop 停止所有容器,不删除(相当于"暂停")
docker compose start 启动已存在但停止的容器
docker compose restart [] 重启所有服务
docker compose restart mysql 只重启某个服务
docker compose down 停止并删除容器 + 网络,保留命名卷(数据不丢)
docker compose down -v 停止并删除容器 + 网络 + 命名卷(数据会丢!)
docker compose down --rmi all down的同时删除所有用到的镜像
2.查看状态
bash
docker compose ps 列出所有服务的状态、端口
docker compose logs [name] 看所有服务日志
docker compose top 看每个服务容器里的进程列表