当前位置: 首页 > news >正文

《Docker镜像与容器技术基础操作及应用研究》

项目:Docker镜像与容器技术的基本操作

姓名:飞花似梦Flydream

日期:2024年2月26日

目录

关闭防火墙 关闭selinux 关闭networkmanager

Docker安装

Docker主机远程复制文件

容器的基本操作

创建与启动容器

查看容器的运行状态

按照指定名称创建容器

启动容器

终止容器的运行

创建并启动容器

报错

停止并删除容器

强制删除正在运行容器的结果

强制删除正在运行容器指令

将容器导出为文件,并传输到另一台主机

harbor主机,查看当前目录文件

导入容器

启动并进入容器


关闭防火墙 关闭selinux 关闭networkmanager

#!/bin/bash# 关闭并禁用防火墙(firewalld)
systemctl stop firewalld.service
systemctl disable firewalld.service# 设置SELinux为disabled状态(永久生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 # 临时设置SELinux为permissive模式(立即生效)# 关闭并禁用NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager# 启用并启动网络服务(如果需要基于传统的network服务进行网络管理)
systemctl enable network
systemctl start networkecho "防火墙、SELinux和NetworkManager已关闭,并且都已设置为不再开机启动。"# 可选:确认每个服务的状态
systemctl status firewalld
systemctl status NetworkManager
sestatus
systemctl status network

Docker安装

#!/bin/bash# 更新系统软件包
yum update -y# 安装必要的软件包,包括yum-utils和devicemapper驱动依赖项
yum install -y yum-utils device-mapper-persistent-data lvm2# 设置阿里云的Docker CE仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 清除旧的yum缓存并生成新的缓存
yum clean all
yum makecache fast# 安装最新版本的docker-ce
yum install -y docker-ce# 启动Docker服务
systemctl start docker# 设置Docker在开机时自动启动
systemctl enable docker# 验证Docker是否安装成功及显示版本号
echo "Docker版本信息:"
docker --version
echo "Docker信息:"
docker info

这个脚本首先更新了系统的软件包,然后安装了yum-utils、device-mapper-persistent-data和lvm2这三个与Docker运行相关的软件包。接着添加了阿里云的Docker CE Yum源,并清理缓存以确保从新源获取数据。最后,它会安装Docker CE,启动Docker服务,并设置其开机自启,以及验证Docker的安装版本。

[root@localhost /]# docker save -o httpd centos/httpd Error response from daemon: No such image: centos/httpd

当您在Docker中尝试使用 docker save 命令保存镜像时,如果遇到错误 "Error response from daemon: No such image",这意味着Docker守护进程找不到指定名称或标签的镜像。在这个案例中,Docker无法找到名为 "centos/httpd" 的镜像。

要解决这个问题,请按照以下步骤操作:

  1. 确认镜像是否存在
    使用 docker images 命令列出所有本地镜像,确保镜像名和标签正确无误,并且镜像确实已经下载到了本地环境。
docker images

  1. 下载或拉取镜像
    如果 "centos/httpd" 镜像不存在于本地,需要先从Docker Hub或其他注册表下载它:
docker pull centos/httpd

  1. 再次尝试保存镜像
    在成功拉取镜像后,再执行保存命令:
docker save -o httpd.tar centos/httpd


注意:通常我们会将保存的镜像输出到一个 .tar 文件中以便存储或传输,这里将文件名更改为 httpd.tar

如果镜像名是正确的,但在Docker官方仓库中不存在,则需要检查是否是从第三方仓库或者自定义仓库拉取的,如果是这种情况,请提供正确的完整镜像名(包括可能的用户名/组织名和标签)。

Docker主机远程复制文件

# 从 Docker Hub 中拉取名为 centos/httpd 的镜像。
# 这个命令会下载指定标签的官方 CentOS HTTPD 镜像到本地机器。
docker pull centos/httpd# 使用 docker save 命令将刚拉取的 centos/httpd 镜像保存为一个 tar 包文件。
# `-o httpd` 参数指定了输出文件名,这里将会在当前目录下生成一个名为 "httpd" 的 tar 文件,
# 这个文件包含了镜像的所有层和元数据信息,可用于离线分发或备份镜像。
docker save -o httpd centos/httpd# 执行 ls(list)命令列出当前工作目录下的所有文件和目录。
# 这一步是为了确认 `httpd` 文件是否已经成功创建。
ls# 使用 scp(secure copy)命令将刚才保存的 "httpd" 文件通过 SSH 安全地复制到远程主机。
# 这里的目标地址是 root 用户在 IP 地址为 192.168.100.100 的远程服务器上,
# 将本地的 "httpd" 文件复制过去,并且也保存为 "httpd" 这个名字。
scp httpd root@192.168.100.100:httpd

请注意,在scp中,通常建议为输出的tar文件添加.tar扩展名以清晰表示其类型。例如,应改为 docker save -o httpd.tar centos/httpd,然后在第27行中相应的使用该文件名进行复制。

此外,如果在实际操作过程中没有在第26行看到 httpdhttpd.tar 文件,则表明前面的 docker save 操作可能未成功或者文件名不正确。在执行 scp 之前,需要确保这个文件确实存在并可访问。

这条命令是用于从一个tar文件中加载Docker镜像的:

[root@harbor ~]# docker load -i httpd

docker load 命令是用来从给定的 tar 文件(这里为 httpd,假设它是一个之前通过 docker save 命令保存的 Docker 镜像文件)中导入镜像及其相关元数据到本地 Docker 引擎。执行该命令后,Docker 会读取并解析这个文件,并将其中包含的镜像层加载至本地存储库。

