docker 镜像的使用与创建(三)

news2024/11/25 20:16:18

相关文章:

linux上docker容器运行web应用简单介绍(二)_做测试的喵酱的博客-CSDN博客

linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客

Docker 容器使用 | 菜鸟教程

linux应用docker基本使用(一)_做测试的喵酱的博客-CSDN博客

 一、images/镜像介绍

images/镜像:

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个image文件里面。

运行这个文件,就会生成一个虚拟容器。

程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

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

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

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

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

有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
 

注意:

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

二、查看镜像列表 docker images

docker images

[root@ecs-39233 ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
test/ubuntu       v1        ae495df32c52   17 hours ago   77.8MB
ubuntu            latest    5a81c4b8502e   7 days ago     77.8MB
hello-world       latest    9c7a54a9a43c   2 months ago   13.3kB
ubuntu            15.10     9b9cb95443b5   6 years ago    137MB
training/webapp   latest    6fae60ef3446   8 years ago    349MB

各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

[root@ecs-39233 ~]# docker run -t -i ubuntu:15.10 /bin/bash
root@a8be8872b767:/# 

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

三、拉取镜像 docker pull 

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

docker pull 

举例:

docker pull ubuntu:13.10

四、查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

docker search httpd
[root@ecs-39233 ~]# docker search httpd
NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                The Apache HTTP Server Project                  4469      [OK]       
clearlinux/httpd                     httpd HyperText Transfer Protocol (HTTP) ser…   5                    
paketobuildpacks/httpd                                                               0                    
vulhub/httpd                                                                         0                    
jitesoft/httpd                       Apache httpd on Alpine linux.                   0                    
openquantumsafe/httpd                Demo of post-quantum cryptography in Apache …   0                    
avenga/httpd-static                                                                  0                    
dockette/httpdump                                                                    0                    
betterweb/httpd                                                                      0                    
dockette/apache                      Apache / HTTPD                                  1                    [OK]
centos/httpd-24-centos7              Platform for running Apache httpd 2.4 or bui…   45                   
manageiq/httpd                       Container with httpd, built on CentOS for Ma…   1                    [OK]
centos/httpd-24-centos8                                                              1                    
dockerpinata/httpd                                                                   1                    
19022021/httpd-connection_test       This httpd image will test the connectivity …   0                    

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

五、删除镜像

镜像删除使用 docker rmi name

比如我们删除 hello-world 镜像:

$ docker rmi hello-world

删除镜像的前提,是依赖镜像的容器停止运行,并删除容器。才能删除镜像。

  1. 查看正在运行的容器:

    $ docker ps

    这将列出当前正在运行的容器及其相关信息。

  2. 停止正在使用目标镜像的容器:

    $ docker stop <container_id>

    <container_id> 替换为需要停止的容器的ID。例如,0935de4f00f3 是您正在尝试删除的镜像所依赖的容器ID。

  3. 删除停止的容器:

    $ docker rm <container_id>

    使用上述命令删除停止的容器。

  4. 现在您可以尝试删除映像:

    $ docker rmi training/webapp

    如果删除成功,您将收到成功的确认消息。

​六、创建镜像

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

6.1 直接容器中修改内容,然后生成镜像(不推荐)

使用 docker run 命令启动一个容器,基于你想要的已有镜像。

例如,我们以 Ubuntu 为例,

1、运行 docker run -it --name mycontainer ubuntu:latest

2、进入容器的交互式终端

docker exec -it mycontainer /bin/bash

3、在容器内执行 apt-get update 命令更新软件包列表。

运行

apt-get update

4、执行 apt-get install 命令安装所需的软件包。

例如,运行

apt-get install wget 

安装 wget 工具。

完成所有修改后,按下 Ctrl + D 或运行 exit 命令退出容器。

5、使用 docker commit 命令创建新的镜像

运行

docker commit mycontainer myimage:latest
  •  mycontainer 是你所创建的容器名称
  • myimage:latest 是你想要的新镜像的名称和标签。

Docker 将使用容器中的修改创建一个新的镜像,名为 myimage,标签为 latest。

6、查看已创建的新镜像

docker images

docker images命令查看已创建的新镜像 myimage:latest。

这个新镜像将基于 Ubuntu 镜像,但已包含了容器内的修改,包括执行了 apt-get update 和安装了 wget。

请注意,这只是一个简单的示例,实际场景中可能会涉及更复杂的修改和配置,在容器中进行的任何修改都会反映在最终生成的镜像中,但这可能会导致镜像变得臃肿和不稳定。

更佳的方法是使用 Dockerfile 来记录所有步骤,并通过构建命令生成新的镜像。但是,如果只是需要快速测试和生成一个临时镜像,上述步骤也是可行的。

6.2 docker build 创建镜像(推荐)

Dockerfile 是用于构建自定义镜像的文本文件。

当使用 Docker 构建镜像时,可以使用 Dockerfile 文件来定义构建过程中的操作和配置。docker build 命令根据 Dockerfile 中的指令自动化构建新的镜像。

以下是使用 docker build 创建镜像的一般流程,举例如何使用 Dockerfile 构建一个基于 Ubuntu 的镜像,并安装 Node.js:

1、在一个目录下创建一个名为 Dockerfile 的文件,用于定义镜像的构建过程。

2、在 Dockerfile 中编写构建指令,例如指定基础镜像、拷贝文件、运行命令、设置环境变量等。每个指令都会在构建过程中按照顺序执行。

以下是一些常用的指令:

  • FROM:指定基础镜像,例如 FROM ubuntu:latest
  • RUN:在容器内部执行命令,例如安装软件包、运行脚本等。
  • COPY:复制文件或目录到容器中。
  • WORKDIR:设置容器的工作目录。
  • EXPOSE:定义容器监听的端口。
  • CMD:指定容器启动后默认执行的命令。

举例:

# 设置基础镜像
FROM ubuntu:latest

# 更新软件包列表
RUN apt-get update

# 安装 Node.js 和 npm
RUN apt-get install -y nodejs npm

# 映射端口
EXPOSE 80

# 设置工作目录
WORKDIR /app

# 拷贝应用程序文件
COPY . /app

# 安装应用程序依赖
RUN npm install

# 启动应用程序
CMD ["npm", "start"]

注意:

  1. 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  2. 第一条FROM,指定使用哪个镜像源
  3. RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

3、保存文件并关闭编辑器。

4、 打开终端,导航到 Dockerfile 所在的目录。

5、docker build构建镜像:

命令的基本语法如下:
 

docker build -t <new_image_name>:<tag> <path_to_dockerfile_directory>
  • <new_image_name>:<tag> 是你想要的新镜像的名称和标签,
  • <path_to_dockerfile_directory> 是 Dockerfile 所在的目录路径。

Docker 将读取 Dockerfile 中的指令,并根据其构建过程创建新的镜像。构建过程中,Docker 还会下载和安装所需的软件包、运行命令、复制文件等。

举例:

docker build -t mynodeapp:latest .

这将使用当前目录下的 Dockerfile 文件开始构建过程,并将生成的镜像命名为 mynodeapp,标签为 latest。 

6、等待构建过程完成。Docker 将按照 Dockerfile 中的指令执行相应操作,包括安装 Node.js 和 npm、拷贝应用程序文件等。

7、完成后,你将在本地机器上拥有一个新的镜像 mynodeapp:latest。可以使用它来运行容器,例如:

docker run -d -p 8080:80 mynodeapp:latest

这将在后台启动一个容器,并将容器内的端口 80 映射到本机的端口 8080。 

通过以上步骤,你就可以使用 Dockerfile 和 docker build 命令创建自定义的镜像,并按照需求进行配置和操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

29. 求出商品连续售卖的时间区间

文章目录 题目需求思路一实现一题目来源 题目需求 从订单详情表&#xff08;order_detail&#xff09;中&#xff0c;求出商品连续售卖的时间区间。 期望结果如下&#xff1a; sku_id &#xff08;商品id&#xff09;start_date &#xff08;起始时间&#xff09;end_date &…

鸢尾花书简介

鸢尾花书简介 鸢尾花书 系列介绍1《编程不难》2《可视之美》3《数学要素》4《矩阵力量》5《统计至简》6《数据有道》7《机器学习》 重要链接 特别棒&#xff0c;极力推荐&#xff01;&#xff01;&#xff01; 鸢尾花书 系列介绍 1《编程不难》 《编程不难》&#xff1a;https:…

win11预览版更新,并尝试使用Copilot

文章目录 win11预览版更新&#xff0c;并使用Copilot先说结果所需内容具体操作更新操作系统版本更新Edge安装ViVeTool v0.3.3 测试Copilot问题唯一优点 总结 win11预览版更新&#xff0c;并使用Copilot 先说结果 体验一言难尽&#xff0c;就相当于是一个快捷聊天提问窗口。 自…

C语言实现WiFi数据收发(电脑作为服务器)

功能实现&#xff1a; 手机与电脑在一个局域网&#xff0c;实现手机与电脑之间数据收发。 主要是用socket协议完成功能。 电脑作为服务器&#xff0c;手机作为客户端 编程环境&#xff1a; 电脑端变成环境&#xff1a;VC6.0 手机端WiFi助手&#xff1a; 核心代码&#xff1a; …

K8S平台应用安全(Secret Service Ingress)

平台应用安全 1 平台应用安全1.1 敏感数据1.1.1 应用数据1.1.2 Secret基础1.1.3 Secret案例11.1.4 Secret案例2 1.2 数据访问1.2.1 网络体系解读1.2.2 Service实践1.2.3 Service进阶1.2.4 Service解读 1.3 应用流量1.3.1 Ingress基础1.3.2 Ingress实践1.3.3 Ingress进阶1.3.4 I…

用Python实现黑客代码

前言 用Python实现黑客代码&#xff0c;根本关不掉的窗口 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 首先先介绍一下使用到的tkinter库 Tkinter 是 P…

通付盾联合嘶吼安全产业研究院共同发布《数据安全细分市场调研报告》并成功入选数据安全产业图谱多项细分领域,附报告!

7月4日&#xff0c;通付盾联合嘶吼安全产业研究院共同发布《时维鹰扬履践致远&#xff1a;数据安全细分市场调研报告2023》。 百炼露锋芒&#xff0c;本次《时维鹰扬履践致远&#xff1a;数据安全细分市场调研报告2023》聚焦数据安全市场细分领域市场规模、厂商玩法和产品竞争情…

二十三种设计模式第十四篇--策略模式

策略模式&#xff1a;主要围绕一个类的行为或者其算法在运行时更改&#xff0c;也是一种行为型模式。 在软件开发中&#xff0c;我们经常遇到需要根据不同的情况选择不同算法或行为的情况。传统的做法是使用大量的条件语句来实现这种逻辑&#xff0c;但这样的实现方式往往难以…

Numpy学习(参考)

目录 一、前言 二、numpy官方文档 文档划分 参数规范 相关知识明知 Routines学习(部分) 1、创建 2、数组操作常用 ufunc 三、numpy基本操作 开篇探索 数据类型 创建数组 创建数组有5种常规机制 常用创建方法 拷贝创建 数组运算 形状操作 查看形状 形状变换 …

第124天:内网安全-代理技术Socks协议路由不出网后渗透通讯CS-MSF上线

知识点 #知识点&#xff1a; 1、代理软件使用-Win&Linux 2、代理协议使用-Socks4/5 3、CS&MSF-网络通讯&控制上线-隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通的问题&…

MySQL数据库------------数据库的安装-----开始步入梦想

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————————— 这一篇文章主要讲解一下MySQL的下载 数据库MySQL 这是 CentOS7 的 mysql 安装&#xff0c;如果有其他版本的需求&#xff…

C++ 环境设置

本地环境设置 如果您想要设置 C 语言环境&#xff0c;您需要确保电脑上有以下两款可用的软件&#xff0c;文本编辑器和 C 编译器。 文本编辑器 这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。 文本编辑器的名…

tqdm笔记

目录 tqdm笔记导入显示进度条与enumerate一起使用 tqdm报错tqdm在notebook里每次刷新增加一行 tqdm笔记 导入 from tqdm import tqdm显示进度条 for i in tqdm(range(100)):time.sleep(0.01)与enumerate一起使用 a list(range(100)) for i, j in enumerate(tqdm(a)):time.…

Windows系统封装教程

一、封装前准备工作 虚拟机软件&#xff1a;VMware Workstation Pro windows镜像&#xff1a;windows 10.iso PE镜像&#xff1a;微PE.iso &#xff08;微PE工具箱&#xff09; 工具包&#xff1a;软媒魔方 封装工具&#xff1a;sysceo&#xff08;SC封装工具3.0&#xff…

java模拟面试题1

1、哪些问题是HTTPS无法解决的&#xff1f; Http是基于TCP协议的&#xff0c;在网络层的传输耗时比较长&#xff0c;https没有解决这个问题&#xff1b;http头是不能压缩的&#xff0c;每次要传递很大的数据包&#xff0c;每个连接也只能支持一个请求。同时https应用了很多加密…

IP地址定位在移动通信中的应用

根据IP地址定位技术在移动通信中的应用越发广泛。这项技术通过将用户的IP地址与地理位置信息相结合&#xff0c;为移动通信提供了更准确的定位服务。在这一创新中&#xff0c;移动通信运营商使用了IP地址定位技术以便更好地为用户提供定位服务、推送个性化广告以及提高安全性。…

数学建模常用模型(四):灰色关联分析法

数学建模常用模型&#xff08;四&#xff09;&#xff1a;灰色关联分析法 灰色关联分析法&#xff08;Grey Relational Analysis&#xff0c;GRA&#xff09;是一种用于多指标决策评价的方法&#xff0c;由灰色系统理论发展而来。它用于分析和评价多个指标之间的相关性和影响程…

【Python】矩阵乘法3种实现方案

结论&#xff1a; 1、 符在numpy里就是矩阵乘法的意思&#xff0c;也是dot()的意思。 2、用这个 运算符可以不用再使用matmult方法 3、一般来说&#xff0c; 比.dot()方法要慢一点点。dot是numpy里的函数&#xff0c;主要用于求向量相乘&#xff0c;矩阵乘法&#xff0c;矩…

vue通过mixins混入实现所有大屏适配,摆脱因适配引起的头痛(模版就是设计稿->全程就是px)

vue通过mixins混入实现所有大屏适配 市场上屏幕种类繁多&#xff0c;自己开发MAC的版本显示器1440900与另一个显示屏的全屏状态下是19201080&#xff0c;如何让自己的web项目&#xff0c;在不同的宽高比下依旧体现出高优越的观感体验。。。。 rem响应式单位:好用但是设计稿不…

ChatLaw:中文法律大模型

论文题目&#xff1a;ChatLaw: Open-Source Legal Large Language Model with Integrated External Knowledge Bases   论文日期&#xff1a;2023/06/28   官网地址&#xff1a;https://www.chatlaw.cloud   论文地址&#xff1a;https://arxiv.org/abs/2306.16092   G…