docker 基础操作

仓库地址: github.com/SuYxh/docke...

构建镜像

语法:

shell 复制代码
docker build -t <your-dockerhub-username>/<your-image-name>:<tag> .

示例:

shell 复制代码
docker build -t jarvis0426/chatgpt-web-service-base:1.0.0 .

解析:

  • docker build: 这是 Docker 的构建命令,用于从 Dockerfile 创建镜像。
  • -t 参数用于为构建的镜像指定一个标签(tag)。这个标签通常包括仓库名、镜像名和版本号,格式为 <repository>/<image-name>:<tag>。在您的例子中,jarvis0426 是 Docker Hub 的用户名,chatgpt-web-service-base 是镜像的名称,1.0.0 是版本号。
  • .: 这指定了 Dockerfile 的位置。在这个例子中,. 表示当前目录,意味着 Docker 将在当前目录下查找名为 Dockerfile 的文件,并使用它来构建镜像。

其他常见参数:

  • --file-f: 指定要使用的 Dockerfile 路径。默认情况下,Docker 会在当前目录下查找名为 Dockerfile 的文件。如果您的 Dockerfile 位于不同的位置或有不同的名称,您可以使用这个参数指定它。例如:docker build -f path/to/your/Dockerfile .
  • --build-arg: 设置构建时的变量。这些变量可以在 Dockerfile 中使用,通常用于传递敏感信息或配置数据。例如:docker build --build-arg API_KEY=your_api_key .
  • --no-cache: 构建镜像时不使用缓存。这确保了每一层都将重新构建,有助于获取最新的依赖和更新。例如:docker build --no-cache -t my-image .
  • --pull: 总是尝试从远程仓库拉取更新的基础镜像,即使本地已经有了该镜像。这有助于确保基础镜像是最新的。例如:docker build --pull -t my-image .
  • --rm: 构建完成后删除临时容器。这是默认行为,但如果您之前更改过此设置,可以使用此参数确保临时容器被清理。例如:docker build --rm -t my-image .

接下来,我将继续介绍更多关于 Docker 的常用操作和命令。

启动容器

语法:

shell 复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

示例:

shell 复制代码
docker run -d -p 5000:5000 --name myapp jarvis0426/chatgpt-web-service-base:1.0.0

解析:

  • docker run: 这是启动 Docker 容器的命令。
  • -d: 后台运行容器,并返回容器 ID。
  • -p 5000:5000: 将容器内部的 5000 端口映射到主机的 5000 端口。
  • --name myapp: 为运行的容器指定一个名称 myapp
  • jarvis0426/chatgpt-web-service-base:1.0.0: 指定要运行的镜像。

其他常见参数:

  • --env-e: 设置环境变量。例如:docker run -e MY_VAR=my_value my-image
  • --volume-v: 挂载卷,用于数据持久化或目录共享。例如:docker run -v /host/path:/container/path my-image
  • --restart: 设置重启策略。例如:docker run --restart=always my-image

查看容器信息

语法:

shell 复制代码
docker ps [OPTIONS]

示例:

shell 复制代码
docker ps -a

解析:

  • docker ps: 显示运行中的容器。
  • -a: 显示所有容器,包括未运行的。

停止和删除容器

语法:

shell 复制代码
docker stop CONTAINER
docker rm CONTAINER

示例:

shell 复制代码
docker stop myapp
docker rm myapp

解析:

  • docker stop: 停止一个运行中的容器。
  • docker rm: 删除一个容器。如果容器正在运行,需要先停止。

停止和删除所有容器

css 复制代码
docker rm $(docker stop $(docker ps -a -q))

查看镜像和删除镜像

语法:

shell 复制代码
docker images
docker rmi IMAGE

示例:

shell 复制代码
docker images
docker rmi jarvis0426/chatgpt-web-service-base:1.0.0

解析:

  • docker images: 列出本地的所有镜像。
  • docker rmi: 删除一个镜像。

强制删除

arduino 复制代码
docker image rm -f c502452cef3c

清理未使用的镜像

如果您想清理所有悬空(未被任何容器引用)的镜像,可以使用 Docker 的垃圾收集命令:

sh 复制代码
docker image prune

