国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Docker容器:docker鏡像的創(chuàng)建及dockerfile

這篇具有很好參考價(jià)值的文章主要介紹了Docker容器:docker鏡像的創(chuàng)建及dockerfile。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Docker容器:docker鏡像的創(chuàng)建及dockerfile案例

一.docker鏡像的三種創(chuàng)建方法

創(chuàng)建鏡像有三種方法:基于現(xiàn)有鏡像創(chuàng)建、基于本地模板創(chuàng)建及基于dockerfile創(chuàng)建

1.基于現(xiàn)有鏡像創(chuàng)建

1.1 啟動(dòng)鏡像

#首先啟動(dòng)一個(gè)鏡像,在容器里做修改
docker run -itd centos:7 /bin/bash
#創(chuàng)建并啟動(dòng)鏡像
docker ps 
#查看啟動(dòng)的鏡像信息

1.2 生成新鏡像

#將修改后的容器提交為新的鏡像,需要使用該容器的 ID 號(hào)創(chuàng)建新鏡像
docker commit -m "new-images" -a  "test" 693b1c3a61ed  centos:test
#常用選項(xiàng):
-m 說明信息;
-a 作者信息;
-p 生成過程中停止容器的運(yùn)行;
 
docker images
#查看新生成的鏡像

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

2.基于本地模板創(chuàng)建

2.1 OPENVZ 下載模板

#通過導(dǎo)入操作系統(tǒng)模板文件可以生成鏡像,模板可以從 OPENVZ 開源項(xiàng)目下載,下載地址為http://openvz.org/Download/template/precreated
#使用wget工具來下載一個(gè)名為debian-7.0-x86-minimal.tar.gz的OpenVZ模板文件。確保在執(zhí)行該命令之前,已經(jīng)安裝了wget工具,如果沒有安裝可以使用以下命令來進(jìn)行安裝:
yum install wget -y 

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

2.2 導(dǎo)入容器生成鏡像

#查看這個(gè)模板導(dǎo)入到docker的debian:test鏡像
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:test

3.基于dockerfile創(chuàng)建

3.1 dockerfile結(jié)構(gòu)及分層

(1)dockerfile結(jié)構(gòu)大致分為4個(gè)部分

  • 基礎(chǔ)鏡像信息
  • 維護(hù)者信息
  • 鏡像操作指令
  • 容器啟動(dòng)時(shí)執(zhí)行指令

Dockerfile是一個(gè)文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。有了Dockerfile,當(dāng)我們需要定制自己額外的需求時(shí),只需在Dockerfile上添加或者修改指令,重新生成 image 即可, 省去了敲命令的麻煩。

除了手動(dòng)生成Docker鏡像之外,可以使用Dockerfile自動(dòng)生成鏡像。

Dockerfile是由多條的指令組成的文件,其中每條指令對(duì)應(yīng) Linux 中的一條命令,Docker 程序?qū)⒆x取Dockerfile 中的指令生成指定鏡像。

(2)dockerfile鏡像的結(jié)構(gòu)分層

  • Dockerfile 中的每個(gè)指令都會(huì)創(chuàng)建一個(gè)新的鏡像層
  • 鏡像層將被緩存和復(fù)用
  • 當(dāng)Dockerfile 的指令修改了,復(fù)制的文件變化了,或者構(gòu)建鏡像時(shí)指定的變量不同了,對(duì)應(yīng)的鏡像層緩存就會(huì)失效
  • 某一層的鏡像緩存失效,它之后的鏡像層緩存都會(huì)失效
  • 鏡像層是不可變的,如果在某一層中添加一個(gè)文件,然后在下一層中刪除它,則鏡像中依然會(huì)包含該文件,只是這個(gè)文件在容器中不可見了不會(huì)影響在鏡像中的數(shù)據(jù).

3.2 聯(lián)合文件系統(tǒng)

(1)聯(lián)合文件系統(tǒng)(unionFS)概念

