久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

根據(jù)Dockerfile構(gòu)建鏡像

根據(jù)Dockerfile構(gòu)建出一個鏡像
Dockfile是一種被Docker程序解釋的腳本,Dockerfile由一條一條的指令組成,每條
指令對應(yīng)Linux下面的一條命令。Docker程序?qū)⑦@些Dockerfile指令翻譯真正的Linux命
令。Dockerfile有自己書寫格式和支持的命令,Docker程序解決這些命令間的依賴關(guān)系,
類似于Makefile。Docker程序?qū)⒆x取Dockerfile,根據(jù)指令生成定制的image。相比
image這種黑盒子,Dockerfile這種顯而易見的腳本更容易被使用者接受,它明確的表明
image是怎么產(chǎn)生的。有了Dockerfile,當(dāng)我們需要定制自己額外的需求時,只需在
Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻煩。
Dockerfile由一行行命令語句組成,并且支持以# 開頭的注釋行。
Dockerfile的指令是忽略大小寫的,建議使用大寫,每一行只支持一條指令,每條指令
可以攜帶多個參數(shù)。
Dockerfile的指令根據(jù)作用可以分為兩種:構(gòu)建指令和設(shè)置指令。
構(gòu)建指令用于構(gòu)建image,其指定的操作不會在運(yùn)行image的容器上執(zhí)行;
設(shè)置指令用于設(shè)置image的屬性,其指定的操作將在運(yùn)行image的容器中執(zhí)行。
一般的,Dockerfile分為四部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令和容器啟動時
執(zhí)行指令。
下面是一個例子:
#This dockerfile uses the ubuntu image
#VERSION 2 - EDITION 1
#Author: docker_user
#Command format: Instruction [arguments / command] ..
#Base image to use, this must be set as the first line
#第一行必須指明基于的基礎(chǔ)鏡像
FROM ubuntu
#Maintainer: docker_user<docker_user at email.com> (@docker_user)
#維護(hù)該鏡像的用戶信息
MAINTAINER docker_user docker_user@email.com
#Commands to update the image
#鏡像操作命令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >>
/etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#開啟80端口
EXPOSE 80
#Commands when creating a new container
#啟動容器時執(zhí)行的命令
CMD /usr/sbin/nginx
在編寫dockerfile時,有嚴(yán)格的格式要遵循:
其中,一開始必須使用FROM指令指明所基于的鏡像名稱,接下來使用MAINTAINER指
令說明維護(hù)者信息。后面則是鏡像操作指令,例如RUN指令,RUN 指令將對鏡像執(zhí)行跟隨
的命令。每運(yùn)行一條RUN 指令,都會給基礎(chǔ)鏡像添加新的一層并提交。最后是CMD指令,
來指定運(yùn)行容器時的操作命令。
dockerfile指令
指令的一般格式為INSTRUCTION arguments,指令包括FROM 、MAINTAINER 、RUN
等。
(1)FROM(指定基礎(chǔ)image)
構(gòu)建指令,必須指定且需要在Dockerfile其他指令的前面。后續(xù)的指令都依賴于該指令指定
的image。FROM指令指定的基礎(chǔ)image可以是官方遠(yuǎn)程倉庫中的,也可以位于本地倉庫。
該指令有兩種格式:
FROM <image>
指定基礎(chǔ)image為該image的最后修改的版本。
或者:
FROM <image>:<tag>
指定基礎(chǔ)image為該image的一個tag版本。
(2)MAINTAINER(用來指定鏡像創(chuàng)建者信息)
構(gòu)建指令,用于將image的制作者相關(guān)的信息寫入到image中。當(dāng)我們對該image執(zhí)行
docker inspect命令時,輸出中有相應(yīng)的字段記錄該信息。
格式:
MAINTAINER <name>
(3)RUN(安裝軟件用)
構(gòu)建指令,RUN可以運(yùn)行任何被基礎(chǔ)image支持的命令。如基礎(chǔ)image選擇了ubuntu,那
么軟件管理部分只能使用ubuntu的命令。
該指令有兩種格式:
RUN <command> (the command is run in a shell - /bin/sh -c)
RUN ["executable", "param1", "param2" ... ] (exec form)
前者將在 shell 終端中運(yùn)行命令,即/bin/sh -c ;后者則使用exec 執(zhí)行。
指定使用其它終端可以通過第二種方式實(shí)現(xiàn),例如 RUN ["/bin/bash", "-c", "echo hello"]

