欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解制作各種docker鏡像

 更新時(shí)間:2017年05月18日 16:08:42   作者:庾志輝  
本篇文章主要介紹了制作各種docker鏡像,詳解的介紹了各種制作的docker鏡像的方法,有興趣的可以了解一下

做了一個(gè)星期的鏡像,收貨頗多,現(xiàn)在整理記錄下來(lái),當(dāng)做工作筆記吧。把常用的幾個(gè)鏡像的Dockerfile分享下。
制作基礎(chǔ)docker鏡像

第一步:設(shè)置Docker鏡像源

復(fù)制代碼 代碼如下:

yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6  

第二步:安裝 docker-io febootstrap,用來(lái)制作centos鏡像,到時(shí)候會(huì)生成個(gè)centos的鏡像。

yum -y install docker-io;如果沒(méi)有安裝docker,則需要先安裝docker 
service docker start ;啟動(dòng)docker 
yum -y install febootstrap;制作docker鏡像工具 

第三步:作CentOS鏡像文件centos6-image目錄

復(fù)制代碼 代碼如下:

febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/ 

上一步執(zhí)行后會(huì)生成一個(gè)centos6-image文件目錄,上面命令中參數(shù) -i 后面的都是基礎(chǔ)鏡像中安裝的一些服務(wù)。如果你不想要這么多服務(wù)(因?yàn)榘阉蟹?wù)安裝后鏡像會(huì)變的非常大)可以只安裝一些基本的,必不可少的服務(wù)。centos6是指版本,centos6-image是生成的目錄名稱(chēng)。

第四步:這時(shí)root目錄下沒(méi)有任何文件,也不沒(méi)有隱藏的點(diǎn)文件,如:.bash_logout  .bash_profile  .bashrc如果這時(shí)制作出來(lái)的鏡像使用ssh登錄,會(huì)直接進(jìn)入根目錄下,而一般鏡像都是進(jìn)入root目錄下的,所以可以在centos6-image目錄的root目錄把.bash_logout  .bash_profile  .bashrc這三個(gè)文件設(shè)置一下。

cd centos6-image && cp etc/skel/.bash* root/

第五步:生成最基礎(chǔ)的base鏡像

cd centos6-image && tar -c .|docker import - centos6-base 

第六步:查看鏡像,也可以直接進(jìn)入centos6-base查看

docker images ;這個(gè)是查看所有生成的鏡像 
docker run -i -t centos:centos6 /bin/bash;進(jìn)終端(沒(méi)有ssh服務(wù)),-i 分配終端,-t表示在前臺(tái)執(zhí)行,-d表示在后臺(tái)運(yùn)行 

根據(jù)基礎(chǔ)鏡像制作ssh的docker鏡像

制作ssh登錄鏡像,最主要的就是Dockerfile(當(dāng)然這里說(shuō)的就是Dockerfile這種方法),在某個(gè)目錄中新建一個(gè)Dockerfile文件(命名一定要為Dockerfile)。

下面來(lái)分析下Dockerfile文件:

#Dockerfile 
FROM centos6-base #表示把某個(gè)鏡像作為基礎(chǔ)鏡像,相當(dāng)于面向?qū)ο笳Z(yǔ)言中繼承,表示生成的鏡像里面包含了基礎(chǔ)鏡像的一些服務(wù) 
MAINTAINER yzh #這是個(gè)鏡像作者信息 
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key 
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key 
RUN sed -ri 's/session required  pam_loginuid.so/#session required  pam_loginuid.so/g' /etc/pam.d/sshd 
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh 
#上面幾行都是配置ssh登錄目錄和登錄驗(yàn)證的,而ssh的安裝是在基礎(chǔ)鏡像centos6-base中完成的(-i openssh-server -i openssh-clients) 
EXPOSE 22 #表示開(kāi)啟哪個(gè)端口號(hào),22號(hào)端口是給ssh服務(wù)使用的;如果不需要端口號(hào)可以注釋掉這行 
RUN echo 'root:redhat' | chpasswd #這是修改root密碼,其實(shí)這種方法不是很好,因?yàn)檫@是設(shè)置root密碼,不是更改 
RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
RUN yum install tar gzip gcc vim wget -y 
#上面是安裝些工具和源 
ENV LANG en_US.UTF-8 
ENV LC_ALL en_US.UTF-8 #設(shè)置環(huán)境 
CMD /usr/sbin/sshd -D #設(shè)置開(kāi)啟的服務(wù),每個(gè)鏡像只能有一個(gè)CMD有效 
#End 

