docker 基本使用

docker下载镜像

docker.xuanyuan.run 当前国内比较稳的镜像,要花钱
阿里云,腾讯云只有相关厂商服务器才能访问

# 拉取镜像
docker pull docker.xuanyuan.run/library/centos:centos8

# image重命名为 centos:centos8
docker tag docker.xuanyuan.run/library/centos:centos8 centos:centos8

启动

docker run -dit --name centos centos:centos8

#-d 后台运行
#-it 以交互终端运行容器
# -t 

进入容器

docker exec -it centos /bin/bash

docker run 命令说明

分类 参数 全称 说明 实用示例 备注
基础运行 -d detached 后台运行容器(守护进程模式) docker run -d nginx 不占用当前终端,常用
基础运行 --name 给容器指定自定义名称(唯一) docker run -d --name my-nginx nginx 避免随机命名,方便管理
基础运行 -it -i (交互模式)+ -t(分配伪终端),组合使用 docker run -it ubuntu /bin/bash 进入容器交互,exit 退出容器
基础运行 --rm 容器停止后自动删除(临时测试专用) docker run --rm -it alpine sh 避免残留无用容器
基础运行 -e env 设置容器内环境变量(可多次使用) docker run -d -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql 多环境变量用多个 -e
基础运行 --restart 容器退出后的重启策略 docker run -d --restart always nginx 常用值:always/on-failure/unless-stopped
网络配置 -p publish 端口映射:主机端口:容器端口 docker run -d -p 8080:80 -p 8443:443 nginx 可映射多个端口
网络配置 -P 随机映射容器暴露的所有端口到主机随机端口 docker run -d -P nginx 少用,仅测试场景
网络配置 --network 指定容器所属网络(默认 bridge) docker run -d --network my-custom-net nginx 自定义网络需提前创建:docker network create
网络配置 -h hostname 设置容器主机名 docker run -it -h my-container ubuntu bash 容器内执行 hostname 可验证
数据持久化 -v volume 数据卷挂载:主机路径:容器路径 [: 权限] docker run -d -v /host/nginx/conf:/etc/nginx/conf.d:ro nginx ro 表示只读挂载
数据持久化 -v(匿名卷) 仅指定容器路径,Docker 自动创建匿名卷 docker run -d -v /var/lib/mysql mysql 数据保存在 Docker 内置卷中
数据持久化 --mount 更规范的挂载方式(功能同 -v,语法更清晰) docker run -d --mount type=bind,source=/host/conf,target=/etc/nginx/conf.d nginx 生产环境推荐
资源限制 -m /--memory 限制容器最大内存(单位:b/k/m/g) docker run -d -m 1g nginx 超出限制容器会被 OOM 终止
资源限制 --cpus 限制容器使用的 CPU 核心数(支持小数) docker run -d --cpus 2 mysql --cpus 0.5 表示占用半核
资源限制 --cpu-shares CPU 权重(相对值,仅 CPU 紧张时生效) docker run -d --cpu-shares 1024 nginx 默认值 1024,值越高优先级越高
权限 / 用户 --user/-u 指定容器运行的用户(ID / 用户名) docker run -it --user 1000 ubuntu bash 避免 root 权限风险
权限 / 用户 --privileged 赋予容器宿主机的 root 权限(慎用) docker run -d --privileged nginx 突破容器隔离,仅特殊场景使用
日志 / 输出 --log-driver 指定容器日志驱动 docker run -d --log-driver json-file nginx 常用:json-file(默认)/syslog/journald
日志 / 输出 -q quiet 仅输出容器 ID docker run -d -q nginx 适合脚本批量处理
镜像 / 命令 --pull 拉取镜像策略:always/never/missing docker run --pull always nginx always 强制拉取最新镜像
镜像 / 命令 --entrypoint 覆盖镜像的默认入口命令 docker run -it --entrypoint sh nginx 替换镜像默认的启动命令

docker compose 命令说明

优势

  • 同时启动多个容器组件
  • 便于维护

备注: 底层是依赖docker run 命令

1. 基础使用说明
# 启动所有容器(后台运行)
docker-compose up -d

# 停止所有容器
docker-compose down

# 查看所有容器日志
docker-compose logs -f
2. docker-compose.yml

docker 容器启动配置说明文件,方便维护

# 指定Compose文件的版本(需与Docker引擎版本兼容,3.8是较新的稳定版本)
version: '3.8'

