亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

詳解制作各種docker鏡像

2024-09-01 13:51:52
字體:
來源:轉載
供稿:網友

做了一個星期的鏡像,收貨頗多,現在整理記錄下來,當做工作筆記吧。把常用的幾個鏡像的Dockerfile分享下。
制作基礎docker鏡像

第一步:設置Docker鏡像源

 

復制代碼 代碼如下:

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,用來制作centos鏡像,到時候會生成個centos的鏡像。

yum -y install docker-io;如果沒有安裝docker,則需要先安裝docker service docker start ;啟動docker yum -y install febootstrap;制作docker鏡像工具 

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

 

復制代碼 代碼如下:

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/

 

上一步執行后會生成一個centos6-image文件目錄,上面命令中參數 -i 后面的都是基礎鏡像中安裝的一些服務。如果你不想要這么多服務(因為把所有服務安裝后鏡像會變的非常大)可以只安裝一些基本的,必不可少的服務。centos6是指版本,centos6-image是生成的目錄名稱。

第四步:這時root目錄下沒有任何文件,也不沒有隱藏的點文件,如:.bash_logout  .bash_profile  .bashrc如果這時制作出來的鏡像使用ssh登錄,會直接進入根目錄下,而一般鏡像都是進入root目錄下的,所以可以在centos6-image目錄的root目錄把.bash_logout  .bash_profile  .bashrc這三個文件設置一下。

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

第五步:生成最基礎的base鏡像

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

第六步:查看鏡像,也可以直接進入centos6-base查看

docker images ;這個是查看所有生成的鏡像 docker run -i -t centos:centos6 /bin/bash;進終端(沒有ssh服務),-i 分配終端,-t表示在前臺執行,-d表示在后臺運行 

根據基礎鏡像制作ssh的docker鏡像

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

下面來分析下Dockerfile文件:

#Dockerfile FROM centos6-base #表示把某個鏡像作為基礎鏡像,相當于面向對象語言中繼承,表示生成的鏡像里面包含了基礎鏡像的一些服務 MAINTAINER yzh #這是個鏡像作者信息 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登錄目錄和登錄驗證的,而ssh的安裝是在基礎鏡像centos6-base中完成的(-i openssh-server -i openssh-clients) EXPOSE 22 #表示開啟哪個端口號,22號端口是給ssh服務使用的;如果不需要端口號可以注釋掉這行 RUN echo 'root:redhat' | chpasswd #這是修改root密碼,其實這種方法不是很好,因為這是設置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 #設置環境 CMD /usr/sbin/sshd -D #設置開啟的服務,每個鏡像只能有一個CMD有效 #End 

根據Dockerfile文件生成鏡像:docker build -t 生成鏡像名稱  Dockerfile位置;假設:鏡像名為centos6-ssh,Dockerfile在/home/yzh/ssh里面

 

復制代碼 代碼如下:

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

 

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

鏡像的測試步驟命令

當制作完一個鏡像后緊接著就要測試下這個鏡像是否正確,里面的一些服務是否可用。上面提到的兩篇文章中有比較詳細的測試說明,還有數據存儲,遷移備份,可以參考下他們的文章。我目前沒有用到數據存儲及遷移備份,所以就用簡單的步驟測試下:

第一步:查看鏡像信息,可以看到有鏡像名稱和鏡像的id以及生成的時間。

docker images

第二步:用測試鏡像生成一個容器,可以根據鏡像名稱或者鏡像id來生成。最后會得到一連串數字和字母組成的信息,應該就是容器標識ID。

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

第三步:利用上一步生成的容器ID,來查看測試鏡像生成的容器信息。這一步會得到有關容器的詳細信息,其中包括iP地址。

docker inspect xxxx(容器id)

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

ssh root@xxxx(容器ip)

第五步:測試服務,這里ssh服務在登陸時已經測試完了。如果是其他鏡像,比如mysql:那么這一步就是進入鏡像測試MySQL服務了,不同服務用不同方法測試。

鏡像和容器的刪除    

每測試完一個鏡像都要刪除掉所有的容器,避免占用的空間過大。

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

首先要查看下當前有哪些容器在運行:docker ps -a

找出需要刪除的容器,讓它停止:docker stop xxx(CONTAINER ID)

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

 刪除所有容器:

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

刪除鏡像:

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

制作Apache鏡像

分享下Apache鏡像的制作,這個鏡像稍微和基礎鏡像的制作不太一樣。因為這個鏡像起來以后要同時開啟兩個服務:ssh服務(必須的)和Apache服務,而Dockerfile中CMD只能有一句有效。所以要借助另外一種方法:supervisord;其他步驟一樣,唯一不同的就是Dockerfile文件,這個Dockerfile是在ssh鏡像為基礎制造的(一般都是以ssh鏡像為基礎鏡像,因為不管哪個鏡像都需要ssh登陸的)

