docker核心操作

1、docker安装

在一些 Linux 发行版中,特别是新版本的发行版,由于一些原因,它们可能将 Docker 替换为 Podman 作为默认的容器运行时工具。这可能是因为安全性、兼容性或社区支持等方面的考虑。

Podman 是一个与 Docker 类似的容器工具,但有一些不同之处,例如它不需要一个守护进程来运行容器,它使用不同的体系结构和架构。因此,一些 Linux 发行版可能选择将 Podman 作为默认的容器工具,而不是 Docker。

如果你确实想使用 Docker 而不是 Podman,你需要手动安装 Docker 软件包,并在系统上配置 Docker 服务。要做到这一点,你可以按照 Docker 官方文档提供的步骤进行操作,这将确保你安装的是 Docker 而不是 Podman。

请注意,在不同的 Linux 发行版中,操作步骤可能会有所不同,所以确保按照相应发行版的文档进行操作。

yum install docker
  • 查看运行中的容器,-a查看所有容器
docker ps

在这里插入图片描述

(1)可选参数:

  • -a : 显示所有的容器,包括未运行的。
  • -f : 根据条件过滤显示的内容。
  • -s : 显示总的文件大小。
  • –format : 指定返回值的模板文件。
  • -l : 显示最近创建的容器。
  • -n : 列出最近创建的n个容器。
  • –no-trunc : 不截断输出。
  • -q : 静默模式,只显示容器编号。

(2)输出参数解释:

  • CONTAINER:容器
  • ID:id编号
  • IMAGE:镜像
  • COMMAND:命令
  • CREATED:创建了多久
  • STATUS:状态
  • PORTS:端口
  • NAMES:名字

2、docker镜像

docker images

在这里插入图片描述

  • REPOSITORY:库
  • TAG:标签
  • IMAGE:镜像
  • ID:id标识
  • CREATED:创建
  • SIZE:大小

(1)拉取镜像:https://www.docker.com/

在这里插入图片描述
为啥推荐网页呢?

应为你用docker命令去查就会是下面这种情况:

docker search nginx

在这里插入图片描述

  • 获取到镜像后再次查看:

在这里插入图片描述

  • 此时就显示出已有的镜像了,我这里是装了两个nginx的镜像,一个最新版,一个稳定版。

那现在说说有了镜像后该怎么运行:

3、运行docker镜像

根据上面的镜像信息,这边演示下怎么运行已有的稳定版nginx镜像,按照以下步骤来运行 nginx 镜像:

(1) 运行容器:

  • 使用 docker run 命令来运行基于 nginx 镜像创建的容器。命令的基本格式为:

    docker run [选项] <镜像名称>:<标签>
    
  • 在这里的情况下,镜像名称是 docker.io/library/nginx,标签是
    stable-alpine3.17-slim。你可以根据需要为容器指定各种选项,例如端口映射、卷挂载等。

  • 示例: 假设你想要将容器的端口 80 映射到主机的端口 8080,可以运行以下命令:

    docker run -d -p 8080:80 --name nginx-container docker.io/library/nginx:stable-alpine3.17-slim
    
  • 问题来了为啥敢映射别人的80端口呢??
    在这里插入图片描述

  • 原因是因为前面拉取镜像的Dockerfile里EXPOSE了应用的80端口,所以同理你要映射什么端口不是你说了算的,你得去放行你想要的映射端口。

  • 注意定义不同端口映射的容器,他们是隔离开的,不是同一个容器

  • 那么现在运行完后这会在后台运行一个名为 nginx-container 的容器,将容器内部的端口 80 映射到主机的端口 8080。

在这里插入图片描述

  • 运行完后会生成一个完整的容器ID,所以说docker ps 显示的ID是其完整ID的前12个字符。

  • STATUS状态显示UP则表示启动成功。

  • 访问 Nginx: 在运行容器后,你可以通过浏览器或命令行工具访问 Nginx 服务。在浏览器中访问 http://localhost:8080 或使用命令行工具如 curl

    curl http://localhost:8080
    

在这里插入图片描述

  • 停止和删除容器: 当你不再需要该容器时,使用 docker stop 命令停止容器,然后使用 docker rm 命令删除容器。

    docker stop nginx-container
    
    docker rm nginx-container
    docker rm -f nginx-container
    

这样就可以使用刚刚拉取的 nginx 镜像在容器中运行 Nginx 服务了。记得根据你的需求进行适当的调整。

(2) 挂载硬盘:

docker run -d -p 8080:80 --name nginx-container -v /path/to/host/directory:/path/to/container/directory docker.io/library/nginx:stable-alpine3.17-slim
  • /path/to/host/directory 是你想要挂载的宿主机目录的路径。
  • /path/to/container/directory 是你想要将宿主机目录挂载到容器中的路径
  • -v /path/to/host/directory:/path/to/container/directory 表示将宿主机目录与容器内的目录进行关联和挂载。
  • 通过执行补充的命令,Docker容器将会以后台模式运行,并且宿主机的目录将会挂载到容器指定的路径上。这样,容器内的应用程序可以访问挂载的目录,并且对该目录的更改也会反映在宿主机上。
  • 替换 /path/to/host/directory 和 /path/to/container/directory为你自己希望使用的实际路径。

