使用Docker镜像

<h3 id="什么是docker镜像">什么是Docker镜像?

Docer的镜像是一个只读的文件系统,除了提供容器(进程)运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会改变。

Docker Hub上有大量的高质量的镜像可以用,从Docker镜像仓库获取镜像的命令是docker pull,其命令格式为

   docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

镜像名称的格式为:

  • Docker 镜像仓库地址:地址的格式一般是 [:端口号] 。默认地址是 Docker Hub。

  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 / 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。

有了镜像之后,我们就可以以这个镜像为基础启动一个容器来运行。以上面的 ubuntu:16.04 为 例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

 docker run -it --rm \
    ubuntu:16.04 \
    bash

这里我们是手动的根据镜像启动容器,我们接下来看下docker run的各种参数的详解。Docker run后的参数很多,Docker会在隔离的容器中运行进程,当运行docker run 命令时,Docker回启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新的定义,就是说,docker run可以控制一个容器运行时的行为,比如监听的端口号,它可以覆盖docker build在构建镜像时的一些默认配置。

正常的命令行为

docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

这里我们先来说下OPTIONS

Detached(-d)
容器运行在后台模式?后台模式和前台模式的区别待详细。

Name(--name)
指定运行的容器名称

Network settings(--net 或 --mac-address)
默认情况下所有容器都是开启了网络接口,可以使用--net none来关闭网络接口,也可以使用 --mac-address 12:34这种方式来设置容器的MAC地址。

Clean up(--rm)
设置该命令时,每个容器在退出时,它的文件系统并不会保存下来。并且--rm和-d是不可同时使用的。

暴露端口(-p)
使用-p来使容器和主机的对应端口进行绑定,可以手动指定,也可以走默认的。

环境变量(-e)
使用-e来给容器中进程设定环境变量,甚至可以覆盖已经存在的环境变量,比如 -e "deep=purple"

COMMAND也就是CMD是可以用来覆盖默认的执行命令的。

run指令参考文章

想要列出已经下载了的镜像,可以使用docker image ls命令。

在镜像下载和上传的过程中镜像是保持着压缩状态的,所以这里列表出来的镜像的大小会比较大。

docker system df 命令用来查看镜像、容器、数据卷所占用的控件、

由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为none的镜像。这类无标签镜像也被成为虚悬镜像。

docker image ls -f dangling=true 用来查看虚悬镜像

首先,如果有在使用该镜像的容器正在运行,则需要首先停止该容器并删除该容器

//停止运行中的容器
docker stop [容器id]

//删除容器
docker rm [容器id]

//删除镜像
docker rmi [镜像id]


<h3 id="中间层镜像">中间层镜像

Docker会利用中间层镜像,所以在使用了一段时间之后,可能会看到一些依赖的中间层镜像。

docker image -a 列出包括着中间层镜像在内的所有镜像

//根据仓库名列出镜像
docker image ls ubuntu 
//列出特定的某个镜像
docker image ls ubuntu:16.04
//列出所有镜像的id
docker image ls -q

docker inspect [镜像ID]

<h3 id="利用commit理解镜像构成">利用commit理解镜像构成

docker commit命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,定制镜像最好还是使用Dockerfile来完成。

镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。之前我们经常使用docker hub上的镜像,但是当这些镜像无法直接满足需求时,我们就需要定制这些镜像。

我们之前有学,镜像是多层存储的,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础

docker run --name blackwebserver -d -p 80:80 nginx

使用NGINX镜像启动一个容器,命名为blackwebserver,并且映射了80端口,

进入容器的命令:

docker exec -it blackwebserver 

将修改了的容器保存为新的镜像

docker commit blackwebserver nginx/blackwebserver

docker commit命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

这里的commit就有点类似于git commit了,将修改好的程序commit生成我们的静态文件(项目)。然后可以将镜像push到镜像仓库中(docker push 指令)。

