一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

提升DevOps效率,從基礎(chǔ)到進(jìn)階的Dockerfile編寫(xiě)技巧

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2024-11-26 09:44 ? 次閱讀

目錄

Dockerfile

基本結(jié)構(gòu)

指令

創(chuàng)建鏡像(centos版)

創(chuàng)建鏡像(alpine版)

基本結(jié)構(gòu)

Dockerfile 是一個(gè)文本格式的配置文件,用戶(hù)可以使用 Dockerfile 快速創(chuàng)建自定義鏡像。

Dockerfile 由一行行命令語(yǔ)句組成,并且支持以 # 開(kāi)頭的注釋行。

Docker分為四部分:

基礎(chǔ)鏡像信息
維護(hù)者信息
鏡像操作指令
容器啟動(dòng)時(shí)默認(rèn)要執(zhí)行的指令
例如:

# 第一行必須指定基于的基礎(chǔ)鏡像
FROM centos
# 維護(hù)者信息
LABEL MANTAINER "lvnanhai66 1@36.com"
# 鏡像操作指令
RUN  useradd -r -M -s /sbin/nologin apache 
# 容器啟動(dòng)時(shí)默認(rèn)要執(zhí)行的指令
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]

其中,一開(kāi)始必須指明所基于的鏡像名稱(chēng),接下來(lái)一般會(huì)說(shuō)明維護(hù)者信息。
后面則是鏡像操作指令,例如RUN指令,RUN指令將對(duì)鏡像執(zhí)行跟隨的命令。每運(yùn)行一條RUN指令,鏡像添加新的一層,并提交。
最后是CMD指令來(lái)指定運(yùn)行容器時(shí)的操作指令。

指令

指令的一般格式為INSTRUCTION arguments,指令包括:

FROM
LABEL MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD

4d497324-a333-11ef-93f3-92fbcf53809c.png


FROM
功能為指定基礎(chǔ)鏡像,并且必須是第一條指令。

如果不以任何鏡像為基礎(chǔ),那么寫(xiě)法為:FROM scratch。

同時(shí)意味著接下來(lái)所寫(xiě)的指令將作為鏡像的第一層開(kāi)始

FROM centos    //基于centos的鏡像
語(yǔ)法:
FROM 
FROM :
FROM :
三種選項(xiàng),其中是可選項(xiàng),如果沒(méi)有選擇那么默認(rèn)就是latest

LABEL MAINTAINER
指定維護(hù)者信息

語(yǔ)法:LABEL MAINTAINER 
LABEL MANTAINER "lvnanhai66 1@36.com"

RUN
功能為運(yùn)行指定的命令
RUN命令有兩種格式
1.RUN command
2.RUN ["executable", "param1", "param2"]
前者將在shell終端中運(yùn)行命令,即/bin/sh -c;后者則使用exec執(zhí)行。指定使用其他終端可以通過(guò)第二種方式實(shí)現(xiàn),例如:RUN ["/bin/bash","-c","echo hello"]
每條RUN指令將在當(dāng)前鏡像基礎(chǔ)上執(zhí)行指定命令,并提交為新的鏡像。當(dāng)命令較長(zhǎng)時(shí)可以使用 來(lái)?yè)Q行

[root@localhost ~]# cd httpd/
[root@localhost httpd]# ls
Dockerfile  files
[root@localhost httpd]# vim Dockerfile 
[root@localhost httpd]# cat Dockerfile 
FROM busybox

LABEL MANTAINER "lvnanhai66 1@36.com"

RUN echo "hello lnh" > /tmp/abc
[root@localhost httpd]#  podman build -t httpd:1.0 .
STEP 1/3: FROM busybox
STEP 2/3: LABEL MANTAINER "lvnanhai66 1@36.com"
--> d761206551e
STEP 3/3: RUN echo "hello lnh" > /tmp/abc
COMMIT httpd:1.0
--> 80125d342c8
Successfully tagged localhost/httpd:1.0
80125d342c8d86708b7c9a572ea46876a361a2c6a6b21c6b4ad66c4c00dd0b37
[root@localhost httpd]# podman run -it --rm httpd:1.0 /bin/sh
/ # cd /tmp/
/tmp # ls
abc

CMD

CMD支持三種格式:
1.CMD ["executable","param1","param2"]使用exec執(zhí)行,推薦方式
2.CMD command param1 param2在/bin/sh中執(zhí)行,提供給需要交互的應(yīng)用
3.CMD ["param1","param2"]提供給ENTRYPOINT的默認(rèn)參數(shù)
CMD用于指定啟動(dòng)容器時(shí)默認(rèn)要執(zhí)行的命令,每個(gè)Dockerfile只能有一條CMD命令。如果指定了多條命令,只有最后一條會(huì)被執(zhí)行。