根據(jù)Dockerfile文件生成鏡像:docker build -t 生成鏡像名稱(chēng)  Dockerfile位置;假設(shè):鏡像名為centos6-ssh,Dockerfile在/home/yzh/ssh里面

復(fù)制代碼 代碼如下:

cd centos6-images;docker build -t centos6-ssh  /home/yzh/ssh #就可以生成一個(gè)centos6-ssh鏡像了 

用docker images查看下所有鏡像,你會(huì)看到兩個(gè)鏡像:centos6-base和centos6-ssh。這樣centos6-ssh就是ssh登錄的docker鏡像了。

鏡像的測(cè)試步驟命令

當(dāng)制作完一個(gè)鏡像后緊接著就要測(cè)試下這個(gè)鏡像是否正確,里面的一些服務(wù)是否可用。上面提到的兩篇文章中有比較詳細(xì)的測(cè)試說(shuō)明,還有數(shù)據(jù)存儲(chǔ),遷移備份,可以參考下他們的文章。我目前沒(méi)有用到數(shù)據(jù)存儲(chǔ)及遷移備份,所以就用簡(jiǎn)單的步驟測(cè)試下:

第一步:查看鏡像信息,可以看到有鏡像名稱(chēng)和鏡像的id以及生成的時(shí)間。

docker images

第二步:用測(cè)試鏡像生成一個(gè)容器,可以根據(jù)鏡像名稱(chēng)或者鏡像id來(lái)生成。最后會(huì)得到一連串?dāng)?shù)字和字母組成的信息,應(yīng)該就是容器標(biāo)識(shí)ID。

docker run -d xxx(鏡像名或者id)

第三步:利用上一步生成的容器ID,來(lái)查看測(cè)試鏡像生成的容器信息。這一步會(huì)得到有關(guān)容器的詳細(xì)信息,其中包括iP地址。

docker inspect xxxx(容器id)

第四步:利用上一步中得到的ip地址,ssh登陸。

ssh root@xxxx(容器ip)

第五步:測(cè)試服務(wù),這里ssh服務(wù)在登陸時(shí)已經(jīng)測(cè)試完了。如果是其他鏡像,比如mysql:那么這一步就是進(jìn)入鏡像測(cè)試MySQL服務(wù)了,不同服務(wù)用不同方法測(cè)試。

鏡像和容器的刪除     

每測(cè)試完一個(gè)鏡像都要?jiǎng)h除掉所有的容器,避免占用的空間過(guò)大。

刪除單個(gè)容器(指定容器):

首先要查看下當(dāng)前有哪些容器在運(yùn)行:docker ps -a

找出需要?jiǎng)h除的容器,讓它停止:docker stop xxx(CONTAINER ID)

刪除該容器:docker  rm  xxx(CONTAINER ID)

 刪除所有容器:

如果你要?jiǎng)h除所有的容器就可以不用那么麻煩了,直接停止所有容器的運(yùn)行:docker stop $(docker ps -a -q);然后刪除所有容器:docker rm $(docker ps -a -q);

刪除鏡像:

如果制作鏡像失敗,或者想重新添加功能,需要?jiǎng)h除原來(lái)鏡像,則用:docker images查看所有鏡像;然后用:docker rmi xxx(鏡像名或鏡像id)

制作Apache鏡像

分享下Apache鏡像的制作,這個(gè)鏡像稍微和基礎(chǔ)鏡像的制作不太一樣。因?yàn)檫@個(gè)鏡像起來(lái)以后要同時(shí)開(kāi)啟兩個(gè)服務(wù):ssh服務(wù)(必須的)和Apache服務(wù),而Dockerfile中CMD只能有一句有效。所以要借助另外一種方法:supervisord;其他步驟一樣,唯一不同的就是Dockerfile文件,這個(gè)Dockerfile是在ssh鏡像為基礎(chǔ)制造的(一般都是以ssh鏡像為基礎(chǔ)鏡像,因?yàn)椴还苣膫€(gè)鏡像都需要ssh登陸的)

