Docker的常见命令以及应用一件套

Reference | Docker Docs

一般安装在linux宿主机上

用镜像创建容器——用模具做糕点

  • 镜像:包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。

  • 容器: Docker 运行镜像时创建的轻量级、可移植、隔离的虚拟环境


一、核心

1. 常用命令

  • systemctl start docker 启动 Docker 服务。

    • 解释

      • systemctl 是 Linux 系统中的服务管理工具(属于 systemd 的一部分),用于控制系统的服务(如启动、停止、重启)。
      • start docker 表示启动 Docker 服务。
  • systemctl status docker 查看 Docker 服务的运行状态。


  • 下载镜像:docker pull

  • 列举下载过的镜像:docker images

  • 删除镜像:docker rmi


  • 查看正在运行的容器(ps:进程状况)docker ps

    • -a:查看所有容器
  • 删除容器:docker rm

  • 创建容器:docker start

  • 启动容器:docker start

  • 停止运行容器:docker stop

  • 查看容器信息:docker inspect

  • 查看容器日志:docker logs (-f:滚动查看日志)

  • 查看容器内的进程情况:docker exec

  • 创建并立即启动 容器:docker run [options] [镜像]

    【-d】:后台执行 (detached mode 分离模式)不阻塞当前窗口
    
    【-p 80:80】:把宿主机的端口和容器的端口进行映射/绑定
    
                  前面是宿主机的端口,后面是容器的端口(先外后内)
    

为什么要进行端口绑定?

容器内的网络和宿主机是隔离的,

如果在容器中运行 nginx,无法直接通过 localhost:80 访问到的
在这里插入图片描述


2. 挂载

绑定:共享宿主机文件(如代码、配置)

挂载卷:相当于 做数据的持久化保存 (备份)


本地挂载

将主机系统的指定目录或文件直接挂载到容器内部,实现主机与容器之间的数据共享。

  • 【-v 宿主机目录:容器内目录】—— 把宿主机目录和容器目录进行映射

【注意】:
本地目录必须以/·/开头,如果直接以名称开头,会被识别为数据卷而非本地目录

-v mysql:/var/lib/mysql    会被识别为一个数据卷,数据卷叫mysql
-v ./mysql:/var/lib/mysql   会被识别为当前目录下的mysql目录