Dockerfile文件:

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

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

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

這樣就可以同時啟動兩個服務了。其他步驟和基礎鏡像制作一樣,但要記住supervisord.conf要和Dockerfile放在同一級目錄下。

制作Java鏡像

本來Java鏡像可以和基礎鏡像一樣制作的,但是發現安裝jdk包或者在線獲取jdk包時總是報錯,所以我就到官網上下載了個jdk放到服務器上,然后用ADD命令加入到鏡像系統中,在系統里面解壓,最后刪除jdk包,配置環境就可以了。

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加到鏡像系統中  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環境變量 RUN source /etc/profile;yum clean all #使環境變量生效  ADD HelloWorld.java /home/java/HelloWorld.java #加入一個簡單的Java測試程序  CMD /usr/sbin/sshd -D #End 

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

 ---------------------------------------------------------------------補充---------------------------------------------------------------------

最近又做了幾個比較復雜的docker鏡像,這里總結下:拿postgresql鏡像來說吧。如果按照以往的做法當然是先在實驗機上做些安裝操作,等到安裝成功,測試沒問題后,就把這些步驟寫到dockerfile中。當然因為是數據庫,需要開機自啟動,所以要用到supervisord.conf把兩種服務都寫到這個配置中去。然后把這些寫好的文件放到服務器上開始制作鏡像了。

但是你會發現這樣的制作方法會很慢(這種方法也有個優點,就是根據dockerfile能很清楚的知道這個鏡像中做了些什么操作),如果你夠熟練了,那么就應該嘗試一種升級版的新方法,用容器制作鏡像;

用容器快速制作鏡像

用容器制造鏡像就是創建某個鏡像的容器,比如制作postgresql鏡像時,因為它也是一個數據庫,所以就用mysql的容器來制作。得到mysql的鏡像,然后進入該鏡像,開始安裝postgresql了,安裝完后測試下,如果可以,就把該容器打包成一個鏡像,就可以了;下面看下簡單的操作步驟:

1、開始制作postgresql鏡像時,先用mysql得到一個容器:docker run -d  xxx_mysql_xxx 

2、省略些步驟(有關創建容器,登錄容器之類的命令,請參考本blog中的 “鏡像的測試步驟命令“ )

3、當進入到容器中時,首先是卸載掉mysql,查看下有多少個mysql軟件包:rpm -qa | grep 'mysql';然后根據顯示的軟件包一一卸載掉:yum remove xxx;

4、對于postgresql安裝的步驟,可以參考下

5、就是修改開機啟動了,因為這是個mysql鏡像,開機啟動的開始設置的是mysql的服務;可以進去修改下:vim  /etc/supervisord.conf中,把相關的啟動命令修改下就可以了;

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

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

第一就是可以步步為營。當你制作一個比較復雜點的鏡像時,不可能一步就能做成功,所以當你覺得下面一步可能要出錯時(不可逆的錯誤),可以先把該鏡像打個包,如果接下來失誤了,刪掉這個容器,再用剛才打包好的鏡像做個容器,繼續前面的步驟。

第二就是不管你在容器中怎么折騰都沒關系,大不了刪除掉這個容器,如果你在物理服務器上就要相當注意了,要不然duang的一下,整個服務器就癱瘓了。

第三好處和第一個差不多,因為有些數據庫不能測試的,你一測試就會產生很大的數據(日志,還有些默認的數據)(我做mongodb鏡像時,測試了下打包后的鏡像竟然達到4個多G,而沒測試的就幾百MB,相差太大了),因為docker鏡像不能太大,否則不好上傳。所以一般是做好了,先打個包成鏡像,然后接著測試下,如果成功。那就可以了。

把鏡像拉到openstack中測試

1、先找到keystone_admin,運行命令:source keystonerc_admin  

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

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

4、在openstack中創建容器開始測試

對docker鏡像進行打包和解包

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

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

利用端口號進入docker容器中:ssh -p port(端口號)  root@IP 

glance命令:

glance image-listglance image-delete

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。      


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
不卡av在线播放| 国产日本欧美在线观看| 日韩精品中文字幕视频在线| 亚洲视频网站在线观看| 91精品国产自产91精品| 国产精品揄拍一区二区| 亚洲无限av看| 成人免费福利在线| 日韩精品在线视频| 欧美在线精品免播放器视频| 欧美黄网免费在线观看| 国产一区二区三区在线观看网站| 亚洲精品一区二三区不卡| 欧美综合在线第二页| 久久人人97超碰精品888| 亚洲最大av网站| 欧美久久精品一级黑人c片| 日本亚洲欧洲色α| 国产精品99久久99久久久二8| 欧美一性一乱一交一视频| 国产aⅴ夜夜欢一区二区三区| 亚洲国产又黄又爽女人高潮的| 欧美整片在线观看| 亚洲美女av黄| 亚洲第一精品夜夜躁人人爽| 91精品久久久久久综合乱菊| 一本大道久久加勒比香蕉| 中文字幕日韩欧美精品在线观看| 欧美第一黄网免费网站| 中文字幕精品视频| 亚洲色图国产精品| 精品亚洲一区二区三区四区五区| 欧美性感美女h网站在线观看免费| 欧美第一淫aaasss性| 欧美日韩中国免费专区在线看| 亚洲精品成人av| 国内揄拍国内精品| 国产精品入口免费视| 亚洲最大成人网色| 欧美在线激情视频| 国产一区二区香蕉| 91美女片黄在线观| 国内精品模特av私拍在线观看| 精品欧美国产一区二区三区| 性色av一区二区三区在线观看| 国产剧情久久久久久| 亚洲一区二区少妇| 性色av一区二区三区| 亚洲网址你懂得| 国语自产在线不卡| 91香蕉亚洲精品| 欧美一级黑人aaaaaaa做受| 久久久久久久国产精品视频| 国产女人精品视频| 成人精品aaaa网站| 91高潮在线观看| 国产精品中文久久久久久久| 欧美午夜视频在线观看| 欧美视频在线观看免费网址| 久久久久久久国产精品| 一区二区欧美亚洲| 亚洲欧洲一区二区三区久久| 亚洲区中文字幕| 欧美黑人又粗大| 欧美性猛交xxxx免费看漫画| 日韩美女主播视频| 91亚洲一区精品| 91国产视频在线播放| 在线视频欧美日韩精品| 精品毛片网大全| 国产精品视频久| 欧美国产日本高清在线| 91亚洲国产成人久久精品网站| 91精品国产自产在线老师啪| 性色av一区二区三区免费| 91国内在线视频| 国产精品69精品一区二区三区| 国产日韩欧美中文| 欧美激情一二三| 亚洲美女又黄又爽在线观看| 色天天综合狠狠色| 日韩在线高清视频| 成人综合国产精品| 日韩精品在线视频美女| 青青草原成人在线视频| 国产99久久久欧美黑人| 97香蕉超级碰碰久久免费软件| 日韩av电影国产| 精品人伦一区二区三区蜜桃免费| 日韩电影免费观看在线观看| 亚洲精品国产精品国自产观看浪潮| 国产精品美女www爽爽爽视频| 在线播放日韩专区| 欧美亚洲另类视频| 欧美大片欧美激情性色a∨久久| 日韩电影免费在线观看中文字幕| 92裸体在线视频网站| 中文字幕亚洲欧美日韩2019| 久久最新资源网| 中文字幕在线成人| 日韩欧美黄色动漫| 久久精视频免费在线久久完整在线看| 欧美在线视频观看| 日韩资源在线观看| 在线看福利67194| 欧美日韩亚洲视频一区| 日韩免费在线观看视频| 92裸体在线视频网站| 亚洲精品国产精品乱码不99按摩| 国内精品一区二区三区四区| 最近日韩中文字幕中文| 91老司机在线| 久久免费国产精品1| 国产精品免费视频久久久| 欧美另类交人妖| 亚洲国产成人在线播放| 国产精品精品国产| 操91在线视频| 国产极品精品在线观看| 91极品视频在线| 亚洲xxx大片| 中文字幕日韩有码| 91av视频在线播放| 福利视频导航一区| 成人免费视频网址| 亚洲欧美国产精品va在线观看| 国产91色在线|| 亚洲精品福利免费在线观看| 日韩视频在线免费| 欧美综合在线第二页| 国产999视频| 亚洲情综合五月天| 亚洲国产精品字幕| 国产精品电影久久久久电影网| 久久亚洲春色中文字幕| 欧美国产日韩在线| 992tv在线成人免费观看| 91精品成人久久| 久热99视频在线观看| 亚洲电影免费在线观看| 国产精品久久久久久亚洲调教| 最近2019年好看中文字幕视频| 一本大道亚洲视频| 久久免费在线观看| 色婷婷av一区二区三区在线观看| 黄网动漫久久久| 国产日韩中文字幕在线| 51色欧美片视频在线观看| 亚洲第一天堂无码专区| 日韩精品一二三四区| 日韩av中文字幕在线免费观看| 国产精品一区二区久久久| 动漫精品一区二区| 亚洲第一区第一页| 国产成人aa精品一区在线播放| 亚洲自拍偷拍色片视频| 国产精品com| 欧美激情精品久久久久久免费印度| 国产成人高潮免费观看精品| 国内精品久久久久影院 日本资源| 久久人人爽人人爽爽久久| 精品性高朝久久久久久久| 国产视频精品xxxx| 国模gogo一区二区大胆私拍|