史上最详细的Docker 镜像的制作-上传-拉取--部署(阿里云)

2023-05-16

Docker 镜像的制作-上传-拉取--部署

  • 一、镜像(images)
    • 1. 什么是镜像?
    • 2. 镜像的组成和用途
    • (1)Dockerfile
    • (2)scratch
    • (3)一个完整的操作系统需要:
    • 3. 为什么要自己制作镜像?
  • 二、镜像制作的步骤(10步法)
    • 第1步:编辑Dockerfile
    • 第2步:编辑requirements.txt文件
    • 第3步:编辑app.py文件,我们的程序文件
    • 第4步:生成镜像文件
    • 第5步:检查镜像是否成功
    • 第6步:使用镜像,启动容器
    • 第7步:访问容器的web服务
    • 第8步:启动redis容器
    • 第9步:再次启动一个自己制作镜像的容器,链接到redis容器
    • 第10步:访问容器的web服务
    • 三. 镜像制作的作业
    • 作业
    • 作业步骤:
    • 第1步:下载app源代码
    • 第2步:解压app源代码压缩包
    • 第3步:进入app目录,去新建一个Dockerfile
    • 第4步:制作镜像
    • 第5步:启动自己制作的镜像的容器
    • 第6步:打开浏览器去访问容器里的网站
  • 总结
    • 3.如果你看到这里了,麻烦👍 + 关注哈,感谢支持,码字不易,谢谢理解.

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、镜像(images)

1. 什么是镜像?

(1)按照百度百科的解释:镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。

(2)可以把许多文件做成一个镜像文件,与GHOST等程序放在一个盘里用GHOST等软件打开后,又恢复成许多文件,RAID 1和RAID 10使用的就是镜像。

(3)常见的镜像文件格式有ISO、BIN、IMG、TAO、DAO、CIF、FCD。

看完之后是不是更晕了?

其实简单来说,镜像就是是一个app的封装,里面有程序代码,基础系统,依赖库,工具。
再通俗地讲,有点类似APP 的安装包。

2. 镜像的组成和用途

(1)Dockerfile

: 是制作镜像的文件的配方
就像一种祖传秘方: 云南白药: 林芝,人参,鹿茸,三七等

(2)scratch

: 是最基础的docker镜像,相当于一个地基—》空白的镜像,什么都没有 --》白手起家

用别的镜像做基础镜像: 其他镜像可以之为基础进行扩展–就像站在巨人的肩膀上。

但是我们需要,万丈高楼平地起,一步一个脚印👣去制作镜像

(3)一个完整的操作系统需要:

1.kernel
2.系统调用
3.应用程序、库
4.shell等

bootfs --》容器启动的时候需要的内容
rootfs --》容器内部的操作系统
docker save
docker export

原理
容器启动的时候,内核启动bootfs后直接将基础镜像加载,然后一层一层的加载–》自下而上
容器运行后访问文件的时候,从上而下,从可写层,一层一层往下访问。

3. 为什么要自己制作镜像?

以前在Linux 中下载mysql,Centos 系统中需要使用yum 命令,在学习完doker技术以后,需要什么软件,只需要在docker 上面pull 就可以得到,docker 就像是一个巨大的资源库,只有你想不到的东西,没有它没有的东西。
有些同学说:是技术限制了我对 docker 的想象,流下了悔恨的泪水

哪有些同学就说了,那既然docker 这么方便,上面有那么多的镜像文件,为什么还需要我们自己去制作呢?需要啥 pull 啥不就可以了嘛?

但是,在公司中往往需要自己制作镜像文件因为别人制作的东西往往会不放心,或者某些特定的需求不能满足。就像你去买茅台酒,商家说这是十年的茅台,你就信他?这就是十年的茅台?不去鉴定一下?如果是土豪,就当我没说,哈哈啊哈

二、镜像制作的步骤(10步法)

第1步:编辑Dockerfile

[root@sc-docker-server ~]# mkdir /mydocker/
[root@sc-docker-server ~]# cd /mydocker/
[root@sc-docker-server mydocker]#

[root@sc-docker-server mydocker]# vim Dockerfile
FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host  pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
ENV AUTHOR cali
CMD ["python","app.py"]

第2步:编辑requirements.txt文件

[root@sc-docker-server mydocker]# vim requirements.txt
Flask
Redis

第3步:编辑app.py文件,我们的程序文件

