Docker的使用

一、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 在当前目录
  1. 用你自己构建的镜像运行容器
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	看每个服务容器里的进程列表
相关推荐
张洛闻Eren1 小时前
云原生k8s【第五课】:资源配额与限制
运维·数据库·云原生·kubernetes·k8s·github
.柒宇.1 小时前
运维常见面试题_07_配置管理与监控(Ansible · Prometheus · Alertmanager)· 容器编排(Kubernetes)
运维·k8s·ansible·prometheus
瀚高PG实验室1 小时前
PostgreSQL 服务器因整数回绕导致分配空间过小HGVE-2026-E008
运维·服务器·数据库·瀚高数据库
程序员无隅1 小时前
远程控制补上了 Agent 的最后一公里:WorkBuddy 的多端协同体验
运维·服务器
相顾若初见1 小时前
Ansible部署k8s
容器·kubernetes·ansible
mwmbfh1 小时前
【CentOS7环境下Redis 6.2.14 源码编译部署说明】
linux·运维·数据库·redis
做一个AK梦1 小时前
DevOps
运维·devops
hzxpaipai1 小时前
杭州网站运维|企业官网上线前技术检查清单:SEO、GEO、安全、服务器与备份
运维·服务器·nginx·安全
优化Henry1 小时前
关于“星链”互联网系统的几点认识
运维·服务器·网络·笔记·学习·信息与通信