如果用戶(hù)啟動(dòng)容器時(shí)指定了運(yùn)行的命令,則會(huì)覆蓋掉CMD指定的命令。

不要把RUN和CMD搞混了。

RUN是構(gòu)件容器時(shí)就運(yùn)行的命令以及提交運(yùn)行結(jié)果

CMD是容器啟動(dòng)時(shí)執(zhí)行的命令,在構(gòu)件時(shí)并不運(yùn)行,構(gòu)件時(shí)緊緊指定了這個(gè)命令到底是個(gè)什么樣子

CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]

EXPOSE

格式為EXPOSE port [port...]。
例如:

EXPOSE 22 80 8443
EXPOSE用于告訴Docker服務(wù)器容器暴露的端口號(hào),供互聯(lián)系統(tǒng)使用。

在啟動(dòng)容器時(shí)通過(guò)-P,Docker主機(jī)會(huì)自動(dòng)分配一個(gè)端口轉(zhuǎn)發(fā)到指定的端口;
使用-p則可以具體指定哪個(gè)本地端口映射過(guò)來(lái)。

ENV
格式為ENV key value 。指定一個(gè)環(huán)境變量,會(huì)被后續(xù)RUN指令使用,并在容器運(yùn)行時(shí)保持。

ENV PATH /usr/local/apache/bin:$PATH   //配置環(huán)境變量

ADD
格式為ADD src dest
該命令將復(fù)制指定的src到容器中的dest。其中src可以是Dockerfile所在目錄的一個(gè)相對(duì)路徑(文件或目錄);也可以是一個(gè)URL;還可以是一個(gè)tar文件(會(huì)自動(dòng)解壓為目錄)。

[root@localhost httpd]# ls
Dockerfile  files
[root@localhost httpd]# ls files/
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  entrypoint.sh  httpd-2.4.54.tar.gz
[root@localhost httpd]# vim Dockerfile 
[root@localhost httpd]# cat Dockerfile 
FROM busybox

ADD files/apr-1.7.0.tar.gz /tmp/
[root@localhost httpd]#  podman build -t httpd:2.0 .
STEP 1/2: FROM busybox
STEP 2/2: ADD files/apr-1.7.0.tar.gz /tmp/
COMMIT httpd:2.0
--> 5a9f6d599dc
Successfully tagged localhost/httpd:2.0
5a9f6d599dc3245e3bfba5877bd84f155d9410e1fff6a679a8ebab954f530f1a
[root@localhost httpd]#  podman run -it --rm  httpd:2.0 /bin/sh
/ # cd tmp/
/tmp # ls
apr-1.7.0
/tmp #

COPY

格式為COPY  。

復(fù)制本地主機(jī)的(為Dockerfile所在目錄的相對(duì)路徑,文件或目錄)為容器中的。目標(biāo)路徑不存在時(shí)會(huì)自動(dòng)創(chuàng)建。
當(dāng)使用本地目錄為源目錄時(shí),推薦使用COPY。

ENTRYPOINT
ENTRYPOINT有兩種格式:

ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2(在shell中執(zhí)行)
配置容器啟動(dòng)后執(zhí)行的命令,并且不可被docker run提供的參數(shù)覆蓋。而且,如果在docker run的后面提供了參數(shù),這些命令行參數(shù)會(huì)被當(dāng)作參數(shù)傳遞給ENTRYPOINT指定的程序。

每個(gè)Dockerfile中只能有一個(gè)ENTRYPOINT,當(dāng)指定多個(gè)ENTRYPOINT時(shí),只有最后一個(gè)生效。

例如:ENTRYPOINT ["/bin/bash","/entrypoint.sh"]

VOLUME

格式為VOLUME ["/data"]。

創(chuàng)建一個(gè)可以從本地主機(jī)或其他容器掛載的掛載點(diǎn),一般用來(lái)存放數(shù)據(jù)庫(kù)和需要保持的數(shù)據(jù)等

USER
格式為USER daemon。

指定運(yùn)行容器時(shí)的用戶(hù)名或UID,后續(xù)的RUN也會(huì)使用指定用戶(hù)。

當(dāng)服務(wù)不需要管理員權(quán)限時(shí),可以通過(guò)該命令指定運(yùn)行用戶(hù)。并且可以在之前創(chuàng)建所需要的用戶(hù),例如:

RUN groupadd -r postgres && useradd -r -g postgres postgres

要臨時(shí)獲取管理員權(quán)限可以使用gosu,而不推薦sudo。如果不指定,容器默認(rèn)是root運(yùn)行。

WORKDIR
語(yǔ)法:

WORKDIR /path/to/workdir

設(shè)置工作目錄,對(duì)RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在則會(huì)創(chuàng)建,也可以設(shè)置多次。
如:

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

