小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一篇文章弄懂Docker鏡像的制作、上傳、拉取和部署

 新用戶3488XG6a 2021-11-22
目錄

· 一、鏡像(images)

· 1. 什么是鏡像?

· 2. 鏡像的組成和用途

· 1)Dockerfile

· 2)scratch

· 3)一個(gè)完整的操作系統(tǒng)需要:

· 3. 為什么要自己制作鏡像?

· 二、鏡像制作的步驟(10步法)

· 1步:編輯Dockerfile

· 2步:編輯requirements.txt文件

· 3步:編輯app.py文件,我們的程序文件

· 4步:生成鏡像文件

· 5步:檢查鏡像是否成功

· 6步:使用鏡像,啟動(dòng)容器

· 7步:訪問(wèn)容器的web服務(wù)

· 8步:?jiǎn)?dòng)redis容器

· 9步:再次啟動(dòng)一個(gè)自己制作鏡像的容器,鏈接到redis容器

· 10步:訪問(wèn)容器的web服務(wù)

· . 鏡像制作的作業(yè)

· 作業(yè)

· 作業(yè)步驟:

· 總結(jié)

一、鏡像(images)

1. 什么是鏡像?

1)按照百度百科的解釋:鏡像(Mirroring)是一種文件存儲(chǔ)形式,是冗余的一種類型,一個(gè)磁盤上的數(shù)據(jù)在另一個(gè)磁盤上存在一個(gè)完全相同的副本即為鏡像。

2)可以把許多文件做成一個(gè)鏡像文件,與GHOST等程序放在一個(gè)盤里用GHOST等軟件打開(kāi)后,又恢復(fù)成許多文件,RAID 1和RAID 10使用的就是鏡像。

3)常見(jiàn)的鏡像文件格式有ISO、BIN、IMG、TAO、DAO、CIF、FCD。

看完之后是不是更暈了?

其實(shí)簡(jiǎn)單來(lái)說(shuō),鏡像就是是一個(gè)app的封裝,里面有程序代碼,基礎(chǔ)系統(tǒng),依賴庫(kù),工具。
再通俗地講,有點(diǎn)類似APP 的安裝包。

2. 鏡像的組成和用途

1)Dockerfile

是制作鏡像的文件的配方

就像一種祖?zhèn)髅胤剑?/span> 云南白藥: 林芝,人參,鹿茸,三七等

2)scratch

是最基礎(chǔ)的docker鏡像,相當(dāng)于一個(gè)地基—》空白的鏡像,什么都沒(méi)有 --》白手起家

用別的鏡像做基礎(chǔ)鏡像: 其他鏡像可以之為基礎(chǔ)進(jìn)行擴(kuò)展–就像站在巨人的肩膀上。

但是我們需要,萬(wàn)丈高樓平地起,一步一個(gè)腳印

3)一個(gè)完整的操作系統(tǒng)需要:

1.kernel
2.系統(tǒng)調(diào)用
3.應(yīng)用程序、庫(kù)
4.shell等

bootfs --》容器啟動(dòng)的時(shí)候需要的內(nèi)容

rootfs --》容器內(nèi)部的操作系統(tǒng)

docker save

docker export

原理:

容器啟動(dòng)的時(shí)候,內(nèi)核啟動(dòng)bootfs后直接將基礎(chǔ)鏡像加載,然后一層一層的加載–》自下而上

容器運(yùn)行后訪問(wèn)文件的時(shí)候,從上而下,從可寫(xiě)層,一層一層往下訪問(wèn)。

3. 為什么要自己制作鏡像?

以前在Linux 中下載mysql,Centos 系統(tǒng)中需要使用yum 命令,在學(xué)習(xí)完doker技術(shù)以后,需要什么軟件,只需要在docker 上面pull 就可以得到,docker 就像是一個(gè)巨大的資源庫(kù),只有你想不到的東西,沒(méi)有它沒(méi)有的東西。

有些同學(xué)說(shuō):是技術(shù)限制了我對(duì) docker 的想象,流下了悔恨的淚水。

哪有些同學(xué)就說(shuō)了,那既然docker 這么方便,上面有那么多的鏡像文件,為什么還需要我們自己去制作呢?需要啥 pull 啥不就可以了嘛?

但是,在公司中往往需要自己制作鏡像文件,因?yàn)閯e人制作的東西往往會(huì)不放心,或者某些特定的需求不能滿足。就像你去買茅臺(tái)酒,商家說(shuō)這是十年的茅臺(tái),你就信他?這就是十年的茅臺(tái)?不去鑒定一下?如果是土豪,就當(dāng)我沒(méi)說(shuō),哈哈啊哈

二、鏡像制作的步驟(10步法)

1步:編輯Dockerfile

1

2

3

4

5

6

7

8

9

10

11

12

13

[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文件

1

2

3

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

Flask

Redis

3步:編輯app.py文件,我們的程序文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

[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步:生成鏡像文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

[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步:檢查鏡像是否成功

1

2

3

[root@sc-docker-server mydocker]# docker images

REPOSITORY                 TAG        IMAGE ID       CREATED          SIZE

sc_friendlyhello_1         latest     ab30484b56b8   32 minutes ago   159MB

6步:使用鏡像,啟動(dòng)容器

1

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

7步:訪問(wèn)容器的web服務(wù)

1

2

curl或者chrome瀏覽器訪問(wèn)

宿主機(jī)ip:5080

1

2

3

Hello World!

Hostname: f4aeb5d5305a

Visits: cannot connect to Redis, counter disabled

因?yàn)?/span>redis數(shù)據(jù)庫(kù)容器沒(méi)有啟動(dòng),flask web服務(wù)不能連接到redis數(shù)據(jù)庫(kù)

8步:?jiǎn)?dòng)redis容器

1

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

9步:再次啟動(dòng)一個(gè)自己制作鏡像的容器,鏈接到redis容器

1

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

10步:訪問(wèn)容器的web服務(wù)

1

2

curl或者chrome瀏覽器訪問(wèn)

宿主機(jī)ip:5081

1

2

3

Hello World!

Hostname: aad7da1892b5

Visits: 15

. 鏡像制作的作業(yè)

作業(yè)

1.升級(jí) sc_friendlyhello_1的鏡像里的基礎(chǔ)鏡像為python:3.9
自己的鏡像更名為sc_friendlyhello_2
2.啟動(dòng)容器和redis容器,測(cè)試訪問(wèn)**

作業(yè)步驟:

安裝上傳的文件

1

2

3

4

5

6

7

root@sc-docker-server ~]# yum install lrzsz -y  安裝上傳的軟件

上次元數(shù)據(jù)過(guò)期檢查:0:25:32 前,執(zhí)行于 2021年08月18日 星期三 09時(shí)52分02秒。

軟件包 lrzsz-0.12.20-43.el8.x86_64 已安裝。

依賴關(guān)系解決。

無(wú)需任何處理。

完畢!

[root@sc-docker-server ~]#

1步:下載app源代碼

1

2

3

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

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

2步:解壓app源代碼壓縮包

1

2

3

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

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

3步:進(jìn)入app目錄,去新建一個(gè)Dockerfile

1

2

3

4

5

6

7

    [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步:制作鏡像

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

[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步:?jiǎn)?dòng)自己制作的鏡像的容器

1

2

3

4

5

6

7

[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步:打開(kāi)瀏覽器去訪問(wèn)容器里的網(wǎng)站

容器里的網(wǎng)站:http://192.168.0.161:3000/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多