4、docker容器的生命周期

  1. docker start : 启动一个或多个已经被停止的容器。
docker ps -a
docker start gee1
  • 这里先查看没启动的docker容器,再通过其名字启动它

在这里插入图片描述

  1. docker stop : 停止一个运行中的容器。

  2. docker restart : 重启容器。

  3. kill杀掉一个运行中的容器。可选参数:

-s : 发送什么信号到容器,默认 KILL

# 根据容器名字杀掉容器  
docker kill tomcat7  
 
# 根据容器ID杀掉容器  
docker kill 65d4a94f7a39
  1. create创建一个新的容器但不启动它。
# 使用docker镜像nginx:latest创建一个容器,并将容器命名为mynginx  
docker create --name mynginx nginx:latest

5.1、进入容器内部

docker exec 命令用于在正在运行的 Docker 容器内部执行指定的命令。这在你需要进入容器并在其内部执行命令而不必完全登录到容器的情况下非常有用。以下是 docker exec 命令的基本用法:

docker exec [选项] <容器名称或ID> <要执行的命令>

其中,选项可以包括 -i(标准输入)、-t(终端)、--user(指定执行命令的用户)、--workdir(指定工作目录)等。容器名称或ID是你希望在其中执行命令的容器的标识符。

示例用法:

  1. 在容器中执行交互式命令: 如果你希望在容器内部执行交互式命令,可以使用 -it 选项。

    docker exec -it <容器名称或ID> /bin/bash
    

    以上命令将进入容器内部的交互式 Bash shell。

  2. 在容器中执行单条命令: 你也可以直接在容器内部执行单条命令,而无需进入交互式模式。

    docker exec <容器名称或ID> ls -l /app
    

    以上命令将在容器内部执行 ls -l /app 命令,列出容器内 /app 目录的内容。

  3. 指定用户和工作目录: 你可以使用 --user--workdir 选项来指定在容器内部执行命令的用户和工作目录。

    docker exec -it --user myuser --workdir /app <容器名称或ID> /bin/bash
    

    以上命令将以 myuser 用户身份,并将工作目录切换到 /app,进入容器的交互式 Bash shell。

请根据你的实际需求选择合适的选项和命令来使用 docker exec。如果你想要退出交互式模式,只需在容器内部按下 Ctrl + D 或输入 exit 命令。

5.2、怎么解决Error: exec failed: container_linux.go:380: starting container process caused: exec: “/bin/bash”: stat /bin/bash: no such file or directory: OCI runtime attempted to invoke a command that was not found

错误信息提示了容器无法找到 /bin/bash 命令。这通常是因为容器内没有安装 Bash Shell,或者容器基础镜像不包含 Bash。在某些基础镜像中,可能使用其他 Shell,例如 /bin/sh

如果你想要在容器内部执行交互式 Shell,可以尝试以下方法:

  1. 使用默认 Shell: 有些容器内部默认的 Shell 可能不是 /bin/bash,而是其他路径。尝试使用容器内部默认的 Shell。

    docker exec -it <容器名称或ID> /bin/sh
    
  2. 查看可用 Shell: 使用以下命令查看容器内部有哪些可用的 Shell。

    docker exec -it <容器名称或ID> ls /bin/
    

    根据输出列表中的可用 Shell 进行选择。

  3. 使用不同的容器: 如果你确实需要使用 Bash,可能需要更换使用包含 Bash 的镜像。例如,使用 Ubuntu 或其他基于 Debian 的镜像,它们通常默认包含 Bash。

    docker exec -it <容器名称或ID> /bin/bash
    

请根据容器内部所支持的 Shell 和镜像的特性进行适当的调整。

5.3、查看正在运行的 Docker 容器使用的基础镜像

要查看正在运行的 Docker 容器使用的基础镜像,你可以通过以下方法之一来确定:

  1. 使用 docker ps 命令: 运行以下命令来查看正在运行的容器以及它们使用的镜像信息。

    docker ps
    

    这将列出当前正在运行的容器,包括容器名称、ID、使用的镜像、端口映射等信息。在 “IMAGE” 列中,你可以看到正在运行容器所使用的镜像名称。

  2. 使用 docker inspect 命令: 运行以下命令,将容器名称或 ID 替换为你要检查的容器的名称或 ID。

    docker inspect --format '{{.Config.Image}}' <容器名称或ID>
    

    这将输出容器使用的镜像名称。如果你得到的是完整的镜像名称(例如 ubuntu:latest),那么容器使用的是 Ubuntu 镜像。

  3. 进入容器内部查看: 如果你能进入容器的交互式终端,你可以查看容器内部的操作系统信息。

    cat /etc/os-release
    

    这会显示容器内部操作系统的详细信息,包括基础镜像的名称和版本。
    在这里插入图片描述

通过这些方法,你可以确定正在运行的 Docker 容器使用的是哪个基础镜像。注意,容器可以使用不同的基础镜像,具体取决于容器的配置和构建。

5.4、进入容器后怎么查看打包的软件在哪

which nginx