[root@sc-docker-server mydocker]# vim app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

第4步:生成镜像文件

[root@sc-docker-server mydocker]#docker build -t sc_friendlyhello_1 .
docker build -t sc_friendlyhello_1 .
Sending build context to Docker daemon  4.608kB
Step 1/9 : FROM python:2.7-slim
 ---> eeb27ee6b893
Step 2/9 : WORKDIR /app
 ---> Using cache
 ---> 81aa71984f63
Step 3/9 : ADD . /app
 ---> Using cache
 ---> a5c7c6ed471c
Step 4/9 : VOLUME ["/data_flask"]
 ---> Using cache
 ---> d4db66a741db
Step 5/9 : RUN pip install --trusted-host  pypi.python.org -r requirements.txt
 ---> Using cache
 ---> bcdee009e5f7
Step 6/9 : EXPOSE 80
 ---> Using cache
 ---> 475474ce55ff
Step 7/9 : ENV NAME World
 ---> Using cache
 ---> 0f03ead6c99b
Step 8/9 : ENV AUTHOR cali
 ---> Using cache
 ---> f844eb0f1a78
Step 9/9 : CMD ["python","app.py"]
 ---> Using cache
 ---> ab30484b56b8
Successfully built ab30484b56b8
Successfully tagged sc_friendlyhello_1:latest
[root@sc-docker-server mydocker]#

第5步:检查镜像是否成功

[root@sc-docker-server mydocker]# docker images
REPOSITORY                 TAG        IMAGE ID       CREATED          SIZE
sc_friendlyhello_1         latest     ab30484b56b8   32 minutes ago   159MB

第6步:使用镜像,启动容器

docker run -d -p 5080:80  --name sc-hello-1 sc_friendlyhello_1

第7步:访问容器的web服务

curl或者chrome浏览器访问
宿主机ip:5080
Hello World!
Hostname: f4aeb5d5305a
Visits: cannot connect to Redis, counter disabled

因为redis数据库容器没有启动,flask web服务不能连接到redis数据库

第8步:启动redis容器

docker run -d -p 6379:6379 --name sc-redis-1 redis

第9步:再次启动一个自己制作镜像的容器,链接到redis容器

docker run -d --name sc-hello-2 -p 5081:80 --link sc-redis-1:redis sc_friendlyhello_1

第10步:访问容器的web服务

curl或者chrome浏览器访问
宿主机ip:5081
Hello World!
Hostname: aad7da1892b5
Visits: 15

三. 镜像制作的作业

作业

1.升级 sc_friendlyhello_1的镜像里的基础镜像为python:3.9
自己的镜像更名为sc_friendlyhello_2
2.启动容器和redis容器,测试访问**

作业步骤:

安装上传的文件

root@sc-docker-server ~]# yum install lrzsz -y  安装上传的软件
上次元数据过期检查:0:25:32 前,执行于 2021年08月18日 星期三 09时52分02秒。
软件包 lrzsz-0.12.20-43.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@sc-docker-server ~]#

第1步:下载app源代码

https://github.com/docker/getting-started 在windows里下载,然后上传到linux里 yum install git -y 

linux里: git clone https://github.com/califeng/getting-started.git

第2步:解压app源代码压缩包

[root@sc-docker-server ~]# yum install zip unzip -y

    [root@sc-docker-1 ~]# unzip getting-started-master.zip 

第3步:进入app目录,去新建一个Dockerfile

    [root@sc-docker-1 getting-started-master]# cd app/
    [root@sc-docker-1 app]# vim Dockerfile
FROM node:12-alpine
WORKDIR /app
COPY  . .
RUN yarn install --production
CMD ["node", "src/index.js"]

第4步:制作镜像

[root@sc-docker-1 app]# docker build -t getting-started .
-t getting-started 是指定制作的镜像的名字,名字可以自己定义



[root@sc-docker-1 app]# docker images  查看制作的镜像
REPOSITORY                TAG         IMAGE ID       CREATED          SIZE
getting-started           latest      5b903e857b8c   25 seconds ago   179MB
redis                     latest      cc69ae189a1a   2 days ago       105MB
nginx                     1.19.7      35c43ace9216   7 days ago       133MB
nginx                     latest      35c43ace9216   7 days ago       133MB
mysql                     5.7.33      5f47254ca581   2 weeks ago      449MB
nginx                     1.19.6      f6d0b4767a6c   6 weeks ago      133MB
node                      12-alpine   0206ff8a5f9e   7 weeks ago      88.9MB
richarvey/nginx-php-fpm   latest      5c3ad1891297   5 months ago     506MB
hello-world               latest      bf756fb1ae65   13 months ago    13.3kB
jcdemo/flaskapp           latest      4f7a2cc79052   2 years ago      88.7MB
[root@sc-docker-1 app]#