聯(lián)合文件系統(tǒng)(unionFS):分層、輕量級(jí)并且高性能的文件系統(tǒng),即一層一層疊加然后制作成的鏡像,底層為內(nèi)核加載,然后是rootfs系統(tǒng),再上層是只可讀的基礎(chǔ)鏡像,鏡像啟動(dòng)后成為容器即為可讀可寫層此層保存數(shù)據(jù)等,然后可以再打包成一個(gè)新的鏡像保存數(shù)據(jù)

(2)特點(diǎn)

一次同時(shí)加載多個(gè)文件系統(tǒng),但從外面看起來,只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來,這樣最終的文件系統(tǒng)會(huì)包含所有底層的文件和目錄。

我們下載的時(shí)候看到的一層層的就是聯(lián)合文件系統(tǒng)。

3.3 docker鏡像加載原理及過程

(1)Docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)就是UnionFS

(2)bootfs主要包含bootloader和kernel,bootloader主要是引導(dǎo)加載kernel,Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng)。

(3)在Docker鏡像的最底層是bootfs,這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸載bootfs

(4)我們可以理解成一開始內(nèi)核里什么都沒有,操作一個(gè)命令下載debian,這時(shí)就會(huì)在內(nèi)核上面加了一層基礎(chǔ)鏡像;再安裝一個(gè)emacs,會(huì)在基礎(chǔ)鏡像上疊加一層image;接著再安裝一個(gè)apache,又會(huì)在images上面再疊加一層image。最后它們看起來就像一個(gè)文件系統(tǒng)即容器的rootfs。在Docker的體系里把這些rootfs叫做Docker的鏡像。但是,此時(shí)的每一層rootfs都是read-only的,我們此時(shí)還不能對(duì)其進(jìn)行操作。當(dāng)我們創(chuàng)建一個(gè)容器,也就是將Docker鏡像進(jìn)行實(shí)例化,系統(tǒng)會(huì)在一層或是多層read-only的rootfs之上分配一層空的read-write的rootfs。

(5)為什么容器中的centos大小只有200M

因?yàn)閷?duì)于精簡(jiǎn)的OS,rootfs可以很小,只需要包含最基本的命令、工具和程序庫(kù)就可以了,因?yàn)榈讓又苯佑盟拗鳈C(jī)的kernel,自己只需要提供rootfs就可以了。由此可見對(duì)于不同的linux發(fā)行版,bootfs基本是一致的,rootfs會(huì)有差別,因此不同的發(fā)行版可以公用bootfs。

4.dockerfile操作常用的指令

4.1 FROM指令

用于指定生成新的鏡像所基于的基礎(chǔ)進(jìn)項(xiàng),dockerfile的第一條命令必須是FROM指定本次生成鏡像是基于那個(gè)基礎(chǔ)鏡像進(jìn)程的,每創(chuàng)建一個(gè)鏡像需要一個(gè)FROM。

4.2 MAINTAINER 指令

說明新鏡像的維護(hù)人信息

4.3 RUN指令

在所基于的鏡像上執(zhí)行命令,并提交到新的鏡像中,例如執(zhí)行yum安裝等

4.4 ENTRYPOINT指令

(1)ENTRYPOINT [“要運(yùn)行的程序”, “參數(shù) 1”, “參數(shù) 2”]

(2)設(shè)定容器啟動(dòng)時(shí)第一個(gè)運(yùn)行的命令及其參數(shù),此指令為在使用docker exec 進(jìn)入容器時(shí)就添加的命令參數(shù)。
(3)可以通過使用命令docker run --entrypoint 來覆蓋鏡像中的ENTRYPOINT指令的內(nèi)容。

(4)示例