每條RUN指令將在當(dāng)前鏡像基礎(chǔ)上執(zhí)行指定命令,并提交為新的鏡像。當(dāng)命令較長時可以
使用“\”來換行。
(4)CMD(設(shè)置container啟動時執(zhí)行的操作)
該指令有三種格式:
設(shè)置指令,用于container啟動時指定的操作。該操作可以是執(zhí)行自定義腳本,也可以是執(zhí)
行系統(tǒng)命令。
CMD ["executable","param1","param2"] 使用exec 執(zhí)行,推薦方式;
CMD command param1 param2 在/bin/sh中執(zhí)行,提供給需要交互的應(yīng)用;
當(dāng)Dockerfile指定了ENTRYPOINT,那么使用下面的格式:
CMD ["param1","param2"] 提供給ENTRYPOINT 的默認(rèn)參數(shù);
ENTRYPOINT指定的是一個可執(zhí)行的腳本或者程序的路徑,該指定的腳本或者程序?qū)?br/>param1和param2作為參數(shù)執(zhí)行。所以如果CMD指令使用上面的形式,那么Dockerfile中
必須要有配套的ENTRYPOINT。
指定啟動容器時執(zhí)行的命令,每個Dockerfile只能有一條CMD 命令。如果指定了多條命
令,只有最后一條會被執(zhí)行。如果用戶啟動容器時候指定了運(yùn)行的命令,則會覆蓋掉CMD
指定的命令。
5)ENTRYPOINT(設(shè)置container啟動時執(zhí)行的操作)
設(shè)置指令,指定容器啟動時執(zhí)行的命令,可以多次設(shè)置,但是只有最后一個有效。
兩種格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2 (shell中執(zhí)行)。
配置容器啟動后執(zhí)行的命令,并且不可被docker run提供的參數(shù)覆蓋。
每個Dockerfile 中只能有一個ENTRYPOINT,當(dāng)指定多個時,只有最后一個起效。
該指令的使用分為兩種情況,一種是獨(dú)自使用,另一種和CMD指令配合使用。
當(dāng)獨(dú)自使用時,如果你還使用了CMD命令且CMD是一個完整的可執(zhí)行的命令,那么CMD
指令和ENTRYPOINT會互相覆蓋只有最后一個CMD或者ENTRYPOINT有效。
例如: CMD指令將不會被執(zhí)行,只有ENTRYPOINT指令被執(zhí)行
CMD echo “Hello, World!”
ENTRYPOINT ls -l
另一種用法和CMD指令配合使用來指定ENTRYPOINT的默認(rèn)參數(shù),這時CMD指令不是一
個完整的可執(zhí)行命令,僅僅是參數(shù)部分;ENTRYPOINT指令只能使用JSON方式指定執(zhí)行命
令,而不能指定參數(shù)。
例如:
FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["/usr/bin/ls"]
(6)USER(設(shè)置container容器的用戶,默認(rèn)是root用戶)
格式為:
USER daemon
指定運(yùn)行容器時的用戶名或UID,后續(xù)的RUN 也會使用指定用戶。
當(dāng)服務(wù)不需要管理員權(quán)限時,可以通過該命令指定運(yùn)行用戶。并且可以在之前創(chuàng)建所需要的
用戶,例
如: RUN groupadd -r postgres&&useradd -r -g postgres postgres
例如: 指定memcached的運(yùn)行用戶
ENTRYPOINT ["memcached"]
USER daemon
或 EN
TRYPOINT ["memcached", "-u", "daemon"]
(7)EXPOSE(指定容器需要映射到宿主機(jī)器的端口)
格式為:
EXPOSE <port> [<port>...]
設(shè)置指令,該指令會將容器中的端口映射成宿主機(jī)器中的某個端口。當(dāng)你需要訪問容器的時
候,可以不是用容器的IP地址而是使用宿主機(jī)器的IP地址和映射后的端口。
要完成整個操作需要兩個步驟,首先在Dockerfile使用EXPOSE設(shè)置需要映射的容器端口,
然后在運(yùn)行容器的時候指定-p選項(xiàng)加上EXPOSE設(shè)置的端口,這樣EXPOSE設(shè)置的端口號會
被隨機(jī)映射成宿主機(jī)器中的一個端口號。也可以指定需要映射到宿主機(jī)器的哪個端口,這時
要確保宿主機(jī)器上的端口號沒有被使用。EXPOSE指令可以一次設(shè)置多個端口號,相應(yīng)的運(yùn)
行容器的時候,可以配套的多次使用-p選項(xiàng)。
例如: 映射一個端口
EXPOSE port1
#相應(yīng)的運(yùn)行容器使用的命令
docker run -p port1 image
例如: 映射多個端口
EXPOSE port1 port2 port3
#相應(yīng)的運(yùn)行容器使用的命令
docker run -p port1 -p port2 -p port3 image
#根據(jù)Dockerfile構(gòu)建鏡像還可以指定需要映射到宿主機(jī)器上的某個端口號
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
端口映射是docker比較重要的一個功能,原因在于我們每次運(yùn)行容器的時候容器的IP地址
不能指定而是在橋接網(wǎng)卡的地址范圍內(nèi)隨機(jī)生成的。宿主機(jī)器的IP地址是固定的,我們可以
將容器的端口的映射到宿主機(jī)器上的一個端口,免去每次訪問容器中的某個服務(wù)時都要查看
容器的IP的地址。對于一個運(yùn)行的容器,可以使用docker port加上容器中需要映射的端口
和容器的ID來查看該端口號在宿主機(jī)器上的映射端口。
(8)ENV(用于設(shè)置環(huán)境變量)
構(gòu)建指令,指定一個環(huán)境變量,會被后續(xù)RUN指令使用,并在容器運(yùn)行時保持。
格式:
ENV <key> <value>
設(shè)置了后,后續(xù)的RUN命令都可以使用,container啟動后,可以通過docker inspect查看
這個環(huán)境變量,也可以通過在docker run --env key=value時設(shè)置或修改環(huán)境變量。
假如你安裝了JAVA程序,需要設(shè)置JAVA_HOME,那么可以在Dockerfile中這樣寫:
ENV JAVA_HOME /path/to/java/dirent
再例如:
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC
/usr/src/postgress
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
(9)ADD(將源文件復(fù)制到container的目標(biāo)文件)
構(gòu)建指令,所有拷貝到container中的文件和文件夾權(quán)限為0755,uid和gid為0;
源文件要與Dockerfile位于相同目錄中;
1、如果源路徑是個文件,且目標(biāo)路徑是以 / 結(jié)尾, 則docker會把目標(biāo)路徑當(dāng)作一個目
錄,會把源文件拷貝到該目錄下。如果目標(biāo)路徑不存在,則會自動創(chuàng)建目標(biāo)路徑。
2、如果源路徑是個文件,且目標(biāo)路徑是不是以 / 結(jié)尾,則docker會把目標(biāo)路徑當(dāng)作一個文
件。
如果目標(biāo)路徑不存在,會以目標(biāo)路徑為名創(chuàng)建一個文件,內(nèi)容同源文件;
如果目標(biāo)文件是個存在的文件,會用源文件覆蓋它,當(dāng)然只是內(nèi)容覆蓋,文件名還是目標(biāo)文
件名。
如果目標(biāo)文件實(shí)際是個存在的目錄,則會源文件拷貝到該目錄下。 注意,這種情況下,最
好顯示的以 / 結(jié)尾,以避免混淆。
3、如果源路徑是個目錄,且目標(biāo)路徑不存在,則docker會自動以目標(biāo)路徑創(chuàng)建一個目錄,
把源路徑目錄下的文件拷貝進(jìn)來。如果目標(biāo)路徑是個已經(jīng)存在的目錄,則docker會把源路
徑目錄下的文件拷貝到該目錄下。
4、如果源文件是個歸檔文件(壓縮文件),則docker會自動幫解壓。
格式:
ADD <src> <dest>
該命令將復(fù)制指定的<src>到容器中的<dest>。
其中<src>可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個
tar 文件(自動解壓為目錄)
<dest>是container中的絕對路徑
例如:
#test
FROM ubuntu
MAINTAINER hello
ADD test1.txt test1.txt
ADD test1.txt test1.txt.bak
ADD test1.txt /mydir/
ADD data1 data1
ADD data2 data2
ADD zip.tar /myzip
(10)COPY
格式為 COPY <src><dest>
復(fù)制本地主機(jī)的<src>(為Dockerfile所在目錄的相對路徑)到容器中的<dest>。
源文件/目錄要與Dockerfile在相同的目錄中
COPY指令和ADD指令功能和使用方式類似。只是COPY指令不會做自動解壓工作。
(11)VOLUME(指定掛載點(diǎn))
設(shè)置指令,使容器中的一個目錄具有持久化存儲數(shù)據(jù)的功能,該目錄可以被容器本身使用,
也可以共享給其他容器使用。我們知道容器使用的是AUFS,這種文件系統(tǒng)不能持久化數(shù)
據(jù),當(dāng)容器關(guān)閉后,所有的更改都會丟失。當(dāng)容器中的應(yīng)用有持久化數(shù)據(jù)的需求時可以在
Dockerfile中使用該指令。
格式:
VOLUME ["<mountpoint>"]
例如:FROM base
VOLUME ["/tmp/data"]
運(yùn)行通過該Dockerfile生成image的容器,/tmp/data目錄中的數(shù)據(jù)在容器關(guān)閉后,里面的
數(shù)據(jù)還存在。例如另一個容器也有持久化數(shù)據(jù)的需求,且想使用上面容器共享的/tmp/data
目錄,那么可以運(yùn)行下面的命令啟動一個容器:
docker run -t -i -rm -volumes-from container1 image2 bash
container1為第一個容器的ID,image2為第二個容器運(yùn)行image的名字。
(12)WORKDIR(切換目錄)
設(shè)置指令,可以多次切換(相當(dāng)于cd命令),對RUN,CMD,ENTRYPOINT生效。為后續(xù)的
RUN、CMD、ENTRYPOINT 指令配置工作目錄。
格式:
WORKDIR /path/to/workdir
例如: 在 /p1/p2 下執(zhí)行 vim a.txt
WORKDIR /p1
WORKDIR p2
RUN vim a.txt
可以使用多個WORKDIR指令,后續(xù)命令如果參數(shù)是相對路徑,則會基于之前命令指定的路
徑。
例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
則最終路徑為/a/b/c。
(13)ONBUILD(在子鏡像中執(zhí)行)
ONBUILD <Dockerfile關(guān)鍵字>
ONBUILD 指定的命令在構(gòu)建鏡像時并不執(zhí)行,而是在它的子鏡像中執(zhí)行。
格式為:
ONBUILD [INSTRUCTION] 。
配置當(dāng)所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎(chǔ)鏡像時,所執(zhí)行的操作指令。
例如,Dockerfile使用如下的內(nèi)容創(chuàng)建了鏡像image-A 。
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基于 image-A 創(chuàng)建新的鏡像時,新的Dockerfile中使用FROM image-A 指定基礎(chǔ)鏡
像時,會自動執(zhí)行ONBUILD 指令內(nèi)容。
等價于在后面添加了兩條指令。
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。
編寫完成Dockerfile之后,可以通過docker build 命令來創(chuàng)建鏡像。
基本的格式為docker build [選項(xiàng)] 路徑,該命令將讀取指定路徑下的Dockerfile,并將該
路徑下所有內(nèi)容發(fā)送給Docker 服務(wù)端,由服務(wù)端來創(chuàng)建鏡像。因此一般建議放置
Dockerfile的目錄為空目錄。
要指定鏡像的標(biāo)簽信息,可以通過-t選項(xiàng),例如
$ sudo docker build –t myrepo /myapp/tmp/test1/
docker應(yīng)用案例:使用dockerfile創(chuàng)建sshd鏡像模板并提供http訪問應(yīng)用
1) 創(chuàng)建一個sshd_dockerfile工作目錄
根據(jù)Dockerfile構(gòu)建鏡像
編輯run.sh腳本
[root@docker01 sshd_dockerfile]# cat run.sh
#!/bin/sh
/usr/sbin/httpd -D DFOREGROUND
/usr/sbin/sshd -D
在主機(jī)上生成ssh秘鑰對,并創(chuàng)建authorized_keys文件
根據(jù)Dockerfile構(gòu)建鏡像
[root@docker01 sshd_dockerfile]# cat /root/.ssh/id_rsa.pub >
/root/sshd_dockerfile/authorized_keys
[root@docker01 sshd_dockerfile]# ls
authorized_keys Dockerfile run.sh
2、編寫Dockerfile文件,內(nèi)容如下:
[root@docker01 sshd_dockerfile]# cat /root/sshd_dockerfile/Dockerfile
FROM centos:latest
MAINTAINER from ly@aliyun.com
RUN yum install -y -q httpd openssh-server sudo net-tools
RUN useradd admin
RUN echo "admin:admin" | chpasswd
RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN mkdir -p /var/run/sshd
RUN mkdir -p /home/admin/.ssh
RUN sed -ri 's/#ServerName www.example.com:80/ServerName www.cloud.com/g'
/etc/httpd/conf/httpd.conf
ADD authorized_keys /home/admin/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 775 /run.sh
EXPOSE 22 80
CMD ["/run.sh"]
以上選項(xiàng)的含義解釋:
FROM centos:latest 選擇一個已有的os鏡像作為基礎(chǔ)
MAINTAINER 鏡像的作者
RUN yum install -y -q httpd openssh-server sudo 安裝httpd、openssh-server、

