Docker命令一站式指南

Docker安装与使用

安装Docker

参考该文章:https://blog.csdn.net/SoulruiA/article/details/147655089?spm=1001.2014.3001.5501

Docker常用命令

运行容器

docker run [选项] 镜像名 [命令]

常用选项:

  • -d 后台运行
  • -it 交互模式(通常与 bash 结合)
  • --name 指定容器名称
  • -p 主机端口:容器端口 端口映射
  • -v 主机路径:容器路径 挂载数据卷
  • --rm 退出后自动删除容器
  • -e 设置环境变量

MySql为例

docker run -d \ #创建并运行一个容器 -d是让容器后台运行
 --name mysql \ #容器名字 必须唯一
 -p 3306:3306 \ #mysql端口映射 宿主端口:容器内端口
 -e MYSQL_ROOT_PASSWORD=123456 \ #设置密码
 mysql #镜像名字完整写法:[repository]:[tag] 镜像名:版本 默认latest

查看镜像

语法:docker images

拉取镜像

语法:docker pull [repository]:[tag]

  • repository 镜像名
  • tag 版本号
docker pull nginx:latest
#拉取nginx最新版

删除镜像

语法:docker rmi 镜像名

docker rmi nginx:latest

导出镜像

语法:docker save [-o 文件名] 镜像

docker save -o nginx.tar nginx:latest
#将nginx:latest打包成名为nginx.tar的包

导入镜像

语法:docker load -i 输入文件名.tar

  • -iinput 指定输入名
docker load -i nginx.tar

查看容器状态

语法:docker ps [选项]

选项作用
-a--all显示 所有容器(包括已停止的)
-q--quiet仅显示 容器ID(适合脚本处理)
-s--size显示容器占用磁盘大小
--filter-f按条件过滤容器(见下方示例)
--format自定义输出格式(Go模板语法,见下方)
--no-trunc显示完整信息(不截断输出)
条件过滤
# 按名称过滤
docker ps --filter "name=webserver"

# 按状态过滤
docker ps --filter "status=exited"  # 已停止的容器
docker ps --filter "status=running" # 运行中的容器

# 按镜像过滤
docker ps --filter "ancestor=nginx"  # 使用 nginx 镜像的容器

# 按标签过滤(自定义标签)
docker ps --filter "label=env=prod"

格式输出

# 仅显示容器ID和镜像名
docker ps --format "{{.ID}}: {{.Image}}"

# 表格形式显示名称、状态、端口
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

查看日志

语法:docker logs [选项] 容器名或ID