这会删除所有未被标记和未被任何容器引用的镜像。要删除特定未使用的镜像,您可以结合过滤器使用:

sh 复制代码
docker image prune -a --filter "until=24h"

这个命令将删除所有创建时间超过24小时的未使用镜像。

在处理镜像删除时,请确保您不会意外删除正在使用或未来可能需要的镜像。如果不确定,最好先单独删除每个标签,以避免数据丢失。

删除所有镜像

css 复制代码
docker rmi $(docker images -q)

容器日志

语法:

shell 复制代码
docker logs CONTAINER

示例:

shell 复制代码
docker logs myapp

解析:

  • docker logs: 获取容器的日志输出。

进入容器

方式一

要进入正在运行的 Docker 容器并与其交互,您可以使用 docker exec 命令配合 -it 参数,这将允许您开启一个交互式终端。如果您想要进入名为 my-node-app-test 的容器,通常使用的命令是:

sh 复制代码
docker exec -it my-node-app-test /bin/sh

这里的命令解释如下:

  • docker exec: 运行一个命令在运行中的容器里。
  • -it: 这个参数组合是 -i-t 的缩写,-i 表示开启交互式模式,允许您与容器进行交互;-t 分配一个伪终端,这让您感觉就像在使用一个常规终端一样。
  • my-node-app-test: 指定要进入的容器的名称。
  • /bin/sh: 在容器中执行的命令,这里是启动一个 shell。根据容器内部的 Linux 发行版,您也可以尝试使用 /bin/bash,但在大多数基于 Alpine 的容器(如您的示例中所用的 node:18-alpine)中,默认的 shell 是 sh

一旦执行这个命令,您将会进入容器的终端,可以浏览文件系统、运行命令、查看日志文件等等。当您完成操作并想退出容器时,可以简单地键入 exit

这种方法是处理容器问题、进行故障诊断或容器内部探索的常用技巧。

方式二

要查看在 Docker 容器中的文件内容,您可以使用 docker exec 命令来执行容器内部的命令,比如 cat,来查看文件内容。以下是步骤和命令示例:

运行容器

假设您已经按照前面的指示构建并运行了容器,容器名为 my-node-app-test。如果还未运行,可以使用如下命令启动:

sh 复制代码
docker run -d -p 3002:3002 --name my-node-app-test jarvis0426/my-node-app:test1.0.0
查看文件内容

运行下面的命令来查看容器内 /usr/src/app/env 文件的内容:

sh 复制代码
docker exec my-node-app-test cat /usr/src/app/env

这个命令的组成如下:

  • docker exec: 这个命令用于在运行中的容器内执行命令。
  • my-node-app-test: 指定要在其中执行命令的容器的名称。
  • cat /usr/src/app/env: cat 是一个查看文件内容的命令,/usr/src/app/env 是要查看的文件的路径。

推送镜像

bash 复制代码
docker login
docker tag chatgpt-web-service:latest yourusername/chatgpt-web-service:latest
docker push yourusername/chatgpt-web-service:latest

如果您在构建镜像时已经使用了完整的名称(包括用户名和仓库名),那么在推送到 Docker Hub 之前,您不一定需要执行 docker tag 命令。

相关推荐
Easonmax5 分钟前
【CSS3】css开篇基础(1)
前端·css
大鱼前端23 分钟前
未来前端发展方向:深度探索与技术前瞻
前端
昨天;明天。今天。29 分钟前
案例-博客页面简单实现
前端·javascript·css
天上掉下来个程小白30 分钟前
请求响应-08.响应-案例
java·服务器·前端·springboot
周太密44 分钟前
使用 Vue 3 和 Element Plus 构建动态酒店日历组件
前端
时清云1 小时前
【算法】合并两个有序链表
前端·算法·面试
小爱丨同学1 小时前
宏队列和微队列
前端·javascript
持久的棒棒君2 小时前
ElementUI 2.x 输入框回车后在调用接口进行远程搜索功能
前端·javascript·elementui
2401_857297912 小时前
秋招内推2025-招联金融
java·前端·算法·金融·求职招聘
undefined&&懒洋洋3 小时前
Web和UE5像素流送、通信教程
前端·ue5