pwd執(zhí)行的結(jié)果是/a/b/c

WORKDIR也可以解析環(huán)境變量

如:

ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd

pwd的執(zhí)行結(jié)果是/path/$DIRNAME

ONBUILD
格式為ONBUILD [INSTRUCTION]。

配置當(dāng)所創(chuàng)建的鏡像作為其他鏡像的基礎(chǔ)鏡像時(shí),所執(zhí)行的操作指令。

例如,Dockerfile使用如下的內(nèi)容創(chuàng)建了鏡像image-A

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

此時(shí),如果基于image-A創(chuàng)建新的鏡像時(shí),新的Dockerfile中使用FROM image-A指定基礎(chǔ)鏡像時(shí),會(huì)自動(dòng)執(zhí)行ONBUILD指令的內(nèi)容,等價(jià)于在后面添加了兩條指令。

FROM image-A

# Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

使用ONBUILD指令的鏡像,推薦在標(biāo)簽中注明,例如ruby:1.9-onbuild。

創(chuàng)建鏡像(centos版)

用podman進(jìn)行dockefile做一個(gè)httpd編譯安裝的鏡像,要求要控制版本號(hào),要用到dockerfile中大部分指令及用腳本方式啟動(dòng)程序,上傳到官方鏡像倉(cāng)庫(kù)

[root@localhost ~]# mkdir httpd   
[root@localhost ~]# cd httpd/
[root@localhost httpd]# touch Dockerfile
[root@localhost httpd]# mkdir files
[root@localhost httpd]# ls
Dockerfile  files
//創(chuàng)建一個(gè)目錄,在這個(gè)目錄下面創(chuàng)建一個(gè)Dockerfile文件和存放安裝包的目錄files
[root@localhost httpd]# cd files/
[root@localhost files]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
[root@localhost files]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
//下載安裝包
[root@localhost files]# vim entrypoint.sh
[root@localhost files]# cat entrypoint.sh
#!/bin/bash

sed -i '/^#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf

exec "$@"
[root@localhost files]# chmod +x entrypoint.sh //賦予腳本執(zhí)行權(quán)限
[root@localhost files]# ll
total 11136
-rw-r--r--. 1 root root 1093896 Apr  5  2019 apr-1.7.0.tar.gz
-rw-r--r--. 1 root root  554301 Oct 23  2017 apr-util-1.6.1.tar.gz
-rwxr-xr-x. 1 root root      88 Aug 30 16:43 entrypoint.sh
-rw-r--r--. 1 root root 9743277 Jun  8 16:42 httpd-2.4.54.tar.gz
//寫(xiě)一個(gè)腳本作為啟動(dòng)程序
[root@localhost files]# cd ..
[root@localhost httpd]# ls
Dockerfile  files
[root@localhost httpd]# vim Dockerfile 
[root@localhost httpd]# cat Dockerfile 
FROM centos

LABEL MANTAINER "lvnanhai66 1@36.com"
ENV apache_version 2.4.54     //apache版本號(hào)
ENV PATH /usr/local/apache/bin:$PATH   //配置環(huán)境變量

ADD files/apr-1.7.0.tar.gz /usr/src/
ADD files/apr-util-1.6.1.tar.gz /usr/src/
ADD files/httpd-${apache_version}.tar.gz /usr/src/   //這樣可以更換
ADD files/entrypoint.sh /     //將這個(gè)腳本放到根下面
 
