• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    一篇文章弄懂Docker镜像的制作、上传、拉取和部署

    一、镜像(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步:打开浏览器去访问容器里的网站

    容器里的网站:http://192.168.0.161:3000/

    总结

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

    2.后面有关镜像制作有详细的步骤,镜像制作十步法会教你怎么去做的,慢慢来,一步一步来做。

    到此这篇关于Docker镜像制作、上传、拉取和部署的文章就介绍到这了,更多相关Docker镜像制作、上传、拉取和部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:centos8系统ftp服务器安装及被动模式配置详细教程
    下一篇:解决服务器运行jupyter notebook方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    一篇文章弄懂Docker镜像的制作、上传、拉取和部署 一篇,文章,弄懂,Docker,镜像,