# 定义所有服务(每个服务对应一个容器)
services:
  # 服务名称:mysql(自定义,容器间可通过该名称访问)
  mysql:
    # 指定运行容器的镜像:mysql 8.0版本(无tag默认拉取latest)
    image: mysql:8.0
    # 指定容器名称(避免Docker自动生成随机名称,方便管理)
    container_name: app-mysql
    # 配置容器所属网络(关联下方定义的app-net网络)
    networks:
      - app-net
    # 端口映射:主机端口3306 → 容器端口3306
    ports:
      - "3306:3306"
    # 数据卷挂载:主机目录/host/mysql → 容器目录/var/lib/mysql(持久化MySQL数据)
    volumes:
      - /host/mysql:/var/lib/mysql
    # 设置容器内的环境变量(MySQL核心配置)
    environment:
      # 设置MySQL root用户密码
      - MYSQL_ROOT_PASSWORD=123456
      # 容器启动时自动创建名为app_db的数据库
      - MYSQL_DATABASE=app_db
    # 容器重启策略:始终重启(容器退出/宿主机重启后自动启动)
    restart: always

  # 服务名称:node(Node.js后端服务)
  node:
    # 指定Node.js镜像版本为18
    image: node:18
    # 容器名称:app-node
    container_name: app-node
    # 关联app-net网络(与mysql容器互通)
    networks:
      - app-net
    # 端口映射:主机3000端口 → 容器3000端口(后端服务端口)
    ports:
      - "3000:3000"
    # 挂载主机/host/node目录到容器/app目录(挂载后端代码,方便热更新)
    volumes:
      - /host/node:/app
    # 后端服务的环境变量(配置数据库连接)
    environment:
      # 数据库主机地址:直接用mysql服务名(Compose自动解析为容器IP)
      - DB_HOST=mysql
      # 数据库端口
      - DB_PORT=3306
    # 重启策略:始终重启
    restart: always
    # 启动依赖:先启动mysql服务,再启动node服务(仅保证启动顺序,不保证mysql就绪)
    depends_on:
      - mysql

  # 服务名称:nginx(前端反向代理服务)
  nginx:
    # 指定轻量级nginx镜像(alpine版本体积更小)
    image: nginx:alpine
    # 容器名称:app-nginx
    container_name: app-nginx
    # 关联app-net网络(与node容器互通)
    networks:
      - app-net
    # 端口映射:主机80端口 → 容器80端口(HTTP服务端口)
    ports:
      - "80:80"
    # 挂载主机Nginx配置目录到容器配置目录(自定义反向代理规则)
    volumes:
      - /host/nginx/conf:/etc/nginx/conf.d
    # 重启策略:始终重启
    restart: always
    # 启动依赖:先启动node服务,再启动nginx服务
    depends_on:
      - node

# 定义自定义网络(Compose会自动创建,所有服务接入该网络后可通过服务名互通)
networks:
  # 网络名称:app-net(自定义),默认使用bridge驱动
  app-net:
    # 可省略驱动配置,默认bridge;如需自定义可加:
    # driver: bridge

docker 网络

网络管理基础命令
命令 说明 示例
docker network ls 列出所有网络 docker network ls
docker network create 创建一个新网络 docker network create mynet
docker network inspect 查看网络的详细信息(JSON) docker network inspect mynet
docker network rm 删除一个或多个网络 docker network rm mynet
docker network prune 删除所有未使用的网络 docker network prune
网络模式

常用

  • bridge 默认
  • overlay 分配子网
    驱动类型|说明|适用场景
    ---|---|---
    bridge(默认)| 创建虚拟网桥,容器连接到该网桥,通过 NAT 与外网通信。适合单机容器间通信。| 单机开发/测试,默认网络。
    overlay |跨主机的虚拟网络,支持多机容器间通信。需配合 Swarm 或外部键值存储。| 能够给容器分配子网,在同一个宿主机内,容器能通过子网相互访问
    host| 容器直接使用宿主机的网络栈,不隔离网络。性能最高,但端口冲突风险大。| 需要极致网络性能的场景(如网络流量监控)。
    none| 容器无网络接口,完全隔离。| 对安全性要求极高、无需网络的容器。
    macvlan| 为容器分配物理网络的 MAC 地址,使其像独立物理机一样接入网络。 |需要容器直接使用物理网络 IP 的 legacy 应用。
    ipvlan| 类似 macvlan,但共享 MAC 地址,更节省 IP 资源。 |大规模容器部署,MAC 地址有限的环境。
创建网络
docker network create \          # 创建 Docker 网络
  --subnet 192.168.0.0/24 \      # 指定网络子网为 192.168.0.0/24,即可用 IP 范围为 192.168.0.1~254
  --ip-range 192.168.0.128/25 \  # 限制容器自动分配的 IP 范围为 192.168.0.128/25(128~255),仅使用后半段
  --gateway 192.168.0.1 \        # 设置网关为 192.168.0.1(通常位于子网起始位置)
  my-limited                     # 网络名称,后续可通过此名称使用该网络
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 操作容器 docker的启动有两种启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(s...
    Ppnn13Yu阅读 532评论 0 0
  • 一.Docker简介 程序员经常遇到一个问题,这个程序在我的电脑上已经跑通了,但是在他的电脑上怎么跑都跑不通。因为...
    BzCoder阅读 426评论 1 1
  • 登录指定仓库docker login -u 登录名 -p 密码 仓库地址 拉去镜像docker pull 镜像名称...
    你猜_19ca阅读 242评论 0 0
  • 1. 为什么引入Docker Docker现在大受追捧,风光无二。Docker是一个轻量级的容器技术,类似于虚拟机...
    造一个大大的轮子阅读 426评论 0 1
  • 记录docker常用命令 1、检查docker版本 docker version 2、搜索镜像 [root@loc...
    嫩大叔Cliock阅读 150评论 0 0

友情链接更多精彩内容