特点

  • 路径明确:需指定主机上的绝对路径 (如 /home/user/data:/app/data
  • 权限控制:容器对主机文件的读写权限取决于主机目录的权限。
  • 用途:适合开发环境(如代码热更新)、配置文件同步等
    • 代码热更新: 应用程序运行过程中,无需停止或重启服务,即可动态加载、修改和替换部分代码或资源文件,并立即生效的技术。
  • 缺点:依赖主机路径,可移植性差(不同环境路径可能不同)

命名卷挂载
  • 【-v 卷的名字:容器内目录】创建一个存储空间(命名卷)

    • docker volume create [卷的名字] 创建卷

    • docker volume inspect [卷的名字] 查看卷的详细信息(所在目录等)

    • docker volume ls 列出所有的卷

    • docker volume rm [卷的名字] 删除卷

    • docker volume prune -a 删除没有任何容器在使用的卷

特点

  • 自动管理:Docker 负责创建、备份和清理卷数据。
    • 添加容器的时候会自动创建一个匿名数据卷
  • 可移植性:卷名称唯一,不依赖主机路径,适合生产环境。
  • 性能优化:某些存储驱动(如 overlay2)对卷有性能优化。
  • 用途:数据库数据、持久化存储等。

3. 总结:

何时使用本地挂载?
  • 需要直接访问主机文件(如配置文件、代码目录)
  • 开发阶段快速迭代(修改主机文件后容器内立即生效)
何时使用命名卷?
  • 需要持久化数据且不关心主机路径(如数据库、日志)
  • 需要跨主机迁移数据(通过 docker cp 或备份卷目录)
  • 需要 Docker 自动管理生命周期(如清理无用卷)

4. docker run 的其他参数

【-e】账号密码

【 --network】指明连接的网络(网卡)

【-it --rm】 一般一起使用,用于临时调试容器

  • -it :让控制台进入容器进行交互

  • –rm:容器停止就删除

【 --restart】容器在停止时的策略,后接策略

  • always:

  • unless-stopped:手动停止的容器就不会重启了


5. 网络

默认下,所有容器都是以bridrge的方式连接到Docker的一个虚拟网桥上:

在这里插入图片描述

自定义网路

加入自定义网路的容器可以通过容器名相互访问。【ping 容器名】

命令说明
docker network create创建一个网络
docker network ls查看所有网络
docker network rm删除指定网络
docker network prune清除未使用的网络
docker network connect使指定容器连接加入某网络
docker network disconnect使指定容器连接离开某网络
docker network inspect查看网络详细信息
当启动容器时,使用 --network 将容器连接到指定的网络.
docker run -it --network=my_network alpine sh

二、应用

√ 本地目录挂载

  • 创建MySQL容器,并基于本地目录挂载实现MySQL容器数据目录、配置文件、初始化脚本的目录挂载。

    • ①挂载/root/mysql/data到容器内的/var/lib/mysql目录

    • ②挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(sql脚本)

    • ③挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录

docker run -d \
 --name mysql \
 -p 3307:3306 \
 -e MYSQL_ROOT_PASSWORD=123 \
 -e TZ=Asia/Shanghai \
 -v /root/mysql/data:/var/lib/mysql \
 -v /root/mysql/init:/docker-entrypoint-initdb.d \
 -v /root/mysql/conf:/etc/mysql/conf.d \
mysql:8

√ √ 自定义镜像

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

  • 构建镜像的过程其实就是把上述文件打包的过程。

Dockerfile

Dockerfile reference | Docker Docs

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。

  • Docker可以根据Dockerfile帮我们构建镜像

1. 常用命令:

指令说明示例
FROM指定基础镜像FROM centos:7
ENV设置环境变量,可在后面指令使用ENV key=value
COPY拷贝本地文件到镜像的指定目录COPY ./jdk17.tar.gz /tmp
RUN执行Linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jdk17.tar.gz
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

2. 示例: Dockerfile 描述镜像结构

# 使用 CentOS 7 作为基础镜像
FROM centos:7

# 添加 JDK 到镜像中
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz

# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH

# 创建应用目录
RUN mkdir -p /app
WORKDIR /app

# 复制应用 JAR 文件到容器
COPY app.jar app.jar

# 暴露端口
EXPOSE 8080

# 运行命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

构建镜像
docker build -t myImage:1.0 .
  • -t:target 是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest

  • ·:是指定Dockerfile所在目录,如果就在当前目录,则指定为"."


三、项目部署

部署服务端

  • 需求:将我们开发的tlias-web-management项目打包为镜像,并部署。

  • 步骤:
    1.准备MySQL容器,并创建tlias数据库及表结构。(已完成)
    2. 准备java应用(tlias项目)镜像,部署Docker容器,运行测试。

    • 修改tlias项目的配置文件,修改数据库服务地址及logback日志文件存放地址,打jar包。

    • 编写Dockerfile文件。

    • 构建Docker镜像。

    • 部署Docker容器。

1. 修改配置文件:
在这里插入图片描述

2. 打包成jar包:

3. 编写dockerfile:

# 使用 CentOS 7 作为基础镜像
FROM centos:7

# 添加 JDK 到镜像中
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ &&  rm /usr/local/jdk17.tar.gz

# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH

ENV OSS_ACCESS_KEY_ID=LTAI5tP6dc4cvccdvvySE39X
ENV OSS_ACCESS_KEY_SECRET=ZSyIT31qhxIkS0dH1H9WzHqPiyM3Ot

#统一编码
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

# 创建应用目录
RUN mkdir -p /tlias
WORKDIR /tlias

# 复制应用 JAR 文件到容器
COPY  tlias.jar  tlias.jar

# 暴露端口
EXPOSE 8080

# 运行命令
ENTRYPOINT ["java","-jar","/tlias/tlias.jar"]

4. 部署容器

docker run 部署到相应网关

docker logs -f tlias 滚动查看容器运行日志


部署前端

  • 创建一个新的nginx容器,将资料中提供的前端项目的静态资源部署到nginx中

  • 步骤:

    • 部署nginx容器(设置目录映射)

      -v /root/tlias-nginx/html:/usr/share/nginx/html
      -v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      
    • 将部署的前端资源文件及配置文件上传至服务器,执行命令创建nginx容器。

注意:nginx.conf 中也需要更改为服务端的容器名

部署nginx:

docker run -d \
 --name nginx-tlias \
 -v /root/tlias-nginx/html:/usr/share/nginx/html \
 -v /root/tlias-nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
 --network itheima \
 -p 80:80 \
nginx:1.20.2

√ √ DockerCompose

DockerCompose通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署
示例:

services:
  nginx-tlias:
    image: "nginx:1.20.2"
    container_name: nginx-tlias
    volumes:
      - "/usr/local/app/html:/usr/share/nginx/html"
      - "/usr/local/app/conf/nginx.conf:/etc/nginx/nginx.conf"
    networks:
      - itheima
    ports:
      - "80:80"
# 自定义网络
networks:
  itheima:
    name: itheima

部署项目
  • 涉及到的服务:MySQL数据库、服务端、前端nginx

  • 步骤:

    • 准备资源(tlias.sql,服务端的jdk17、jar包、Dockerfile,前端项目打包文件html、nginx.conf)

    • 准备docker-compose.yml配置文件

    • 根据绑定挂载的目录,将资源放在相应的目录下 /usr/local/app/

    • 基于DockerCompose快速构建项目 docker compose -d up


常见命令:

docker compose 【options】【commands】

类型参数或指令说明
Options-f指定 compose 文件的路径和名称。例如,docker-compose -f docker-compose.prod.yml up 用于指定使用 docker-compose.prod.yml 文件。
-p指定 project 名称。这有助于在同一环境中管理多个不同的 Compose 项目,避免服务名称冲突。例如,docker-compose -p myproject up 会将项目命名为 myproject
Commandsup创建并启动所有 service 容器。它会按照 docker-compose.yml 文件中定义的服务,拉取镜像(如果本地不存在)、创建容器并启动它们。可以加上 -d 选项在后台运行,如 docker-compose up -d
down停止并移除所有容器、网络。它会停止所有运行的容器,并删除与这些容器相关的网络等资源。通常在清理环境时使用,例如 docker-compose down
ps列出所有启动的容器。显示当前由 Docker Compose 管理的正在运行的容器列表,包括容器名称、状态等信息,如 docker-compose ps
logs查看指定容器的日志可以查看一个或多个服务的日志输出,帮助调试和监控容器运行情况。例如,docker-compose logs web 查看名为 web 的服务的日志;docker-compose logs -f 可以持续跟踪日志输出。
stop停止容器。停止由 Docker Compose 管理的所有正在运行的容器,但不会删除容器,如 docker-compose stop。也可以指定特定服务停止,如 docker-compose stop web 停止 web 服务对应的容器。
start启动容器。重新启动已经创建但处于停止状态的容器,如 docker-compose start。同样可以指定特定服务启动,如 docker-compose start web
restart重启容器。相当于先执行 stop 操作,再执行 start 操作,用于重启容器,如 docker-compose restart。也可以针对特定服务进行重启,如 docker-compose restart web
top查看运行的进程。显示在由 Docker Compose 管理的容器中正在运行的进程信息,如 docker-compose top
启动容器。重新启动已经创建但处于停止状态的容器,如 docker-compose start。同样可以指定特定服务启动,如 docker-compose start web
restart重启容器。相当于先执行 stop 操作,再执行 start 操作,用于重启容器,如 docker-compose restart。也可以针对特定服务进行重启,如 docker-compose restart web
top查看运行的进程。显示在由 Docker Compose 管理的容器中正在运行的进程信息,如 docker-compose top
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值