Dockerfile文件:

#Dockerfile 
FROM centos6-ssh 
MAINTAINER <a target=_blank  rel="external nofollow" >http://blog.csdn.net/yuzhihui_no1</a> 
 
EXPOSE 80 #為Apache服務(wù)開(kāi)啟服務(wù)端口 
RUN yum -y install httpd supervisor;chkconfig httpd on ; mkdir -p /var/log/supervisor 
ADD supervisord.conf /etc/supervisord.conf #把本地的文件拷貝到鏡像系統(tǒng)中 
CMD ["/usr/bin/supervisord"] #執(zhí)行supervisord.conf腳本文件 
#End 

RUN    xxx ;后面是跟著要執(zhí)行的命令,這些命令就是在Linux中安裝某個(gè)工具/軟件/服務(wù)的命令了。這里引入supervisord.conf文件:

[supervisord] 
nodaemon=true 
 
[program:sshd] 
command=/usr/sbin/sshd -D 
 
[program:httpd] 
command=/sbin/service httpd start 

這樣就可以同時(shí)啟動(dòng)兩個(gè)服務(wù)了。其他步驟和基礎(chǔ)鏡像制作一樣,但要記住supervisord.conf要和Dockerfile放在同一級(jí)目錄下。

制作Java鏡像

本來(lái)Java鏡像可以和基礎(chǔ)鏡像一樣制作的,但是發(fā)現(xiàn)安裝jdk包或者在線(xiàn)獲取jdk包時(shí)總是報(bào)錯(cuò),所以我就到官網(wǎng)上下載了個(gè)jdk放到服務(wù)器上,然后用ADD命令加入到鏡像系統(tǒng)中,在系統(tǒng)里面解壓,最后刪除jdk包,配置環(huán)境就可以了。

Dockerfile文件:

#Dockerfile 
FROM centos6-ssh 
MAINTAINER yzh 
 
RUN mkdir -p /usr/java;yum install -y tar 
ADD jdk-8u25-linux-x64.tar.gz /usr/java/ #把本地的jdk加到鏡像系統(tǒng)中 
 
RUN echo 'export JAVA_HOME=/usr/java/jdk1.8.0_25'>> /etc/profile ; echo 'export JRE_HOME=/usr/java/jdk1.8.0_25/jre'>> /etc/profile; echo 'export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin'>> /etc  /profile 
RUN echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib'>> /etc/profile; echo 'export JAVA_HOME JRE_HOME PATH CLASSPATH ' >> /etc/profile 
上面是配置jdk環(huán)境變量 
RUN source /etc/profile;yum clean all #使環(huán)境變量生效 
 
ADD HelloWorld.java /home/java/HelloWorld.java #加入一個(gè)簡(jiǎn)單的Java測(cè)試程序 
 
CMD /usr/sbin/sshd -D 
#End 

要通過(guò)ADD命令添加到鏡像系統(tǒng)中的文件必須和Dockerfile在同一級(jí)目錄,比如Java鏡像中的Dockerfile同級(jí)目錄下有:HelloWorld.java  jdk-8u25-linux-x64.tar.gz文件。還有點(diǎn)Dockerfile中ADD命令還會(huì)解壓一些基本的壓縮包,像上面的添加jdk時(shí),可以不需要自己去解壓,只需要安裝tar解壓命令就可以了。

 ---------------------------------------------------------------------補(bǔ)充---------------------------------------------------------------------

最近又做了幾個(gè)比較復(fù)雜的docker鏡像,這里總結(jié)下:拿postgresql鏡像來(lái)說(shuō)吧。如果按照以往的做法當(dāng)然是先在實(shí)驗(yàn)機(jī)上做些安裝操作,等到安裝成功,測(cè)試沒(méi)問(wèn)題后,就把這些步驟寫(xiě)到dockerfile中。當(dāng)然因?yàn)槭菙?shù)據(jù)庫(kù),需要開(kāi)機(jī)自啟動(dòng),所以要用到supervisord.conf把兩種服務(wù)都寫(xiě)到這個(gè)配置中去。然后把這些寫(xiě)好的文件放到服務(wù)器上開(kāi)始制作鏡像了。