ENTRYPOINT [“rm”, “-rf”, “/*”]

4.5 CMD指令

(1)CMD [“要運(yùn)行的程序”, “參數(shù)1”, “參數(shù)2”]

(2)此指令為指定進(jìn)入容器之后的第一個(gè)命令或腳步,進(jìn)入容器后在容器中的shell中執(zhí)行的第一個(gè)命令,dockerfile中只能有一條CMD命令若有多條CMD則只執(zhí)行最后一條命令。

(3)如果在docker run時(shí)指定了命令或者鏡像中有ENTRYPOINT指令則CMD程序不會(huì)執(zhí)行。

(4)docker RUN優(yōu)先級(jí)>ENTRYPOINT指令>CMD指令

(5)示例

CMD java -jar xxxxx.jar 8090 ——啟動(dòng)微服務(wù)

4.6 EXPOSE指令

(1)EXPOSE “端口號(hào)”

(2)指定dockerfile生成的新鏡像加載到 Docker 時(shí)要開啟的端口

4.7 ENV指令

(1)ENV 環(huán)境變量 變量值

(2)設(shè)置一個(gè)環(huán)境變量的值,會(huì)被后面的 RUN 使用
linxu PATH=$PATH:/opt
ENV PATH $PATH:/opt

4.8 ADD指令

(1)ADD 源路徑 目標(biāo)路徑

(2)ADD指令用于將源文件復(fù)制到dockerfile產(chǎn)生的新鏡像中,要求源文件必須與dockerfile在同一文件夾下,或者同一個(gè)url下。有以下注意事項(xiàng):

  • 源路徑為文件時(shí),目標(biāo)路徑以/結(jié)尾則dockerfile將目標(biāo)文件視為目錄將源路徑的文件存到模板路徑的目錄下,且若模板路徑不存在則自動(dòng)創(chuàng)建模板路徑;
  • 源路徑為文件時(shí),目標(biāo)路徑不以/結(jié)尾則dockerfile將目標(biāo)路徑視為文件,則直接將目標(biāo)路徑文件內(nèi)容覆蓋但名稱不會(huì)改變,如果模板路徑不存在則會(huì)創(chuàng)建一個(gè)以目標(biāo)路徑為名的文件,內(nèi)容為源路徑的文件內(nèi)容;
  • 源路徑為文件夾時(shí),若目標(biāo)路徑存在則直接將原路徑的文件夾拷貝到模板路徑的目錄下;
  • 若目標(biāo)路徑不存在,則自動(dòng)創(chuàng)建一個(gè)以目標(biāo)路徑為名的文件夾將源文件夾拷貝到目錄下;
  • 若源文件是個(gè)歸檔文件或壓縮文件,docker會(huì)自動(dòng)幫忙解壓。URL下載和解壓特性不能一起使用。任何壓縮文件通過URL拷貝,都不會(huì)自動(dòng)解壓。

4.9 COPY指令

(1)copy 源文件/目錄 目標(biāo)文件/目錄

(2)只復(fù)制本地主機(jī)上的文件/目錄 復(fù)制目標(biāo)點(diǎn)為鏡像中。要求本機(jī)文件必須與dockerfile在同一路徑下。

(3)ADD與copy對(duì)比:

  • 都有本地復(fù)制文件和目錄到鏡像的功能;
  • ADD復(fù)制歸檔文件和壓縮文件會(huì)自動(dòng)解壓;
  • 都要求與dockerfile在同一文件夾;URL拉取目錄來復(fù)制;
  • COPY只能復(fù)制本地主機(jī)文件到鏡像中,ADD可以復(fù)制到url中。

4.10 VOLUME指令

(1)volume [“目錄”]

(2)在容器中創(chuàng)建一個(gè)掛載點(diǎn)

4.11 USER指令

(1)USER 用戶名/uid

(2)指定運(yùn)行容器時(shí)的用戶

4.12 WORKDIR指令

為后續(xù)的RUN/CMD/ENTRYPOINT指定工作目錄,可以理解為切換到指定的目錄執(zhí)行RUN等其他指令。

4.13 ONBUILD指令

(1)指定所生成的鏡像作為一個(gè)基礎(chǔ)鏡像時(shí)所要允許的命令,調(diào)用有ONBUILD命令時(shí)的鏡像會(huì)先執(zhí)行ONBUILD命令。在使用其他鏡像時(shí),仔細(xì)檢查ONBUILD命令的內(nèi)容。

(2)當(dāng)在一個(gè)Dockerfile文件中加上ONBUILD指令,該指令對(duì)利用該Dockerfile構(gòu)建鏡像(比如為A鏡像)不會(huì)產(chǎn)生任何實(shí)質(zhì)性影響。 但是當(dāng)編寫一個(gè)新的Dockerfile文件來基于A鏡像構(gòu)建一個(gè)鏡像(比如為B鏡像)時(shí),這時(shí)構(gòu)造A鏡像的Dockerfile文件中的ONBUILD指令就生效了,在構(gòu)建B鏡像的過程中,首先會(huì)執(zhí)行ONBUILD指令指定的指令,然后才會(huì)執(zhí)行其它指令。

(3)查看 是否有別的dockerfile ,需要?jiǎng)h除,這是別人的,如不想讓使用,會(huì)造成一定的問題:OnBuild rm - rf /*

4.14 HEALTHCHECK指令

健康檢查

5.編寫 Dockerfile注意

在編寫 Dockerfile 時(shí),有嚴(yán)格的格式需要遵循:

(1)第一行必須使用 EROM 指令指明所基于的鏡像名稱;

(2)之后使用 MAINTAINER 指令說明維護(hù)該鏡像的用戶信息;

(3)然后是鏡像操作相關(guān)指令,如 RUN 指令。每運(yùn)行一條指令,都會(huì)給基礎(chǔ)鏡像添加新的一層。

(4)最后使用 CMD 指令指定啟動(dòng)容器時(shí)要運(yùn)行的命令操作。

二.dockerfile構(gòu)建鏡像實(shí)例

1.dockerfile構(gòu)建httpd

#創(chuàng)建并進(jìn)入文件夾,每個(gè)服務(wù)一個(gè)文件夾
mkdir  /opt/apache
cd     /opt/apache
#創(chuàng)建Dockerfile文件
vim Dockerfile
#內(nèi)容如下:
FROM  centos:7
#基于的基礎(chǔ)鏡像指定為centos:7,注意本機(jī)要有此基礎(chǔ)鏡像
MAINTAINER this  is  apache  image  <test>
#說明鏡像維護(hù)人信息為,指定用戶為test
RUN yum -y update
RUN yum -y install httpd 
#鏡像RUN指令指定啟動(dòng)容器后的運(yùn)行命令,yum安裝update和httpd服務(wù)
EXPOSE 80
#開啟80端口
ADD index.html /var/www/html/index.html
#復(fù)制宿主機(jī)index.html文件到容器的 /var/www/html/index.html
ENTRYPOINT ["/usr/sbin/apachectl"]
CMD ["-D","FOREGROUND"]
#使用前臺(tái)啟動(dòng)apache注意使用絕對(duì)路徑,如果后臺(tái)啟動(dòng),啟動(dòng)完shell就結(jié)束了容器就結(jié)束了,保存退出。
echo "this is  test web">index.html
#準(zhǔn)備網(wǎng)站的網(wǎng)頁(yè),注意必須在和Dockerfile文件相同的目錄
docker build -t  httpd:centos .  
#將dockerfile 文件生成鏡像注意最后有個(gè)點(diǎn)。
docker images
#可查看已經(jīng)有httpd的包
docker run -d -p 40330:80  httpd:centos 
#測(cè)試安裝是否成功:新鏡像運(yùn)行容器,映射本主機(jī)的40330端口為容器的80端口
訪問192.168.198.11:40330 進(jìn)行測(cè)試是否可以訪問容器的httpd網(wǎng)頁(yè)

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

擴(kuò)展:

創(chuàng)建Dockerfile的配置文件還有兩種方法:

(1)方法一:

#創(chuàng)建Dockerfile文件
vim Dockerfile

FROM  centos:7
#基于的基礎(chǔ)鏡像指定為centos:7,注意本機(jī)要有此基礎(chǔ)鏡像
MAINTAINER this  is  apache  images  <test>
#說明鏡像維護(hù)人信息為,指定用戶為test
RUN yum -y install httpd 
#鏡像RUN指令指定啟動(dòng)容器后的運(yùn)行命令,yum安裝httpd服務(wù)
EXPOSE 80
#開啟80端口
ADD index.html /var/www/html/index.html
#復(fù)制宿主機(jī)index.html文件到容器的 /var/www/html/index.html
CMD /usr/sbin/apachect -D FOREGROUND
#使用前臺(tái)啟動(dòng)apache注意使用絕對(duì)路徑,如果后臺(tái)啟動(dòng),啟動(dòng)完shell就結(jié)束了容器就結(jié)束了,保存退出。

后再接著準(zhǔn)備網(wǎng)站的網(wǎng)頁(yè),訪問等操作

(2)方法二:

vim Dockerfile
#基于的基礎(chǔ)鏡像
FROM centos:7
#維護(hù)鏡像的用戶信息
MAINTAINER this is apache image <test>
#鏡像操作指令安裝apache軟件
RUN yum -y update
RUN yum -y install httpd
#開啟 80 端口
EXPOSE 80
#復(fù)制網(wǎng)站首頁(yè)文件
ADD index.html /var/www/html/index.html
#將執(zhí)行腳本復(fù)制到鏡像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#保存退出
#準(zhǔn)備執(zhí)行腳本
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*							#清理httpd的緩存
/usr/sbin/apachectl -D FOREGROUND			#指定為前臺(tái)運(yùn)行
#因?yàn)镈ocker容器僅在它的1號(hào)進(jìn)程(PID為1)運(yùn)行時(shí),會(huì)保持運(yùn)行。如果1號(hào)進(jìn)程退出了,Docker容器也就退出了。

后再接著準(zhǔn)備網(wǎng)站的網(wǎng)頁(yè),訪問等操作

2.dockerfile構(gòu)建sshd

#創(chuàng)建并進(jìn)入文件夾,每個(gè)服務(wù)一個(gè)文件夾
mkdir  /opt/sshd
cd     /opt/sshd
vim Dockerfile
#第一行必須指明基于的基礎(chǔ)鏡像
FROM centos:7
#作者信息
MAINTAINER this is ssh image <ssh>
#鏡像的操作指令
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo 'abc1234' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config						#不使用PAM認(rèn)證
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd	#取消pam限制
RUN ssh-keygen -t rsa -A														#生成密鑰認(rèn)證文件
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd" , "-D"]			#/usr/sbin/sshd -D 用于前臺(tái)啟動(dòng)sshd服務(wù)
#啟動(dòng)容器并修改root密碼
docker run -d -P sshd:centos
docker ps -a
#登入端口鏡像
ssh localhost -p 32771
#查看鏡像地址
ifconfig

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

3.dockerfile構(gòu)建systemd

mkdir /opt/systemctl
cd /opt/systemctl
#創(chuàng)建systemd目錄
vim Dockerfile
#編輯Dockerfile文件內(nèi)容如下
FROM sshd:centos
#以sshd:centos為基礎(chǔ)鏡像,注意要做上面的sshd實(shí)例,不然無此進(jìn)項(xiàng)不能制作systemd鏡像
MAINTAINER this is systemctl image <systemd>
ENV container docker
#除了systemd-tmpfiles-setup.service,刪除其它所有文件
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i;done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target. wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
docker build -t systemd:centos .
#生成systemd鏡像
docker run --privileged -d -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init
#啟動(dòng)容器,并掛載宿主機(jī)目錄掛載到容器中,和進(jìn)行初始化
#--privileged:使container內(nèi)的root擁有真正的root權(quán)限。否則,container內(nèi)的root只是外部的一個(gè)普通用戶權(quán)限。
docker ps -a

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

#進(jìn)入容器
docker exec -it 56b06afcef9a  /bin/bash
systemctl start sshd
systemctl status sshd

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

方法二:
docker run --privileged -it -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init &

4.dockerfile構(gòu)建nginx

mkdir /opt/nginx
cd /opt/nginx/
cp /opt/nginx-1.12.2.tar.gz /opt/nginx
#創(chuàng)建nginx目錄,將nginx安裝包放到創(chuàng)建的nginx目錄下,必須與Dockerfile文件在同一目錄下
vim Dockerfile
#編輯nginx的dockerfile文件內(nèi)容如下
FROM centos:7
#基于基礎(chǔ)鏡像,centos
MAINTAINER this is nginx image <nginx>
#用戶信息,鏡像維護(hù)用戶為nginx
RUN yum -y update
#此內(nèi)容若保存可注釋掉
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#安裝編譯安裝工具
ADD nginx-1.12.2.tar.gz /opt/
#上傳nginx軟件壓縮包,docker自動(dòng)解壓
WORKDIR /opt/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定工作目錄
EXPOSE 80
EXPOSE 443
#指定http和https端口
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
#關(guān)閉nginx 在后臺(tái)運(yùn)行
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
#添加宿主機(jī)中run.sh到容器中
#CMD ["/usr/local/sbin/nginx", "-g", "daemon off;"]
vim run.sh
#創(chuàng)建run.sh腳本,注意必須和dockerfile在同一路徑下,內(nèi)容如下
#!/bin/bash
/usr/local/nginx/sbin/nginx
#創(chuàng)建新鏡像
docker build -t nginx:centos .
docker run -d -P nginx:centos
docker ps -a 
#查看nginx容器,訪問80對(duì)應(yīng)的隨機(jī)端口驗(yàn)證,443的端口驗(yàn)證不了,ngingx中每家ssl模塊

#訪問之前需提前關(guān)閉防火墻
systemctl stop firewalld
setenforce 0
訪問:http://192.168.198.11:32776/

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

5.dockerfile構(gòu)建tomcat

#創(chuàng)建tomcat目錄
mkdir /opt/tomcat
cd /opt/tomcat
#將相關(guān)安裝包提前導(dǎo)入到opt目錄下
cp /opt/jdk-8u91-linux-x64.tar.gz /opt/tomcat
cp /opt/apache-tomcat-8.5.16.tar.gz /opt/tomcat
vim Dockerfile

FROM centos:7
MAINTAINER this is tomcat image <tomcat>
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
#創(chuàng)建新鏡像
docker build -t tomcat:centos .

docker run -d --name tomcat01 -p 1818:8080 tomcat:centos 
docker ps
http://192.168.198.11:1818

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

6.dockerfile構(gòu)建mysql

mkdir /opt/mysqld
cd /opt/mysqld
#將安裝包提前導(dǎo)入到/opt目錄下
cp /opt/mysql-boost-5.7.20.tar.gz /opt/mysqld
vim Dockerfile

FROM centos:7
MAINTAINER this is mysql image <lnmp>
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1;make -j4;make install
ADD my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
CMD ["/usr/sbin/init"]
vim /etc/my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
vim run.sh
#!/bin/bash
/usr/local/mysql/bin/mysqld	
systemctl enable mysqld
#創(chuàng)建新鏡像
docker build -t mysql:centos .

#啟動(dòng)容器,并進(jìn)行初始化
docker run --name=mysql_server -d -P --privileged mysql:centos /usr/sbin/init

#進(jìn)容器給權(quán)限
docker ps -a
CONTAINER ID   IMAGE            COMMAND                   CREATED             STATUS             PORTS                                                                                NAMES
63d9dc876f59   mysql:centos     "/usr/sbin/init"          8 seconds ago       Up 5 seconds       0.0.0.0:32777->3306/tcp, :::32777->3306/tcp                                          mysql_server

Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維
Docker容器:docker鏡像的創(chuàng)建及dockerfile,docker,容器,運(yùn)維

#進(jìn)入容器,授權(quán)遠(yuǎn)程連接 mysql
docker exec -it mysql bash
systemctl status mysqld

mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';
flush privileges;

#在客戶端連接mysql容器
mysql -h 192.168.80.10 -u root -P 32777 -pabc123

因mysql占用較大企業(yè)mysql不建議安裝在容器中

拓展

創(chuàng)建實(shí)例時(shí)網(wǎng)絡(luò)報(bào)錯(cuò)解決

報(bào)錯(cuò):[Warning] IPv4 forwarding is disabled. Networking will not work.

解決方法:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker文章來源地址http://www.zghlxwxcb.cn/news/detail-676931.html

到了這里,關(guān)于Docker容器:docker鏡像的創(chuàng)建及dockerfile的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot項(xiàng)目部署(Docker)——通過Dockerfile將打包好的jar包創(chuàng)建成鏡像 & 在IDEA中配置docker,一鍵啟動(dòng)容器 & 用swagger進(jìn)行測(cè)試

    SpringBoot項(xiàng)目部署(Docker)——通過Dockerfile將打包好的jar包創(chuàng)建成鏡像 & 在IDEA中配置docker,一鍵啟動(dòng)容器 & 用swagger進(jìn)行測(cè)試

    1.Dockerfile命令初識(shí),CMD…; 2.idea配置docker,圖形化界面; 3.編寫Dockerfile把jar包制作成鏡像,并用idea一鍵生成和啟動(dòng)容器; 4.在Linux中測(cè)試,在宿主機(jī)用swagger進(jìn)行測(cè)試; SpringBoot項(xiàng)目部署(jar包)——項(xiàng)目用maven打包成jar包 windows + Linux平臺(tái)運(yùn)行 Linux安裝java 遇到的問題 Docker是一

    2024年02月05日
    瀏覽(39)
  • Docker容器化技術(shù)(使用Dockerfile制作鏡像)

    Docker容器化技術(shù)(使用Dockerfile制作鏡像)

    Docker 支持通過擴(kuò)展現(xiàn)有鏡像,創(chuàng)建新的鏡像。實(shí)際上,Docker Hub 中 99% 的鏡像都是通過在 base 鏡像中安裝和配置需要的軟件構(gòu)建出來的。 1、Docker 鏡像為什么分層 鏡像分層最大的一個(gè)好處就是共享資源。 比如說有多個(gè)鏡像都從相同的 base 鏡像構(gòu)建而來,那么 Docker Host 只需在

    2024年03月19日
    瀏覽(861)
  • Docker應(yīng)用-使用Dockerfile創(chuàng)建鏡像

    Docker應(yīng)用-使用Dockerfile創(chuàng)建鏡像

    Dockerfile是由一行行命令語句組成并且支持以#開頭的注釋行。一般而言Dockerfile分為四個(gè)部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令和容器啟動(dòng)時(shí)的執(zhí)行指令。比如: 其中,一開始必須指明所基于的鏡像名稱,接下來一般會(huì)說明維護(hù)者的信息。后面是鏡像的操作指令,例

    2024年02月21日
    瀏覽(20)
  • Docker進(jìn)階:容器數(shù)據(jù)卷與Dockerfile構(gòu)建鏡像(發(fā)布)

    Docker進(jìn)階:容器數(shù)據(jù)卷與Dockerfile構(gòu)建鏡像(發(fā)布)

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? 1、完成數(shù)據(jù)持久化和共享數(shù)據(jù),docker容器中的數(shù)據(jù),同步到本地。 2、重要數(shù)據(jù)back_up 特點(diǎn): 實(shí)時(shí)生效、數(shù)據(jù)卷可在容器之間共享和重用數(shù)據(jù)、數(shù)據(jù)卷中的更改不會(huì)包含在鏡像更新中、數(shù)據(jù)卷的生命周期會(huì)一直延續(xù)到?jīng)]有容器使用它為止

    2024年02月09日
    瀏覽(27)
  • 【Docker】如何編寫Dockerfile,深入理解 Dockerfile:構(gòu)建精簡(jiǎn)且高效的容器鏡像

    【Docker】如何編寫Dockerfile,深入理解 Dockerfile:構(gòu)建精簡(jiǎn)且高效的容器鏡像

    Docker 是一種輕量級(jí)的容器化技術(shù),使得應(yīng)用程序和它們的依賴可以被打包到一個(gè)容器中,方便在不同環(huán)境中運(yùn)行。Dockerfile 是用于定義 Docker 鏡像的文本文件,其中包含了一系列的指令,這些指令描述了鏡像中應(yīng)該包含哪些內(nèi)容和如何配置。 在開始編寫 Dockerfile 之前,確保你

    2024年01月24日
    瀏覽(30)
  • 【云原生】Docker鏡像的創(chuàng)建,Dockerfile

    【云原生】Docker鏡像的創(chuàng)建,Dockerfile

    創(chuàng)建鏡像有三種方法,分別為【基于已有鏡像創(chuàng)建】、【基于本地模板創(chuàng)建】以及【基于Dockerfile創(chuàng)建】。? 通過導(dǎo)入操作系統(tǒng)模板文件可以生成鏡像,模板可以從OPENVZ 開源項(xiàng)目下載,下載地址為:? ?openvz.org/?Download/template/precreated ?聯(lián)合文件系統(tǒng)(UnionFS )? Union文件系統(tǒng)是

    2024年02月15日
    瀏覽(26)
  • Docker基礎(chǔ)入門:容器數(shù)據(jù)卷與Dockerfile構(gòu)建鏡像(發(fā)布)

    Docker基礎(chǔ)入門:容器數(shù)據(jù)卷與Dockerfile構(gòu)建鏡像(發(fā)布)

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? 1、完成數(shù)據(jù)持久化和共享數(shù)據(jù),docker容器中的數(shù)據(jù),同步到本地。 2、重要數(shù)據(jù)back_up 特點(diǎn): 實(shí)時(shí)生效、數(shù)據(jù)卷可在容器之間共享和重用數(shù)據(jù)、數(shù)據(jù)卷中的更改不會(huì)包含在鏡像更新中、數(shù)據(jù)卷的生命周期會(huì)一直延續(xù)到?jīng)]有容器使用它為止

    2024年02月10日
    瀏覽(21)
  • Docker鏡像的創(chuàng)建方法及Dockerfile案例

    Docker鏡像的創(chuàng)建方法及Dockerfile案例

    Dockerfile結(jié)構(gòu)大致分為四個(gè)部分: 基礎(chǔ)鏡像信息 、 維護(hù)者信息 、 鏡像操作指令 和 容器啟動(dòng)時(shí)執(zhí)行指令 Dockerfile是一個(gè)文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。有了Dockerfile,當(dāng)我們需要定制

    2024年02月09日
    瀏覽(24)
  • docker 鏡像的創(chuàng)建dockerfile 和數(shù)據(jù)卷

    基于現(xiàn)有的鏡像創(chuàng)建鏡像 docker commit 基于模板創(chuàng)建鏡像 模板可以從OPENVZ開源項(xiàng)目下載 基于dockerfile創(chuàng)建 Docker鏡像是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫(kù)、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)

    2024年02月09日
    瀏覽(18)
  • docker基于已有容器和通過Dockerfile進(jìn)行制作鏡像配置介紹

    目錄 一.制作鏡像的兩種方式 1.在已有容器中更新并提交這個(gè)鏡像 2.使用Dockerfile來制作 二.基于容器制作鏡像 1.格式 (1)主要格式 (2)可選參數(shù) 2.案例 基于容器創(chuàng)建鏡像設(shè)置標(biāo)簽并進(jìn)行驗(yàn)證是否可用 (1)運(yùn)行容器并寫入驗(yàn)證內(nèi)容(改變?nèi)萜鞔鎯?chǔ)層內(nèi)容) (2)另起終端制

    2024年02月11日
    瀏覽(107)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包