这里简单的介绍了下镜像的各种操作指令,当然镜像的实现原理还是需要去深究一下子的。下文再叙!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读8.8k次,点赞2次,收藏7次。本文介绍Docker Compose的网络的配置。_docker compose 网络配置
文章浏览阅读1.5w次,点赞7次,收藏76次。原网提供的教程需要先刷系统到U盘,再把U盘的系统转移到emmc,但是我下面提供的镜像不需要此操作,注意区分。双头USB线一根(买或者自己做,网上有教程);电脑一台;镊子或者别针(或者其他导电的东西,用来短接主板);螺丝刀,电吹风(加热背胶更好撕);U盘一个(刷机和扩展玩客云硬盘容量都用得上);下面这些链接里面的资源下载备用。#镜像地址:https://www.aliyundrive.com/s/NXjbaKC3Hyq提取码: 5i7a。_玩客云 armbian
文章浏览阅读940次,点赞20次,收藏20次。通过 docker run 命令创建一个新的容器。
文章浏览阅读1k次,点赞20次,收藏20次。Podman 是一个开源的容器运行时项目,可在大多数 Linux平台上使用。Podman提供与Docker 非常相似的功能。Podman 提供了一个与 Docker 兼容的 CLI 工具(命令行界面),可以这样说,会使用 docker 基本就会使用 podman。_podman 替代
文章浏览阅读2.1k次。请注意,这些命令需要在 Docker 主机上执行,并且需要有相应的权限才能访问容器的日志文件。确保你有足够的权限来执行这些命令,或者在以管理员身份运行命令。此外,还要注意这些命令可能会清空所有容器的日志文件,包括正在运行的和已经停止的容器。如果只想清空特定容器的日志文件,可以根据需要修改命令。删除容器中netcore控制台存储到docker日志记录。_docker清空日志命令
文章浏览阅读1.1k次,点赞37次,收藏40次。nacos搭建集群连接mysql实现nginx负载均衡实现讲解。_niginx nacos 集群实现负载均衡
文章浏览阅读3.5k次,点赞35次,收藏36次。Docker 是一种容器引擎,可以在容器内运行一段代码。Docker 镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker 使用一个名为 Dockerfile 的文件。Dockerfile 是一个包含许多指令(RUN、COPY、EXPOSE 等)的文件。成功执行这些命令后,docker 将创建一个镜像供我们在任何地方使用。
文章浏览阅读2.6k次。2.即使在Dockerfile中换源,但在bulid过程中,依然可以注意到连接的是bebian官方源,因为debian 12改了,默认不使用/etc/apt/sources.list文件,这个文件初始是空的,真正的仓库配置在 /etc/apt/sources.list.d/ 目录下,故,修改源需要用RUN rm -rf /etc/apt/sources.list.d/*给每个pip install后面都加上-i https://pypi.tuna.tsinghua.edu.cn/simple。_error: failed to solve: process "/bin/sh -c yum makecache" did not complete
文章浏览阅读9.7k次,点赞2次,收藏4次。嗨,各位猫头虎博主的小伙伴们!。本文将详细分析该问题的根本原因、解决方法以及如何避免类似的状况。让我们一起来解决这个Bug吧!在云原生应用开发中,Docker是不可或缺的工具,但在使用过程中会遇到各种问题,OCI runtime create失败就是其中之一。本文通过深入分析问题的原因,提供了解决方法和避免类似问题的建议。希望本文能帮助您更好地理解和应对这个常见的Bug。_error response from daemon: oci runtime create failed: container_linux.go:34
文章浏览阅读2.2k次,点赞67次,收藏44次。[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS && 开启AP模式
文章浏览阅读1k次,点赞52次,收藏38次。Docker的运行,依赖linux的环境,官方提供了Docker Desktop for Windows,但是它需要安装Hyper-V,Hyper-V是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。安装过程如果出现超时,不要灰心,多试几次,总会成功的。执行完毕后会重启,在重启的过程中进行安装。此命令省略了镜像版本和运行参数,docker使用latest作为版本,即最新版本。从hello world的例子中,也可以体验到,docker实例的运行是非常快的。
文章浏览阅读3.6k次,点赞77次,收藏74次。【Docker】Docker的使用案例以及未来发展、Docker Hub 服务、环境安全的详细讲解
文章浏览阅读1w次。要删除已存在的 Docker 镜像,您可以使用docker rmi命令。以下是完整的流程。_docker 删除镜像
文章浏览阅读3.3k次。当安装好docker-compose并添加执行权限后,执行命令docker-compose 相关命令时出现 -bash: /usr/local/bin/docker-compose: 无法执行二进制文件。应该是安装包有问题,网上找了几种重新安装方法途径,还是会出现这个问题,最终找到一种可靠重新安装的解决方法,原文。2.从Docker官方网站下载Docker Compose最新版本的二进制文件(下载稍慢)3.授予Docker Compose二进制文件执行权限。1.先卸载Docker Compose的旧版本。_-bash: /usr/local/bin/docker-compose: cannot execute binary file
文章浏览阅读1.1k次。备注:Mysql5.7+ password字段 已改成 authentication_string字段。#备注:Mysql8.0修改密码方式已有变化(此处是个坑,需要注意)#设置完密码策略后重新输入修改命令,更改后的密码为123456。java默认安装路径/usr/lib/jvm/;#进入/etc/profile 配置文件。#查看正在使用的MySQL repo。#验证开启的8080端口是否生效。#验证开启的8080端口是否生效。#执行命令来开启8080端口。#先把root的旧密码置空。_yum install -y java 安装在什么目录
文章浏览阅读1.9k次。Windows11下清理Docker Desktop与wsl的C盘空间占用_wsl清理缓存
文章浏览阅读8.5k次,点赞2次,收藏20次。本机想要启用gpu加速计算,需要由一张多余的nVidia显卡。需要提前禁用nouveau:lsmod | grep nouveau没有输出即禁用了需要安装1、显卡驱动、2、cuda库(安装cuda会自动安装显卡驱动)3、cudnn(深度神经网络的GPU加速库,需要神经网络则安否则可以不安)安装完成后,可以运行nvidia-smi查看GPU设备的状态。_docker gpu
文章浏览阅读6k次,点赞14次,收藏39次。1.Dockerfile命令初识,CMD...;2.idea配置docker,图形化界面;3.编写Dockerfile把jar包制作成镜像,并用idea一键生成和启动容器;4.在Linux中测试,在宿主机用swagger进行测试;_springboot dockerfile
文章浏览阅读1k次,点赞2次,收藏2次。截止目前,Redis 的最新稳定版本是 6.2.6。这个版本在可读性、性能和稳定性方面进行了改进,并增加了一些新的命令和功能。_docker redis配置文件
文章浏览阅读1.5k次,点赞34次,收藏35次。使用上面的Cpolar https公网地址,在任意设备的浏览器进行访问,即可成功看到我们火狐浏览器界面,这样一个公网地址且可以远程访问就创建好了,使用了cpolar的公网域名,无需自己购买云服务器,即可发布到公网进行远程访问!上面在本地成功部署了FireFox 火狐浏览器,并局域网访问成功,下面我们在Linux安装Cpolar内网穿透工具,通过cpolar 转发本地端口映射的http公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器.下面是安装cpolar步骤。