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

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

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 = "cannot connect to Redis, counter disabled"

html = "

Hello {name}!

" \

"Hostname: {hostname}
" \

"Visits: {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.如果你看到这里了,麻烦👍 + 关注哈,感谢支持,码字不易,谢谢理解.

相关创意

iPhone iOS系统更新后耗电的6大原因与8个解决改善方法
体育投注365下载

iPhone iOS系统更新后耗电的6大原因与8个解决改善方法

📅 07-07 👁️ 3329
铁血攻沙新服表
bt365注册

铁血攻沙新服表

📅 07-23 👁️ 949
男生说安安是什么意思
体育投注365下载

男生说安安是什么意思

📅 07-29 👁️ 6135