第5步:启动自己制作的镜像的容器

[root@sc-docker-1 app]# docker run -dp 3000:3000 getting-started
8f150a72e7d2d1650685b00a18d237469fa07c8cd56977773dd266b281a3b4ad
[root@sc-docker-1 app]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                    NAMES
8f150a72e7d2   getting-started   "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   0.0.0.0:3000->3000/tcp   strange_benz
deabb58e01b0   nginx             "/docker-entrypoint.…"   26 hours ago    Up 2 hours     0.0.0.0:6655->80/tcp     chenpeng
[root@sc-docker-1 app]# 

第6步:打开浏览器去访问容器里的网站

容器里的网站


总结

1.镜像的制作是作为docker 技术中必备的技能,你说你会docker ,别人一定会问你镜像的制作吗?你说制作那玩意干啥,别人就会会心一笑,心里一想这个人的技术一定很low,连这个都不会,还说自己会docker,呵呵。

2.后面有关镜像制作有详细的步骤,镜像制作十步法会教你怎么去做的,慢慢来,一步一步来做,有任何问题都可以留言和私信哈,有问必答。

3.如果你看到这里了,麻烦👍 + 关注哈,感谢支持,码字不易,谢谢理解.

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

史上最详细的Docker 镜像的制作-上传-拉取--部署(阿里云) 的相关文章

  • 剖析适合STM32的五种嵌入式操作系统的优缺点

    基于STM平台且满足实时控制要求操作系统 xff0c 有以下5种可供移植选择 分别为 Clinux C xff0f OS II eCos FreeRTOS和都江堰操作系统 djyos 下面分别介绍这五种嵌入式操作系统的特点及不足 1 Cli
  • python之quciklz算法简单使用(亲测可用)

    安装 pip install pyquicklz 简单使用 import quicklz 压缩数据 compressed data 61 quicklz compress b 39 Hello xiaohai 39 print compre
  • windows bat脚本使用if else(亲测可用)

    chcp 65001 64 echo off set p username 61 请输入用户名 if 34 username 34 61 61 34 admin 34 echo 欢迎管理员登录 xff01 else echo 用户名错误 x
  • bat脚本设置系统环境变量

    bat脚本中输入以下命令就可以添加到系统环境变量 SET PATH 61 D gcc arm none eabi bin 如果要修改系统环境变量采用以下命令 在 Windows 的批处理 bat 脚本中 xff0c 可以使用 SET 命令来
  • windows之bat脚本对字符串截取的操作

    set name1 61 1 set newname 61 name1 0 8 在 Windows 的批处理 bat 脚本中 xff0c name1 0 8 表示对变量 name1 进行字符串截取操作 xff0c 取它的起始索引为 0 xf
  • python实现合成当前目录下所有相同后缀名的文件(亲测可用)

    span class token keyword import span span class token module os span span class token keyword import span span class tok
  • python之requests之post请求简单使用(亲测可用)

    import requests url 61 34 http tms test Home api login html 34 payload 61 34 0000013200020230511 34 headers 61 39 Conten
  • python之wxpython简单使用亲测可用

    测试源码如下 xff08 只是创建了一个窗体然后设置窗体名称 xff09 xff1a import wx class MyFrame wx Frame def init self super init None title 61 34 我不
  • vs2022调用python脚本(亲测可用)

    一 新建一个控制台项目 二制作python环境文件夹 以上是安装好的python环境 此时在新建的控制台项目下新建一个python37文件夹 将一下这个几个文件和文件夹拷贝过去 如图 修改vs工程属性
  • freertos内核--任务调度剖析

    前言 在使用freertos的时候 xff0c 我们都知道在创建了一系列任务之后 xff0c 启用调度器 xff0c 系统就可以帮我们管理任务 xff0c 分配资源 本文主要对调度器的原理进行剖析 xff0c 从vTaskStartSche
  • 二进制信号量

    二进制信号量能够满足任务间的互斥和同步 xff0c 需要的系统开销最小 xff0c 因此也称快速信号量 二进制信号量可以看成一个标志 xff0c 对应资源是可用还是不可用 本小节就来认识二进制信号量的创建等过程 首先要添加一个头文件free
  • STM32自学之SPI的DMA操作(寄存器级)

    STM32自学之SPI的DMA操作 xff08 寄存器级 xff09 一 实验目标 学会配置STM32的SPI寄存器和DMA寄存器 xff0c 实现STM32的SPI1与SPI2通信功能 xff0c 每次发送一字节数据 xff0c 并可多次
  • win11无法设置移动热点

    win11无法设置移动热点 WIN10电脑热点打不开 win11电脑热点打不开 xff0c 都可以参照操作 xff0c 费力九牛二虎之力 xff0c 终于搞定 xff0c 分享给遇见同类问题的同学 xff0c 希望能帮助解决你的烦恼 具体操
  • 【node】升级 Node 版本教程

    文章目录 Window 系统Mac 或 Linux系统 Window 系统 window系统升级node只能到node官网下载window安装包来覆盖之前的node node 安装教程附下载地址 xff1a https blog csdn
  • 惠普关闭 secure boot

    一般新买的win10电脑 xff0c 是无法安装ubuntu的 xff0c 需要关闭 secure boot 开机f1进bios xff0c 改成英文 advanced secure boot configuration config le
  • ubuntu22.04运行qq音乐

    把启动图标参数改为 Exec 61 opt qqmusic qqmusic no sandbox U
  • Ubuntu环境下仿真gazebo的出现的错误的解决方法

    在运行gazebo的会出现几个错误 xff0c 下面几个总结是我在用Ubuntu的gazebo仿真时候出现的几个错误 xff0c 希望对大家在仿真的时候会有所帮助 1 xff1a ros update出错 解决方法 xff1a curl s
  • ros功能包的创建(详细版)

    这个ros功能包的创建流程 xff0c 适合初学的小白 1 xff1a 找一个合适的目录创建一个文件夹 xff0c 本文目录选择了一个名字是ac的文件夹来创建功能包 xff0c 新创建文件夹的名字可以随便起 xff0c 建议最好用英文 xf
  • 如何下载Windows11原版程序光盘映像文件(iso)

    此处采用官网下载 以win11为例 1 进入windows官网 xff0c 链接 xff1a Download Windows11 2 找到 下载win11磁盘映像iso 模块 xff0c 点击 选择下载项 3 下载项目有两个 xff0c
  • 解决The repository ‘http://security.ubuntu.com/ubuntu impish-security Release

    将 etc apt下的sources list的内容全都注释掉 xff0c 然后换成下面的内容 xff1a deb http old releases ubuntu com ubuntu impish main restricted uni