接下来的输出内容显示了镜像加载的过程和每个层的进度:

  • 071d8bd76517: 这是一个镜像层ID,后面跟的是该层加载的进度条及大小信息。
  • 同理,d15c61d3ecda7c937d8a9f4f920640105caf 分别代表了其他镜像层及其加载状态。
  • 最后一行 Loaded image: centos/httpd:latest 表示整个镜像加载完毕,并且加载的是名为 centos/httpd 的镜像,标签为 latest

通过这个过程,你已经在本地 Docker 环境成功恢复了 centos/httpd 镜像,可以随时使用此镜像启动容器。

容器的基本操作

创建与启动容器

docker create -it hello-world /bin/bash
  • docker create:用于创建一个新的Docker容器但不启动它。
  • -it:两个参数结合使用,表示在新容器中启用交互式(interactive)模式和终端(tty)。这样可以在容器内部获取一个命令行界面。
  • hello-world:是镜像名称,这里创建的是一个简单的“Hello World”示例镜像。
  • /bin/bash:指定在新容器启动时执行的命令,这里是启动一个Bash shell。

查看容器的运行状态

docker ps -a

按照指定名称创建容器

docker create -it --name conht httpd /bin/bash
  • --name conht:为新创建的容器指定一个名字叫 "conht"。

启动容器

docker start conht
  • 该命令用于启动之前通过 docker create 创建但未运行的名为 "conht" 的容器。

终止容器的运行

docker stop conht
  • 此命令用于停止名为 "conht" 的正在运行的容器。

创建并启动容器

报错

docker run httpd:latest /bin/bash -c ls
  • httpd:latest 中,httpd 是镜像仓库名,代表Apache HTTP服务器的官方镜像;:latest 是标签,通常指代该仓库下最新的镜像版本。
  • 这条命令会自动从Docker Hub拉取或使用本地缓存的 "httpd:latest" 镜像,并基于此镜像创建并启动一个新的容器,在容器内执行 /bin/bash -c ls 命令,即运行一次ls列出当前目录下的文件。

:new 这里是标签,注意查看tag!

":"后面的要和tag一一对应!!!

停止并删除容器

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                        PORTS     NAMES
69ec2697184a   httpd:latest   "/bin/bash -c 'while…"   About a minute ago   Up About a minute             80/tcp    mystifying_blackburn[root@localhost ~]# docker rm 69ec2697184a
Error response from daemon: cannot remove container "/mystifying_blackburn": container is running: stop the container before removing or force remove[root@localhost ~]# docker stop  69ec2697184a
69ec2697184a[root@localhost ~]# docker rm 69ec2697184a
69ec2697184a
  • docker ps -a 列出所有容器(包括已停止的容器)的信息。
  • 尝试删除运行中的容器ID 69ec2697184a 时失败,因为容器必须先被停止才能删除。
  • 使用 docker stop 停止容器后再删除容器成功。

强制删除正在运行容器的结果

强制删除正在运行容器指令
docker rm -f ContainerID
  • -f 或 --force 参数用于强制删除一个容器,即使容器仍在运行也会立即停止并删除。

将容器导出为文件,并传输到另一台主机

[root@localhost ~]# docker export 48686b00855b >myhttpd1
[root@localhost ~]# scp myhttpd1 root@192.168.100.100:myhttpd1
  • docker export 用于导出容器快照到标准输出,这里的 48686b00855b 是要导出的容器ID。
  • 输出重定向 > 到名为 myhttpd1 的文件中,保存了容器的文件系统内容。
  • 使用 scp 命令将导出的文件传输至远程主机 192.168.100.100 上的用户 root 家目录下。

harbor主机,查看当前目录文件

导入容器
[root@harbor ~]# cat myhttpd1 | docker import  - myhttpd1:v1
sha256:a2e66b9ae0246d3fb4288d272c64e62a736fa333e1d3b31a528fa9c2d9a2330c[root@harbor ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
myhttpd1       v1        a2e66b9ae024   5 minutes ago   166MB
  • 在接收文件的主机上,使用 cat 命令读取文件内容并通过管道传递给 docker import 命令,导入容器快照并创建新的镜像,命名为 myhttpd1:v1。
  • 执行完导入操作后,通过 docker images 查看本地镜像列表,可以看到刚刚导入的新镜像 myhttpd1:v1 及其相关信息。

启动并进入容器
[root@harbor ~]# docker run -it a2e66b9ae024 /bin/bash
root@42889c4077b1:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
  • 最后,使用 docker run 基于导入的镜像ID a2e66b9ae024 创建并启动一个新的容器,并在其中启动了一个Bash shell。
  • 在容器内执行了 ls 命令,列出了容器根文件系统的目录结构。


http://www.mrgr.cn/news/70059.html

相关文章:

  • shodan5(泷羽sec)
  • core-js 解决浏览器兼容性问题的工具之一
  • css3D变换用法
  • langgraph_plan_and_execute
  • 青龙面板脚本--阿里云盘任务脚本
  • 【网络安全】Java线程安全及非线程安全
  • 最简单解决NET程序员在centos系统安装c#网站
  • 网络安全之SQL初步注入
  • 第三十九章 基于VueCli自定义创建项目
  • 结构体是否包含特定类型的成员变量
  • 基于协同过滤算法的社交网络平台(协同过滤算法)
  • 企业官网的在线客服,如何提高效果?
  • 英飞凌Aurix2G TC3XX GPT12模块详解
  • 【计网】数据链路层笔记
  • 大数据机器学习算法与计算机视觉应用04:多项式
  • Qt|绘制100万个图元大规模场景
  • 项目功能--运营数据统计报表导出
  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • c++ floyd判圈算法
  • Spring中@Autowired@Resource和@Inject注解区别