RUN  useradd -r -M -s /sbin/nologin apache && 
     cd /etc/yum.repos.d && rm -r * && 
     curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo  && 
     sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo  && 
     yum clean all  && yum makecache && 
     yum -y install gcc gcc-c++ make openssl-devel pcre-devel expat-devel libtool && 
     cd /usr/src/apr-1.7.0 && 
     sed -i '/$RM "$cfgfile"/d' configure && 
     ./configure --prefix=/usr/local/apr && 
     make && make install && 
     cd ../apr-util-1.6.1 && 
     ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  && 
     make && make install && 
     cd ../httpd-${apache_version}  && 
     ./configure --prefix=/usr/local/apache 
        --enable-so 
        --enable-ssl 
        --enable-cgi 
        --enable-rewrite 
        --with-zlib 
        --with-pcre 
        --with-apr=/usr/local/apr 
        --with-apr-util=/usr/local/apr-util/ 
        --enable-modules=most 
        --enable-mpms-shared=all 
        --with-mpm=prefork  && 
     make  && make install  && 
     yum clean all &&        //清除緩存
     yum -y remove gcc gcc-c++ make &&     //這些編譯工具可以清除
     rm -rf /tmp/* /usr/src/*    //這個(gè)下面的文件可以清除
 
EXPOSE 80       //映射的端口號(hào)
WORKDIR /usr/local/apache    //相當(dāng)于cd這個(gè)目錄
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"] //此處加了絕對(duì)路徑
ENTRYPOINT ["/bin/bash","/entrypoint.sh"]   //不知道有沒(méi)有權(quán)限,可以直接加bin/bash
[root@localhost httpd]# podman build -t httpd:v3.0 .
....
STEP 13/13: ENTRYPOINT ["/bin/bash","/entrypoint.sh"]
COMMIT httpd:v3.0
--> f65d0bb9ee1
Successfully tagged localhost/httpd:v3.0
f65d0bb9ee17efdffdb53dc52fb92188aaa5fa1ea90cc11e2939855ba71f8ec3
讓這個(gè)鏡像運(yùn)行一個(gè)容器進(jìn)行測(cè)試: 
[root@localhost httpd]# podman images
REPOSITORY               TAG         IMAGE ID      CREATED             SIZE
localhost/httpd          v3.0        f65d0bb9ee17  About a minute ago  405 MB
docker.io/library/httpd  latest      dabbfbe0c57b  8 months ago        148 MB
quay.io/centos/centos    latest      300e315adb2f  21 months ago       217 MB
[root@localhost httpd]# podman run -d httpd:v3.0 
fcf786713d9b55793b997cc98e3571535b1fd4c0553409f3bb18bfd9d51fd234
[root@localhost httpd]# podman ps
CONTAINER ID  IMAGE                 COMMAND               CREATED        STATUS            PORTS       NAMES
fcf786713d9b  localhost/httpd:v3.0  /usr/local/apache...  4 seconds ago  Up 4 seconds ago              xenodochial_morse
[root@localhost httpd]# podman inspect -l |grep -i ipaddr 
//過(guò)濾查看ip
            "IPAddress": "10.88.0.6",
                    "IPAddress": "10.88.0.6",
[root@localhost httpd]# curl 10.88.0.6    //訪問(wèn)成功

It works!

上傳鏡像: [root@localhost httpd]# podman tag httpd:v3.0 docker.io/lvnanhai66/httpd:v3.0 [root@localhost httpd]# podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/httpd v3.0 f65d0bb9ee17 8 minutes ago 405 MB docker.io/lvnanhai66/httpd v3.0 f65d0bb9ee17 8 minutes ago 405 MB docker.io/library/httpd latest dabbfbe0c57b 8 months ago 148 MB quay.io/centos/centos latest 300e315adb2f 21 months ago 217 MB [root@localhost httpd]# podman login docker.io Username: lvnanhai66 Password: Login Succeeded! [root@localhost httpd]# podman push docker.io/lvnanhai66/httpd:v3.0 Getting image source signatures Copying blob 3f49a2cae693 done Copying blob 90fc92241475 done Copying blob 8cfba8022d3f done Copying blob 34214738da46 done Copying blob bea1ef732da4 done Copying blob 2653d992f4ef done Copying config f65d0bb9ee done Writing manifest to image destination Storing signatures

4d53e016-a333-11ef-93f3-92fbcf53809c.png

拉取自己的鏡像運(yùn)行容器:
[root@localhost ~]# podman run -d --name web -P docker.io/lvnanhai66/httpd:v3.0
Trying to pull docker.io/lvnanhai66/httpd:v3.0...
Getting image source signatures
Copying blob 929704506730 skipped: already exists  
Copying blob 26ad906b0de6 done  
Copying blob c63ffcca07e0 done  
Copying blob 45fdf32689c6 done  
Copying blob 0b040dd24d11 done  
Copying blob 841f6f1ffedd done  
Copying config f65d0bb9ee done  
Writing manifest to image destination
Storing signatures
4d770508e2552c6ab554079fccf9e72ed79ed43ffcad5d6564d2cac3a07527d6
[root@localhost ~]# podman ps -a
CONTAINER ID  IMAGE                            COMMAND               CREATED        STATUS            PORTS                  NAMES
4d770508e255  docker.io/lvnanhai66/httpd:v3.0  /usr/local/apache...  8 seconds ago  Up 8 seconds ago  0.0.0.0:40607->80/tcp  web
[root@localhost ~]# podman ps 
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS             PORTS                  NAMES
4d770508e255  docker.io/lvnanhai66/httpd:v3.0  /usr/local/apache...  19 seconds ago  Up 19 seconds ago  0.0.0.0:40607->80/tcp  web
//如果發(fā)現(xiàn)拉取不下來(lái)可以加加速器進(jìn)行注釋?zhuān)╟d /etc/containers/然后vim registries.conf)

創(chuàng)建鏡像(alpine版)

用podman進(jìn)行dockefile做一個(gè)httpd編譯安裝的鏡像,要求要控制版本號(hào),要用到dockerfile中大部分指令及用腳本方式啟動(dòng)程序,上傳到官方鏡像倉(cāng)庫(kù),基于alpine鏡像進(jìn)行dockerfile,使其大小在70M以?xún)?nèi)
Alpinel 編譯軟件注意事項(xiàng)

[root@localhost ~]# mkdir httpd   
[root@localhost ~]# cd httpd/
[root@localhost httpd]# touch Dockerfile
[root@localhost httpd]# mkdir files
[root@localhost httpd]# ls
Dockerfile  files
//創(chuàng)建一個(gè)目錄,在這個(gè)目錄下面創(chuàng)建一個(gè)Dockerfile文件和存放安裝包的目錄files
[root@localhost httpd]# cd files/
[root@localhost files]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
[root@localhost files]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
//下載安裝包
[root@localhost files]# vim entrypoint.sh
[root@localhost files]# cat entrypoint.sh
#!/bin/bash

sed -i '/^#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf

exec "$@"
[root@localhost files]# chmod +x entrypoint.sh //賦予腳本執(zhí)行權(quán)限
[root@localhost files]# ll
total 11136
-rw-r--r--. 1 root root 1093896 Apr  5  2019 apr-1.7.0.tar.gz
-rw-r--r--. 1 root root  554301 Oct 23  2017 apr-util-1.6.1.tar.gz
-rwxr-xr-x. 1 root root      88 Aug 31 22:38 entrypoint.sh
-rw-r--r--. 1 root root 9743277 Jun  8 16:42 httpd-2.4.54.tar.gz
//寫(xiě)一個(gè)腳本作為啟動(dòng)程序
[root@localhost files]# cd ..
[root@localhost httpd]# ls
Dockerfile  files
編寫(xiě)dockerfile:
[root@localhost httpd]# vim Dockerfile 
[root@localhost httpd]# cat  Dockerfile 
FROM alpine

LABEL MANTAINER "lvnanhai66 1@36.com"

ENV apr_version=1.7.0 apr_util_version=1.6.1 httpd_version=2.4.54

ADD files/* /tmp/

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && 
    apk update && 
    adduser -SHs /sbin/nologin apache && 
    apk add --no-cache -U gcc libc-dev make expat-dev pcre-dev openssl-dev libtool && 
    cd /tmp/apr-${apr_version} && 
    sed -i '/$RM "$cfgfile"/d' configure && 
    ./configure --prefix=/usr/local/apr && 
    make && make install && 
    cd /tmp/apr-util-${apr_util_version} && 
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && 
    make && make install && 
    cd /tmp/httpd-${httpd_version} && 
    ./configure --prefix=/usr/local/apache 
    --enable-so 
    --enable-ssl 
    --enable-cgi 
    --enable-rewrite 
    --with-zlib 
    --with-pcre 
    --with-apr=/usr/local/apr 
    --with-apr-util=/usr/local/apr-util/ 
    --enable-modules=most 
    --enable-mpms-shared=all 
    --with-mpm=prefork && 
    make && make install && 
    mv /tmp/entrypoint.sh / && 
    apk del gcc make && 
    rm -rf /tmp/* /var/cache/*

EXPOSE 80
WORKDIR /usr/local/apache
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]
ENTRYPOINT ["/bin/sh","/entrypoint.sh"]
[root@localhost httpd]# podman build -t httpd:v4.0 .
....
STEP 9/9: ENTRYPOINT ["/bin/sh","/entrypoint.sh"]
COMMIT httpd:v6.0
--> eb89d86d65e
Successfully tagged localhost/httpd:v6.0
eb89d86d65ef414d288a662331a44740015472d6539b25f95bc8abee8ce8addb
[root@localhost httpd]# podman images  //可以查看到鏡像已經(jīng)比較小了
REPOSITORY                TAG         IMAGE ID      CREATED         SIZE
localhost/httpd           v6.0        eb89d86d65ef  8 seconds ago   120 MB
docker.io/library/alpine  latest      9c6f07244728  3 weeks ago         5.83 MB
[root@localhost httpd]# cd
[root@localhost ~]# mkdir -p /srv/web
[root@localhost ~]# cd /srv/web/
[root@localhost web]# ls
[root@localhost web]# echo "hello lnh" >index.html
[root@localhost web]# cat index.html 
hello lnh
[root@localhost web]# cd
[root@localhost ~]# cd httpd/
[root@localhost httpd]# podman images
REPOSITORY                TAG         IMAGE ID      CREATED         SIZE
localhost/httpd           v6.0        eb89d86d65ef  8 seconds ago   120 MB
docker.io/library/alpine  latest      9c6f07244728  3 weeks ago    5.83 MB
[root@localhost httpd]# podman run -d --name web -p 80:80 -v /srv/web/:/usr/local/apache/htdocs/:Z httpd:v6.0   //用制作的鏡像運(yùn)行一個(gè)容器
a7d9d8c071e80360e3ad40ff7933337c8d9ecf24ef0fa81c72a2a85e7dec86af
[root@localhost httpd]# podman ps     //查看進(jìn)程狀態(tài)
CONTAINER ID  IMAGE                 COMMAND               CREATED        STATUS            PORTS               NAMES
a7d9d8c071e8  localhost/httpd:v6.0  /usr/local/apache...  4 seconds ago  Up 4 seconds ago  0.0.0.0:80->80/tcp  web
[root@localhost httpd]# podman inspect -l |grep -i ipaddr  //查看ip地址
            "IPAddress": "10.88.0.10",
                    "IPAddress": "10.88.0.10",
[root@localhost httpd]# curl 10.88.0.10      //訪問(wèn)成功
hello lnh 

進(jìn)行訪問(wèn):

4d704d28-a333-11ef-93f3-92fbcf53809c.png

上傳鏡像:
[root@localhost httpd]# podman images
REPOSITORY                TAG         IMAGE ID      CREATED        SIZE
localhost/httpd           v6.0        eb89d86d65ef  9 minutes ago  120 MB
docker.io/library/alpine  latest      9c6f07244728  3 weeks ago    5.83 MB
[root@localhost httpd]# podman tag httpd:v6.0 docker.io/lvnanhai66/httpd:v6.0    //做標(biāo)簽使其和官方網(wǎng)站上面的一致(建議使用自己的用戶(hù)名)
[root@localhost httpd]# podman images
REPOSITORY                  TAG         IMAGE ID      CREATED         SIZE
localhost/httpd             v6.0        eb89d86d65ef  11 minutes ago  120 MB
docker.io/lvnanhai66/httpd  v6.0        eb89d86d65ef  11 minutes ago  120 MB
docker.io/library/alpine    latest      9c6f07244728  3 weeks ago     5.83 MB
[root@localhost ~]# podman save docker.io/lvnanhai66/httpd:v6.0 -o myhttpd.tar     //將其打包成為文件
Getting image source signatures
Copying blob 994393dc58e7 done  
Copying blob ff52d230cd11 done  
Copying blob 7395d1756e8f done  
Copying config eb89d86d65 done  
Writing manifest to image destination
Storing signatures
[root@localhost ~]# ls
anaconda-ks.cfg  httpd  myhttpd.tar
[root@localhost ~]# scp  myhttpd.tar 192.168.222.251:/root
The authenticity of host '192.168.222.251 (192.168.222.251)' can't be established.
ECDSA key fingerprint is SHA256:y11UDaNXs3AnvVUnZQfAim2VHAplF09YOvQp2NemHyk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.222.251' (ECDSA) to the list of known hosts.
root@192.168.222.251's password: 
myhttpd.tar                                                          100%  114MB  92.2MB/s   00:01   
//傳給安裝docker的虛擬主機(jī)上面 

docker的安裝方法
在安裝了docker的虛擬主機(jī)上面進(jìn)行上傳鏡像

[root@localhost ~]# ls
anaconda-ks.cfg  myhttpd.tar
[root@localhost ~]# docker load -i myhttpd.tar    //將鏡像導(dǎo)入
994393dc58e7: Loading layer  5.827MB/5.827MB
ff52d230cd11: Loading layer  53.77MB/53.77MB
7395d1756e8f: Loading layer  60.25MB/60.25MB
Loaded image: lvnanhai66/httpd:v6.0
[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
lvnanhai66/httpd   v6.0      eb89d86d65ef   26 minutes ago   115MB
[root@localhost ~]# docker login 
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: lvnanhai66
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@localhost ~]# docker push lvnanhai66/httpd:v6.0 
The push refers to repository [docker.io/lvnanhai66/httpd]
7395d1756e8f: Pushed 
ff52d230cd11: Pushed 
994393dc58e7: Pushed 
v6.0: digest: sha256:b01a151e9b89e7cd994c1a6acb207183c9097bd140098bee0b63f0da35a05c02 size: 952

可以查看到上傳成功,并且只有31M左右,比較小

4d89e6b6-a333-11ef-93f3-92fbcf53809c.png

測(cè)試:

[root@localhost ~]# docker pull lvnanhai66/httpd:v6.0
//拉取自己制作的鏡像
v6.0: Pulling from lvnanhai66/httpd
213ec9aee27d: Pull complete 
c220467fa6e0: Pull complete 
f3a6cb94f126: Pull complete 
Digest: sha256:b01a151e9b89e7cd994c1a6acb207183c9097bd140098bee0b63f0da35a05c02
Status: Downloaded newer image for lvnanhai66/httpd:v6.0
docker.io/lvnanhai66/httpd:v6.0
[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
lvnanhai66/httpd   v6.0      eb89d86d65ef   54 minutes ago   115MB
[root@localhost ~]# docker run -d lvnanhai66/httpd:v6.0 
b7f7f743e574f1054afb559fada840361d4ca046e9698b8e4ccb9c2124949416
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS     NAMES
b7f7f743e574   lvnanhai66/httpd:v6.0   "/bin/sh /entrypoint…"   5 seconds ago   Up 4 seconds   80/tcp    strange_hofstadter
//利用自己制作鏡像成功運(yùn)行一個(gè)容器

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    614

    瀏覽量

    36133
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    177

    瀏覽量

    11065
  • devops
    +關(guān)注

    關(guān)注

    0

    文章

    119

    瀏覽量

    12340

原文標(biāo)題:提升 DevOps 效率!從基礎(chǔ)到進(jìn)階的 Dockerfile 編寫(xiě)技巧

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DevEco Studio AI輔助開(kāi)發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開(kāi)發(fā)效率提升

    隨著搭載HarmonyOS 5的Pura X發(fā)布,鴻蒙生態(tài)進(jìn)入快車(chē)道,各應(yīng)用正在加速適配開(kāi)發(fā),越來(lái)越多開(kāi)發(fā)者加入鴻蒙應(yīng)用開(kāi)發(fā)浪潮中。為提升鴻蒙應(yīng)用開(kāi)發(fā)效率,華為前不久上線了首款開(kāi)發(fā)
    發(fā)表于 04-18 14:43

    鴻蒙原生繪圖API:基礎(chǔ)高階的繪制之旅(進(jìn)階版)

    theme: hydrogen 家人們,還記得上次一起探索的鴻蒙繪圖API基礎(chǔ)用法嗎?上手是不是特別容易!今天,咱們就接著深入,開(kāi)啟進(jìn)階版的學(xué)習(xí),解鎖更多復(fù)雜又炫酷的繪圖技能,讓你的鴻蒙應(yīng)用界面直接
    的頭像 發(fā)表于 03-16 15:57 ?342次閱讀

    基于Docker鏡像逆向生成Dockerfile

    在本文中, 我們將通過(guò)理解Docker鏡像如何存儲(chǔ)數(shù)據(jù), 以及如何使用工具查看鏡像方方面面的信息來(lái)逆向工程一個(gè)Docker鏡像; 以及如何使用Python的Docker API來(lái)構(gòu)建一個(gè)類(lèi)似Dedockify的工具來(lái)創(chuàng)建Dockerfile。
    的頭像 發(fā)表于 03-10 09:45 ?368次閱讀
    基于Docker鏡像逆向生成<b class='flag-5'>Dockerfile</b>

    技術(shù)解析 | 適用于TeamCity的Unreal Engine支持插件,提升游戲構(gòu)建效率

    TeamCity 是一款強(qiáng)大的持續(xù)集成和部署服務(wù)器,面向以 DevOps 為中心的團(tuán)隊(duì)提供開(kāi)箱即用的測(cè)試智能、構(gòu)建問(wèn)題的實(shí)時(shí)報(bào)告以及無(wú)與倫比的可擴(kuò)展性。安裝和部署 TeamCity,幾分鐘之內(nèi)即可開(kāi)始構(gòu)建您的 DevOps 管道。TeamCity 提供本地部署和基于云的版
    的頭像 發(fā)表于 02-19 16:12 ?460次閱讀
    技術(shù)解析 | 適用于TeamCity的Unreal Engine支持插件,<b class='flag-5'>提升</b>游戲構(gòu)建<b class='flag-5'>效率</b>

    清華大學(xué)發(fā)布:DeepSeek入門(mén)精通

    特點(diǎn)、應(yīng)用場(chǎng)景、使用方法以及如何通過(guò)提示語(yǔ)設(shè)計(jì)提升AI使用效率等方面展開(kāi),幫助用戶(hù)入門(mén)精通DeepSeek的使用
    的頭像 發(fā)表于 02-14 09:49 ?1.1w次閱讀
    清華大學(xué)發(fā)布:DeepSeek<b class='flag-5'>從</b>入門(mén)<b class='flag-5'>到</b>精通

    八個(gè)方面提升LED驅(qū)動(dòng)電源效率

    關(guān)于提升LED驅(qū)動(dòng)電源效率的技巧總結(jié): 1.主電流回路PCB盡量短。LAYPCB的經(jīng)驗(yàn),及布局,這個(gè)沒(méi)什么,快速的方法就是多看別人的作品。 2.優(yōu)化變壓器參數(shù)設(shè)計(jì),減少振鈴帶來(lái)的渦流損耗。這個(gè)比較
    發(fā)表于 01-17 10:07

    AN54-毫安安培的超高效率(高達(dá)95%)的功率轉(zhuǎn)換

    電子發(fā)燒友網(wǎng)站提供《AN54-毫安安培的超高效率(高達(dá)95%)的功率轉(zhuǎn)換.pdf》資料免費(fèi)下載
    發(fā)表于 01-09 14:54 ?0次下載
    AN54-<b class='flag-5'>從</b>毫安<b class='flag-5'>到</b>安培的超高<b class='flag-5'>效率</b>(高達(dá)95%)的功率轉(zhuǎn)換

    Dockerfile鏡像制作與Docker-Compose容器編排

    Dockerfile鏡像制作 docker/podman中, 鏡像是容器的基礎(chǔ),每次執(zhí)行docker run的時(shí)候都會(huì)指定哪個(gè)基本鏡像作為容器運(yùn)行的基礎(chǔ)。我們之前的docker的操作都是使用來(lái)
    的頭像 發(fā)表于 01-07 11:01 ?595次閱讀
    <b class='flag-5'>Dockerfile</b>鏡像制作與Docker-Compose容器編排

    devops使用最廣泛的集成工具盤(pán)點(diǎn)

    devops使用最廣泛的集成工具包括GitLab(全棧DevOps平臺(tái))、Jenkins(CI/CD自動(dòng)化服務(wù)器)、Docker(容器化技術(shù))、Kubernetes(容器編排平臺(tái))、Ansible
    的頭像 發(fā)表于 11-26 13:48 ?437次閱讀

    永磁同步電機(jī)效率提升方法

    提升永磁同步電機(jī)效率的方法可以多個(gè)方面進(jìn)行,以下是一些有效的方法: 優(yōu)化電機(jī)設(shè)計(jì) : 增加磁場(chǎng)的強(qiáng)度:通過(guò)增加永磁體的磁通密度和提高永磁體及鐵心的磁導(dǎo)率,可以有效提升電機(jī)的磁場(chǎng)強(qiáng)度,
    的頭像 發(fā)表于 11-22 10:13 ?1148次閱讀

    如何提升EDA設(shè)計(jì)效率

    EDA(Electronic Design Automation,電子設(shè)計(jì)自動(dòng)化)設(shè)計(jì)技術(shù)是現(xiàn)代電子工程領(lǐng)域的關(guān)鍵技術(shù)之一,提升EDA設(shè)計(jì)效率對(duì)于電子工程師和整個(gè)電子行業(yè)都至關(guān)重要。以下是一些提升
    的頭像 發(fā)表于 11-08 14:23 ?845次閱讀

    提升效率:RTC時(shí)鐘實(shí)用設(shè)置

    今天來(lái)給大家講解的是RTC時(shí)鐘實(shí)用性,提升絕對(duì)的效率。
    的頭像 發(fā)表于 11-04 16:35 ?1165次閱讀
    <b class='flag-5'>提升</b><b class='flag-5'>效率</b>:RTC時(shí)鐘實(shí)用設(shè)置

    如何提升RFID手持終端的讀寫(xiě)效率

    RFID(射頻識(shí)別)手持終端是一種便攜式設(shè)備,用于讀取和寫(xiě)入RFID標(biāo)簽。提升RFID手持終端的讀寫(xiě)效率對(duì)于提高物流、庫(kù)存管理、零售等行業(yè)的工作效率至關(guān)重要。以下是一些提升RFID手持
    的頭像 發(fā)表于 10-29 09:41 ?541次閱讀

    Devops工具鏈集成的意義及基本原理

    Devops工具鏈集成的意義在于實(shí)現(xiàn)開(kāi)發(fā)(Development)與運(yùn)維(Operations)之間的緊密協(xié)作,通過(guò)自動(dòng)化流程提高軟件交付的速度、質(zhì)量和穩(wěn)定性。其基本原理是通過(guò)一系列相互連接的工具,涵蓋代碼編寫(xiě)到部署、監(jiān)控的全
    的頭像 發(fā)表于 10-14 10:32 ?398次閱讀

    常用的devops工具集成方法

    常用的devops工具集成方法涵蓋了軟件開(kāi)發(fā)和運(yùn)維的各個(gè)方面,版本控制自動(dòng)化構(gòu)建、測(cè)試、部署和監(jiān)控。這些工具的有效集成可以幫助團(tuán)隊(duì)提高協(xié)作效率,減少溝通障礙,實(shí)現(xiàn)快速、高質(zhì)量的軟件
    的頭像 發(fā)表于 10-09 11:21 ?421次閱讀