在这里插入图片描述

容器没有vi、vim和touch命令咋办

echo 6666 > test1.txt

6、容器排查

docker inspect 命令用于获取 Docker 容器、镜像、卷等对象的详细信息。它提供了关于这些对象的元数据,包括配置、网络设置、挂载点等。以下是 docker inspect 命令的基本用法:

docker inspect [选项] <对象名称或ID>

其中,选项可以包括 -f(格式化输出)、--format(指定输出格式)等。对象名称或 ID 是你要获取信息的容器、镜像、卷等对象的标识符。

示例用法:

  1. 获取容器详细信息: 若要获取容器的详细信息,可以运行以下命令:

    docker inspect <容器名称或ID>
    

    这将输出包含容器所有信息的 JSON 格式数据。

  2. 格式化输出: 使用 -f--format 选项可以指定输出的格式。例如,以下命令会输出容器的 IP 地址:

    docker inspect -f '{{.NetworkSettings.IPAddress}}' <容器名称或ID>
    

在这里插入图片描述

在这里,{{.NetworkSettings.IPAddress}} 是一个模板,用于从容器的详细信息中提取 IP 地址字段。

  1. 获取镜像信息: 若要获取镜像的详细信息,可以运行以下命令:

    docker inspect <镜像名称或ID>
    

    这将输出包含镜像所有信息的 JSON 格式数据。

  2. 获取卷信息: 若要获取卷的详细信息,可以运行以下命令:

    docker inspect <卷名称或ID>
    

    这将输出包含卷所有信息的 JSON 格式数据。

通过适当的选项和模板,你可以自定义输出的格式和内容,以满足你的需求。注意,输出是以 JSON 格式呈现的,因此你可能需要使用适当的工具来解析和处理这些数据。

7.1、将文件打包成 Docker 镜像

要将文件打包成 Docker 镜像,你需要创建一个 Dockerfile 并在其中定义镜像的构建过程。下面是一个示例的步骤:

  1. /root/imagespath 路径下创建一个名为 Dockerfile 的文件,内容类似于下面的示例:

    # 使用基础镜像
    FROM ubuntu:latest
    
    # 复制文件到容器
    COPY Dockerfile /app/Dockerfile
    COPY test.txt /app/test.txt
    

    这个示例的 Dockerfile 使用了基础的 Ubuntu 镜像,然后将 Dockerfiletest.txt 文件复制到镜像的 /app 目录下。

  2. 在终端中,进入到包含 Dockerfiletest.txt 文件的目录:

    cd /root/imagespath
    
  3. 使用以下命令来构建 Docker 镜像,其中 my-image 是你给镜像起的名称,:latest 是标签,表示版本号。

    docker build -t my-image:latest .
    

    注意,命令末尾的 . 表示使用当前目录作为构建上下文。Docker 会根据 Dockerfile 中的指令和当前目录中的文件构建镜像。

  4. 完成构建后,你可以使用以下命令运行新创建的镜像的容器:

    docker run -it my-image:latest
    

    这会在新的容器中运行你的镜像,并进入交互式终端。

请根据你的实际需求和文件内容进行相应的调整。这只是一个简单的示例,你可以根据自己的需求进行更复杂的构建过程。

7.2、将文件打包成 Docker 镜像例子

docker build 命令用于构建 Docker 镜像,它会根据 Dockerfile 中的指令和上下文构建一个新的镜像。下面是 docker build 命令的基本用法:

docker build [选项] <上下文路径>

其中,选项可以包括 -t(为镜像指定标签)、-f(指定 Dockerfile 文件路径)等。上下文路径是用于构建镜像的上下文环境,通常包含 Dockerfile 以及构建过程中所需的文件。

以下是一个简单的示例用法:

docker build -t my-image:latest /path/to/dockerfile-directory

在这个示例中:

  • -t my-image:latest:这个选项用于为构建的镜像指定标签。my-image 是镜像的名称,:latest 是标签,表示镜像的版本。你可以根据需要自定义镜像名称和标签。

  • /path/to/dockerfile-directory:这是包含 Dockerfile 的目录路径,也是构建的上下文路径。Docker 会将该目录下的所有文件复制到构建上下文中,供 Dockerfile 使用。

请注意,Dockerfile 是一个文本文件,包含一系列指令,用于指导 Docker 如何构建镜像。在使用 docker build 命令时,Docker 会根据 Dockerfile 中的指令逐步执行构建过程。你可以在 Dockerfile 中定义基础镜像、添加文件、运行命令等。

示例 Dockerfile 内容:

# 使用基础镜像
FROM ubuntu:latest

# 设置工作目录
WORKDIR /app

# 复制文件到容器
COPY . .

# 运行命令
RUN apt-get update && apt-get install -y python3

# 暴露端口
EXPOSE 80

# 定义启动命令
CMD ["python3", "app.py"]

通过这个 Dockerfile,你可以构建一个基于 Ubuntu 的镜像,复制当前目录中的文件到镜像中,安装 Python 等。使用 docker build 命令来构建这个镜像,然后运行它。

请根据你的具体需求和 Dockerfile 的内容进行构建镜像。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallFatMan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值