但是你會(huì)發(fā)現(xiàn)這樣的制作方法會(huì)很慢(這種方法也有個(gè)優(yōu)點(diǎn),就是根據(jù)dockerfile能很清楚的知道這個(gè)鏡像中做了些什么操作),如果你夠熟練了,那么就應(yīng)該嘗試一種升級(jí)版的新方法,用容器制作鏡像;

用容器快速制作鏡像

用容器制造鏡像就是創(chuàng)建某個(gè)鏡像的容器,比如制作postgresql鏡像時(shí),因?yàn)樗彩且粋€(gè)數(shù)據(jù)庫(kù),所以就用mysql的容器來(lái)制作。得到mysql的鏡像,然后進(jìn)入該鏡像,開(kāi)始安裝postgresql了,安裝完后測(cè)試下,如果可以,就把該容器打包成一個(gè)鏡像,就可以了;下面看下簡(jiǎn)單的操作步驟:

1、開(kāi)始制作postgresql鏡像時(shí),先用mysql得到一個(gè)容器:docker run -d  xxx_mysql_xxx 

2、省略些步驟(有關(guān)創(chuàng)建容器,登錄容器之類(lèi)的命令,請(qǐng)參考本blog中的 “鏡像的測(cè)試步驟命令“ )

3、當(dāng)進(jìn)入到容器中時(shí),首先是卸載掉mysql,查看下有多少個(gè)mysql軟件包:rpm -qa | grep 'mysql';然后根據(jù)顯示的軟件包一一卸載掉:yum remove xxx;

4、對(duì)于postgresql安裝的步驟,可以參考下http://www.dbjr.com.cn/LINUXjishu/10861.html

5、就是修改開(kāi)機(jī)啟動(dòng)了,因?yàn)檫@是個(gè)mysql鏡像,開(kāi)機(jī)啟動(dòng)的開(kāi)始設(shè)置的是mysql的服務(wù);可以進(jìn)去修改下:vim  /etc/supervisord.conf中,把相關(guān)的啟動(dòng)命令修改下就可以了;

6、把容器打包成一個(gè)鏡像:docker commit  xxx(容器的id)   xxxx(要制作成的鏡像名)

通過(guò)上面的步驟就可以很快的制作成一個(gè)鏡像,這種制作鏡像的方法有很多好處:

第一就是可以步步為營(yíng)。當(dāng)你制作一個(gè)比較復(fù)雜點(diǎn)的鏡像時(shí),不可能一步就能做成功,所以當(dāng)你覺(jué)得下面一步可能要出錯(cuò)時(shí)(不可逆的錯(cuò)誤),可以先把該鏡像打個(gè)包,如果接下來(lái)失誤了,刪掉這個(gè)容器,再用剛才打包好的鏡像做個(gè)容器,繼續(xù)前面的步驟。

第二就是不管你在容器中怎么折騰都沒(méi)關(guān)系,大不了刪除掉這個(gè)容器,如果你在物理服務(wù)器上就要相當(dāng)注意了,要不然duang的一下,整個(gè)服務(wù)器就癱瘓了。

第三好處和第一個(gè)差不多,因?yàn)橛行?shù)據(jù)庫(kù)不能測(cè)試的,你一測(cè)試就會(huì)產(chǎn)生很大的數(shù)據(jù)(日志,還有些默認(rèn)的數(shù)據(jù))(我做mongodb鏡像時(shí),測(cè)試了下打包后的鏡像竟然達(dá)到4個(gè)多G,而沒(méi)測(cè)試的就幾百M(fèi)B,相差太大了),因?yàn)閐ocker鏡像不能太大,否則不好上傳。所以一般是做好了,先打個(gè)包成鏡像,然后接著測(cè)試下,如果成功。那就可以了。

把鏡像拉到openstack中測(cè)試

1、先找到keystone_admin,運(yùn)行命令:source keystonerc_admin  

2、把制作的鏡像放到openstack中,命令: docker save centos(centos為鏡像名稱(chēng)) | glance image-create --is-public=True --container-format=docker --disk-format=raw --name centos(centos為鏡像名稱(chēng))   驗(yàn)證操作是否成功:echo $?  如果為0,應(yīng)該就成功了。

3、登錄到openstack中,到鏡像那一欄看看是否有你上傳的鏡像

