Docker镜像操作

Docker镜像操作

Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户几乎永远不会和 引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系 统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker 容器启动是需要一些文件的, 而这些文件就可以称为 Docker 镜像。

Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

sudo docker image ls
  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • IMAGEID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小

为了区分同一个仓库下的不同镜像,Docker 提供了一种称为标签(Tag)的功能。每个 镜像在列出来时都带有一个标签,例如latest、 12.10、12.04 等等。每个标签对组成特定镜像的一 些镜像层进行标记(比如,标签 12.04 就是对所有 Ubuntu12.04 镜像层的标记)。这种机制 使得同一个仓库中可以存储多个镜像。— 版本号

我们在运行同一个仓库中的不同镜像时,可以通过在仓库名后面加上一个冒号和标签名 来指定该仓库中的某一具体的镜像,例如 docker run –name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明从镜像 Ubuntu:12.04 启动一个容器,而这个镜像的操 作系统就是 Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。

Docker维护了镜像仓库,分为共有和私有两种,共有的官方仓库Docker Hub(https://hub.docker.com/)是最重要最常用的镜像仓库。私有仓库(Private Registry)是开发者或者企业自建的镜像存储库,通常用来保存企业 内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。

要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地,如

sudo docker image pull library/hello-world

上面代码中, docker image pull是抓取 image 文件的命令。 library/hello-world是 image 文件在仓库里面的位置,其中 library是 image 文件所在的组, hello-world是 image 文件的名字。

sudo docker image pull hello-world
sudo docker image rm 镜像名或镜像id
sudo docker image rm hello-world

3. Docker 容器操作

sudo docker run [option] 镜像名 [向启动容器中传入的命令]

常用可选参数说明:

  • -i 表示以”交互模式”运行容器
  • -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
  • –name 为创建的容器命名
  • -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
  • -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
  • -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
  • -e 为容器设置环境变量
  • –network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同

例如,创建一个交互式容器,并命名为myubuntu

sudo docker run -it --name=myubuntu ubuntu /bin/bash

在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。

sudo docker run -dit --name=myubuntu2 ubuntu
sudo docker exec -it 容器名或容器id 进入后执行的第一个命令
sudo docker exec -it myubuntu2 /bin/bash
列出本机正在运行的容器
sudo docker container ls

列出本机所有容器,包括已经终止运行的
sudo docker container ls --all
停止一个已经在运行的容器
sudo docker container stop 容器名或容器id

启动一个已经停止的容器
sudo docker container start 容器名或容器id

kill掉一个已经在运行的容器
sudo docker container kill 容器名或容器id
sudo docker container rm 容器名或容器id

4. 将容器保存为镜像

我们可以通过如下命令将容器保存为镜像

sudo docker commit 容器名 镜像名

5. 镜像备份与迁移

我们可以通过save命令将镜像打包成文件,拷贝给别人使用

sudo docker save -o 保存的文件名 镜像名
sudo docker save -o ./ubuntu.tar ubuntu

在拿到镜像文件后,可以通过load方法,将镜像加载到本地

sudo docker load -i ./ubuntu.tar

Original: https://www.cnblogs.com/minqiliang/p/16694650.html
Author: minqiliang
Title: Docker镜像操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611380/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 开源之夏 2022 与您相约

    活动简介 “开源之夏(英文简称 OSPP)”是中科院软件所”开源软件供应链点亮计划”指导下的一项面向高校学生的暑期活动,由中国科学院…

    数据库 2023年5月24日
    0117
  • 工厂模式

    工厂模式是java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一…

    数据库 2023年6月11日
    092
  • Golang并发编程——goroutine、channel、sync

    并发与并行 并发和并行是有区别的,并发不等于并行。 两个或多个事件在同一时间不同时间间隔发生。对应在Go中,就是指多个 goroutine 在单个CPU上的交替运行。 两个或者多个…

    数据库 2023年6月16日
    058
  • mysql进阶

    mysql进阶 1.下载二进制格式的mysql软件包 [root@mr ~]# wget https://downloads.mysql.com/archives/get/p/23…

    数据库 2023年5月24日
    0129
  • 什么是回表,怎么解决?

    表tbl有a,b,c三个字段,其中a是主键,b上建了索引,然后编写sql语句SELECT * FROM tbl WHERE a=1这样不会产生回表,因为所有的数据在a的索引树中均能…

    数据库 2023年5月24日
    081
  • 1. SQL

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    088
  • 《MySQL自传》

    撰写本文查阅了大量参考资料,也得到很多朋友的指点帮助,特别感谢: Jimmy Yang——阿里云数据库研究员,原Oracle InnoDB Architect. 彭立勋——华为云数…

    数据库 2023年6月11日
    090
  • 设计 | ClickHouse 分布式表实现数据同步

    作者:吴帆 青云数据库团队成员主要负责维护 MySQL 及 ClickHouse 产品开发,擅长故障分析,性能优化。 在多副本分布式 ClickHouse 集群中,通常需要使用 D…

    数据库 2023年5月24日
    0100
  • vue部署在nginx后刷新404,nginx.conf一行代码解决掉

    直接 vim conf/nginx.conf文件 server {listen 8081;server_name localhost; charset koi8-r; access…

    数据库 2023年6月14日
    0104
  • 高可用 | repmgr 构建 PostgreSQL 高可用集群部署文档【建议收藏】

    作者:颜博 青云科技数据库研发工程师目前从事 PostgreSQL 产品开发工作,热衷于 PostgreSQL 数据库的学习和研究 上一期我们介绍了 PG 集群复制管理工具 rep…

    数据库 2023年5月24日
    076
  • 如何成为一名开发人员——第 3 部分:人际交往能力

    在前两节中,我介绍了技术和非技术技能。但是,编程生涯不能凭空出现!需要彼此才能茁壮成长。 你听说过”铁磨铁”这句话。这在软件开发行业当然是正确的。我的大部分…

    数据库 2023年6月14日
    080
  • Linux 学习笔记2(未完待续)

    Linux 学习笔记2 学习Linux的原因 Linux刚面世时并没有图形界面,所有操作全靠命令完成,如磁盘操作、文件读写、目录操作、进程管理、文件权限; 在职场中,大量的服务器维…

    数据库 2023年6月14日
    076
  • mybatis SelectKey解析

    1.selectKey介绍及作用 resultType:sql返回的java类型 statementType:STATEMENT|PREPARED|CALLABLE三种默认PREP…

    数据库 2023年5月24日
    089
  • Redis安装

    Redis For Windows 安装 Redis 官方只提供源码包,不支持Windows 老版本 Windows 版本下载地址(最高版本为3)老版本地址 新版本 Windows…

    数据库 2023年6月6日
    096
  • 项目主干分支的server.sh被“覆盖”了?一个配置,解除烦恼

    我司项目利用springboot搭建,应用在部署到各环境后,程序启动命令靠的是我们在工程里配置的 scripts/server.sh。这个server.sh里最重要的东西是程序启动…

    数据库 2023年6月9日
    0109
  • MyBatis-Plus 实现数据库字段更新为 NULL

    feeMapper.update(Wrappers.lambdaUpdate() .eq(FeePO::getId, feeDO.getId()) .set(ObjectUtils…

    数据库 2023年5月24日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球