監(jiān)利網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

sudo和net-tools軟件包
添加測試用戶admin,密碼admin,并且將此用戶添加到sudoers里
RUN useradd admin
RUN echo "admin:admin" | chpasswd
RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers
下面這兩句比較特殊,在centos6上必須要有,否則創(chuàng)建出來的容器sshd不能登錄
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
注意:centos7上下面4句必須要有,否則創(chuàng)建出來的容器sshd不能登錄
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
將公鑰信息上傳到遠(yuǎn)程連接用戶的宿主目錄的.ssh下
ADD authorized_keys /home/admin/.ssh/authorized_keys
啟動sshd服務(wù)并且暴露22端口
RUN mkdir /var/run/sshd
EXPOSE 22 80
CMD ["/run.sh"] 運(yùn)行腳本, 也可以寫成這種方式CMD ["/usr/sbin/sshd", "-D"]
3、在sshd_dockerfile目錄下,使用docker build命令來創(chuàng)建鏡像,注意:在最后還有一
個”.”,表示使用當(dāng)前目錄中的dockerfile
[root@docker01 sshd_dockerfile]# docker build --no-cache -t "centos:httpv1" .
Sending build context to Docker daemon 4.608kB
Step 1/18 : FROM centos:latest
---> 3fa822599e10
Step 2/18 : MAINTAINER from ly@aliyun.com
---> 0d8eeedbef89
Removing intermediate container 661854eafd44
Step 14/18 : ADD authorized_keys /home/admin/.ssh/authorized_keys
....................
4、可以查看到生成的鏡像文件:
根據(jù)Dockerfile構(gòu)建鏡像
啟動容器,并做映射端口
根據(jù)Dockerfile構(gòu)建鏡像
使用admin用戶登錄
根據(jù)Dockerfile構(gòu)建鏡像
訪問容器的網(wǎng)站服務(wù):
根據(jù)Dockerfile構(gòu)建鏡像

網(wǎng)頁名稱:根據(jù)Dockerfile構(gòu)建鏡像
瀏覽路徑:http://sd-ha.com/article34/jsjcpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、響應(yīng)式網(wǎng)站、外貿(mào)建站、企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)