4、在openstack中創(chuàng)建容器開(kāi)始測(cè)試

對(duì)docker鏡像進(jìn)行打包和解包

1、打包:docker save IMAGENAME(鏡像名稱(chēng)) | bzip2 -9 -c>img.tar.bz2(打包后的名稱(chēng))

2、解包:bzip2 -d -c <img.tar.bz2(打包后的名稱(chēng)) | docker load

利用端口號(hào)進(jìn)入docker容器中:ssh -p port(端口號(hào))  root@IP 

glance命令:

glance image-list
glance image-delete

 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。      

相關(guān)文章

  • Docker  Registry 私有倉(cāng)庫(kù)搭建詳細(xì)步驟

    Docker Registry 私有倉(cāng)庫(kù)搭建詳細(xì)步驟

    這篇文章主要介紹了Docker Registry 私有倉(cāng)庫(kù)搭建的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Docker內(nèi)置網(wǎng)絡(luò)模式分析

    Docker內(nèi)置網(wǎng)絡(luò)模式分析

    這篇文章主要為大家介紹了Docker內(nèi)置網(wǎng)絡(luò)模式分析及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • docker內(nèi)服務(wù)訪(fǎng)問(wèn)宿主機(jī)服務(wù)的實(shí)現(xiàn)

    docker內(nèi)服務(wù)訪(fǎng)問(wèn)宿主機(jī)服務(wù)的實(shí)現(xiàn)

    本文主要介紹了docker內(nèi)服務(wù)訪(fǎng)問(wèn)宿主機(jī)服務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • docker容器間進(jìn)行數(shù)據(jù)共享的三種實(shí)現(xiàn)方式

    docker容器間進(jìn)行數(shù)據(jù)共享的三種實(shí)現(xiàn)方式

    本文主要介紹了docker容器間進(jìn)行數(shù)據(jù)共享的三種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 使用Docker快速部署Gitlab的方法

    使用Docker快速部署Gitlab的方法

    這篇文章主要介紹了使用Docker快速部署Gitlab的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 如何使用Docker和cpolar在Linux服務(wù)器上搭建DashDot監(jiān)控面板

    如何使用Docker和cpolar在Linux服務(wù)器上搭建DashDot監(jiān)控面板

    本文主要介紹如何在Linux服務(wù)器上使用Docker和cpolar技術(shù)搭建DashDot監(jiān)控面板,實(shí)現(xiàn)實(shí)時(shí)服務(wù)器監(jiān)控,DashDot提供直觀的監(jiān)控界面和豐富的指標(biāo),通過(guò)cpolar可以實(shí)現(xiàn)公網(wǎng)訪(fǎng)問(wèn),方便用戶(hù)隨時(shí)了解服務(wù)器狀態(tài),文章詳細(xì)說(shuō)明了環(huán)境準(zhǔn)備、安裝Docker、配置DashDot和cpolar的步驟
    2024-09-09
  • 解決vscode docker插件docker.socket權(quán)限問(wèn)題

    解決vscode docker插件docker.socket權(quán)限問(wèn)題

    本文給大家分享關(guān)于vscode docker插件docker.socket權(quán)限問(wèn)題,文末給大家提到vscode中docker插件無(wú)法連接的問(wèn)題及解決方案,需要的朋友參考下吧
    2021-06-06
  • 在Ubuntu上使用Grafana監(jiān)控Docker的方法

    在Ubuntu上使用Grafana監(jiān)控Docker的方法

    如今越來(lái)越多的公司開(kāi)始使用Docker,一談起Docker總是會(huì)跟著讓人聯(lián)想到輕量這個(gè)詞,甚至?xí)幸环N通過(guò)Docker啟動(dòng)一個(gè)服務(wù)會(huì)節(jié)省很多資源的錯(cuò)覺(jué)。然而Docker的「輕」也只是相對(duì)于傳統(tǒng)虛擬機(jī)而已。Docker如何監(jiān)控呢?本文就給大家介紹在Ubuntu上如何使用Grafana監(jiān)控Docker。
    2016-12-12
  • nginx在docker容器中自動(dòng)生成配置文件

    nginx在docker容器中自動(dòng)生成配置文件

    這篇文章主要介紹了nginx在docker容器中自動(dòng)生成配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法

    Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法

    本文主要介紹了Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論