随机推荐

  • if判断的时候,程序不报错,但输出结果不对

    if判断的时候 xff0c 程序不报错 xff0c 但输出结果不对 其中的一个可能的原因是 xff1a 判断语句中少加了等号 如 xff1a if a 61 b 这样不报错 xff0c 但结果不对 应该是两个等号 xff0c 因为一个等号是
  • 学习笔记26-- 在solidwork里面绘制世界环境,制作成gazebo的.world世界文件基本方法

    环境 ubuntu16 04 ros kinetic gazebo7 16 基础要求 基础的urdf文件launch文件内容 能够理解并可以参考编写 问题来源 仿真时候 机器人可能需要各种形式的世界环境 虽然gazebo里面有创建世界建模工
  • 最新嵌入式学习交流群

    老铁们 大家可以帮忙顶顶帖子 帮助更多的伙伴 可以加咱们的学习交 流 裙 611386401 嵌入式物联网创客3 大家手动添加下 更多学习资料 和行业资讯 每天我都会更新的 你可以在咱们裙 免费结识行业精英 有什么不懂得随时问我和裙友 每天
  • 绝对路径! 报错:[gazebo-2] process has died [pid 2382, exit code 134

    当执行 roslaunch turtlebot gazebo turtlebot world launch world file 61 PATH时 xff0c 报错如下信息 xff1a 注 xff1a PATH 是你要打开的world对应的
  • 学习笔记30--ros-gazebo仿真的一些插件学习推荐以及一些urdf关节理解分享

    环境 ubuntu16 04 ros kinectic gazebo7 16 lt 一 gt gazebo支持以下几种插件类型 并且所有插件类型都可以链接到ros 但只能通过urdf文件引用 ModelPlugins xff0c 提供对Ph
  • 学习笔记32--仿真使用的urdf的物理属性定义解析

    环境 ubuntu16 04 ros kinetic gazebo7 16 导入 搞项目不一定要等到实际机器人结构出来 才能测试代码的 很多时候需要根据需要手动编写urdf来仿真测试的 那么 仿真时候 机器人的一些摩擦系数转动惯量是怎么定义
  • 学习笔记35-- 仿真时用到的d435以及16线雷达在urdf中定义以及launch注意点

    环境 ubuntu16 04 ros kinetics gazebo7 16 来源 仿真有d435以及16线雷达的urdf编写 注意 urdf采用的是 xacro编写的 d435 16vel urdf xacro span class to
  • 杂记7--opencv的ar码模块学习

    背景 xff1a 项目需要用到marker知识 xff0c 所以到官网上临时补一些知识 概要 xff1a 主要介绍marker一些接口的含义 xff0c 纯属个人理解 xff0c 有误则希望大佬不吝赐教 1 涉及ar码操作学习 xff0c
  • Maven-3.6.1下载与环境搭建(解决IDEA兼容问题)及其配置

    Maven 3 6 1下载与环境搭建 xff08 解决IDEA兼容问题 xff09 及配置 Maven下载路径配置系统环境路径配置测试 Maven的文件目录结构解析IDEA中Maven的配置IDEA中Maven的全局配置 注意 xff1a
  • 构建一个arm裸板轻量级的printf

    构建一个arm裸板轻量级的printf span class token keyword typedef span span class token keyword char span span class token operator s
  • 二维小游戏,飞机大战,图片素材

    二维小游戏 xff0c 飞机大战 xff0c 图片素材 高清大图下载链接 https download csdn net download qq 45706825 15042600
  • hallib_RTC

    RTC 一 配置参数 1 2 只有使能RTC之后才能选LSE 二 编写应用代码 1 在mspinit里面加上这个函数 xff0c 打开秒中断 xff0c 这个函数在 h文件里面 span class token function HAL R
  • hullib_Tim3TiggerAdc1

    Tim3TiggerAdc1 只有Tim3才可以用更新 xff08 TIM TRGO UPDATE xff09 触发adc xff0c 其他定时器都要用输出比较模式才可以 一 cubmax配置 1 配置tim3为500ms更新 xff0c
  • hullib_AdcBase

    AdcBase 也就是不用中断 xff0c 每次用软件触发的简单操作 一 cubmax配置 1 选好通道就可以了 xff0c 其他都不用管 二 需要编写的代码 1 在main函数while里面写上 span class token keyw
  • hullib_eeprom

    EEPROM 这个模拟iic真的搞了好久啊 xff0c 最后发现这个24c02写完之后至少要延时4ms再来读才可以 xff0c 要不然读的时候都是NACK 一 时序 自己看数据手册吧
  • hullib_PwmCapture

    PwmCapture 需要两个channel 一 cubemx配置 一个上升沿捕获 xff0c 一个下降沿捕获 打开中断 二 自己写的代码 1 开启两个通道的中断 span class token function HAL TIM IC S
  • 2021-03-16

    hullib Rtc 获取时间之后必须获取日期他才会有时间 HAL RTC GetTime amp hrtc amp sTime RTC FORMAT BIN HAL RTC GetDate amp hrtc amp sDate RTC F
  • hullib_PwmOutput

    hullib PwmOutput 一 cubmx需要配置的 1 这里一定是pwm Generation 而不是pwm outcompare 使用定时器的PWM模式只能在4个通道产生频率相同但占空比不同的输出信号 使用定时器的输出比较模式可以
  • 计算机类非全日制研究生

    北京市 10002 中国人民大学 院系所专业研究方向考试范围 159 信息学院 xff08 专业学位 xff09 085400 专业学位 电子信息 02 软件工程领域 xff08 非全 xff09 详情 159 信息学院 xff08 专业学
  • 史上最详细的Docker 镜像的制作-上传-拉取--部署(阿里云)

    Docker 镜像的制作 上传 拉取 部署 一 镜像 xff08 images xff09 1 什么是镜像 xff1f 2 镜像的组成和用途 xff08 1 xff09 Dockerfile xff08 2 xff09 scratch xf