选项作用
-f--follow实时跟踪日志(类似 tail -f
--tail N仅显示最后 N 行日志(默认全部)
-t--timestamps显示时间戳
--since显示指定时间之后的日志(如 --since 2024-01-01--since 1h
--until显示指定时间之前的日志
--details显示额外的日志元数据
docker logs -f mysql
#跟踪mysql日志

进入容器内部

语法:docker exec [选项] 容器名或ID

选项作用
-it交互式操作(组合 -i 保持输入 + -t 分配伪终端)
-d后台执行命令(不阻塞终端)
-u指定用户执行(如 -u root-u www-data
-e设置环境变量(如 -e VAR=value
-w指定工作目录(如 -w /app

容器启用、停用、删除

语法:docker [start stop rm] 容器名或ID

命令说明
start启动暂停的容器
stop停止容器运行
rm删除容器

数据卷

容器内目录和主机目录之间映射的桥梁,当修改宿主机对应的文件,容器内文件也会修改,实现双向绑定,数据共享,查看官方文档进行目录挂载,docher hub


命令作用示例
docker volume create创建数据卷docker volume create my_vol
docker volume ls列出所有数据卷docker volume ls
docker volume inspect查看数据卷详情docker volume inspect my_vol
docker volume rm删除数据卷docker volume rm my_vol
docker volume prune清理未使用的数据卷docker volume prune

案例1:实现将静态资源部署到nginx容器的html目录

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx #挂在目录需要在创建时就执行,数据卷名:所要挂载的目录

docker volume inspect html #查看数据卷挂在宿主机位置

打开宿主机对应挂载目录并修改,容器内文件也会进行相应修改

案例2:实现MySql容器数据挂载到自定义目录

 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/aer/mysql/data:/var/lib/mysql mysql
#将mysql数据目录挂载到/home/aer/mysql下

自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的打包


部署一个Java应用的步骤:

  1. 准备一个Linux服务器
  2. 安装JRE并配置环境变量
  3. 拷贝jar包
  4. 运行jar包

Dockerfile 常用指令

指令作用Java 项目示例最佳实践
FROM指定基础镜像FROM eclipse-temurin:17-jdk-jammy使用官方 OpenJDK 镜像(如 eclipse-temurin),明确版本号;生产环境避免使用 latest
WORKDIR设置工作目录WORKDIR /app所有后续命令基于此目录执行,避免硬编码路径。
COPY复制文件到镜像COPY target/my-app.jar app.jar
COPY src/main/resources/conf/ /conf/
优先用 COPY 而非 ADD(除非需自动解压);分阶段复制以减少层数。
RUN执行命令(构建阶段)RUN apt-get update && apt-get install -y curl合并命令(用 &&\),清理缓存(如 aptmvn 临时文件)。
ENV**设置环境变量ENV JAVA_OPTS="-Xms512m -Xmx1024m"
ENV PROFILE="prod"
统一管理配置(如 JVM 参数、Spring Profile)。
EXPOSE声明容器暴露端口EXPOSE 8080仅文档作用,实际端口映射在 docker run 时通过 -p 指定。
CMD容器启动时执行的命令(可被覆盖)CMD ["java", "-jar", "app.jar"]
CMD ["java", "${JAVA_OPTS}", "-jar", "app.jar"]
使用 JSON 数组格式(避免 Shell 解析问题),参数通过环境变量注入。
ENTRYPOINT容器入口命令(不可被覆盖)ENTRYPOINT ["java", "-jar", "app.jar"]CMD 结合使用(ENTRYPOINT 定义固定命令,CMD 提供默认参数)。
ARG构建时传递变量(构建后消失)ARG MAVEN_VERSION=3.8.6
RUN curl -O https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/...
用于动态指定依赖版本(如 Maven、JDK 版本)。
VOLUME声明数据卷挂载点VOLUME /tmp挂载临时目录(如 Spring Boot 的 /tmp)或日志目录,避免数据丢失。

#指定Ubuntu镜像
FROM ubuntu:24.04
#配置环境变量,JDK安装目录
ENV JAVA_DIR=/usr/local 
#拷贝JDK和JAVA项目包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
#安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
#配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
#入口,JAVA项目启动命令
ENTRYPOINT ["java","-jar","/app.jar"]

使用基于JDK基础镜像简化操作

# 使用官方轻量级 JRE 镜像(无需手动安装 Java)
FROM FROM openjdk:11.0-jre-buster

# 设置工作目录
WORKDIR /app

# 复制 JAR 文件到镜像
COPY target/your-app.jar app.jar

# 启动命令(直接运行 JAR)
ENTRYPOINT ["java", "-jar", "app.jar"]

构建镜像

docker built -t myImage:1.o .
#- -t:给镜像起名,格式为repository:tag
#- . 指定Dockerfile所在目录,如果在当前目录则指定为.

网络

加入自定义网络的容器可以通过容器名互相访问

命令作用示例
docker network ls列出所有网络docker network ls
docker network inspect <网络名>查看网络详细信息docker network inspect bridge
docker network create <网络名>创建自定义网络docker network create my_net
docker network rm <网络名>删除网络(需无容器连接)docker network rm my_net
docker network prune删除所有未使用的网络docker network prune
docker run --network=<网络名>指定容器运行时的网络docker run -d --network=my_net nginx
docker network connect <网络名> <容器>将运行中的容器连接到网络docker network connect my_net my_container
docker network disconnect <网络名> <容器>断开容器与网络的连接docker network disconnect my_net my_container

将mysql加入自定义网络

docker network create net 
#创建一个名为net的网络

docker network connect net mysql
#将先前创建的mysql容器加入net网络

docker inspect mysql
#查看mysql容器的ip,发现除默认网桥外还有一个新的网桥

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具,通过一个 YAML 配置文件(docker-compose.yml)来管理多个容器的启动、网络、存储等配置。它特别适合开发环境和微服务架构的部署。


1. Docker Compose 核心概念

概念说明
Service(服务)一个容器化的应用(如 nginx, mysql, redis),在 docker-compose.yml 中定义。
Project(项目)由多个服务组成的完整应用(如 web + db + cache)。
YAML 配置文件docker-compose.yml 定义服务、网络、卷等配置。

2. Docker Compose 核心命令

命令作用示例
docker-compose up启动所有服务(-d 后台运行)docker-compose up -d
docker-compose down停止并删除所有容器、网络docker-compose down
docker-compose ps查看运行中的服务docker-compose ps
docker-compose logs查看服务日志(-f 实时查看)docker-compose logs -f web
docker-compose exec进入容器执行命令docker-compose exec db bash
docker-compose build重新构建镜像docker-compose build
docker-compose pull拉取服务所需的镜像docker-compose pull
docker-compose restart重启服务docker-compose restart web
docker-compose config检查 docker-compose.yml 语法是否正确docker-compose config

3. docker-compose.yml 文件结构

version: "3.8"  # Compose 文件版本(推荐 3.x)
services:       # 定义所有服务
  web:          # 服务名称(自定义)
    image: nginx:latest  # 使用的镜像
    ports:
      - "80:80"          # 端口映射(宿主机:容器)
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载数据卷
    depends_on:
      - db              # 依赖的服务(先启动 db)
    networks:
      - my_net          # 使用的网络

  db:            # 另一个服务(MySQL)
    image: mysql:5.7
    environment:  # 环境变量
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - mysql_data:/var/lib/mysql  # 命名卷
    networks:
      - my_net

volumes:         # 定义数据卷
  mysql_data:    # 命名卷(持久化存储)

networks:        # 定义网络
  my_net:        # 自定义网络
    driver: bridge

4. 常用配置项
服务配置

配置项说明
image指定镜像(如 nginx:latest
build通过 Dockerfile 构建镜像(如 build: ./app
ports端口映射("宿主机端口:容器端口"
volumes挂载数据卷(./local:/containernamed_volume:/container
environment设置环境变量(MYSQL_ROOT_PASSWORD: "123456"
depends_on定义服务启动顺序(但不保证服务完全就绪)
restart容器重启策略(no / always / on-failure / unless-stopped
command覆盖默认启动命令(如 command: ["npm", "start"]

5. 实战示例
运行 WordPress + MySQL

version: "3.8"
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "wordpress"
      MYSQL_DATABASE: "wordpress"
      MYSQL_USER: "wordpress"
      MYSQL_PASSWORD: "wordpress"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - wordpress_net

  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: "db"
      WORDPRESS_DB_USER: "wordpress"
      WORDPRESS_DB_PASSWORD: "wordpress"
      WORDPRESS_DB_NAME: "wordpress"
    depends_on:
      - db
    networks:
      - wordpress_net

volumes:
  mysql_data:

networks:
  wordpress_net:
    driver: bridge

启动命令:

docker-compose up -d

访问 http://localhost:8000 即可进入 WordPress 安装界面。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值