docker自定義鏡像

一、要實現利用docker技術,首先要先安裝docker包,本次用的是docker-engine-1.12.1-1.el7.centos.x86_64.rpm;docker技術是基於本機的底層系統,在系統之上,封裝打包並交付應用程序。它可讓容器啓動起來像一個進程同樣快捷。
基於docker技術,能夠把須要的最小化各類系統環境當成一個鏡像封裝上,像啓動一個進程同樣啓動起來。html

二、製做自定義docker鏡像
先在docker官網上下載一個centos的鏡像
docker search centos
docker pull centos
官網上的鏡像都是最下化安裝,因此要先配置一個yum源,且在centos鏡像中安裝上平時用的軟件,及啓動httpd和sshd,具體操做以下:docker

yum -y install docker-engine-1.12.1-1.el7.centos.x86_64.rpm
mkdir test
cd test
touch Dockerfile
vim Dockerfile
FROM centos:latest
RUN rm -f /etc/yum.repos.d/*
ADD centos7.repo /etc/yum.repos.d/centos7.repo
RUN yum -y install httpd openssh-server net-tools bash-completion.noarch \ iproute vim-enhanced
EXPOSE 80 22
RUN  echo "123456" |passwd --stdin root
RUN  /usr/sbin/sshd-keygen
ENV EnvironmentFile=/etc/sysconfig/sshd
WORKDIR /var/www/html
RUN echo "<h1><font color=red>this is centos1:httpd">index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
ADD qd.sh /root/qd.sh    
CMD ["/root/qd.sh"]
:wq
註釋:
EXPOSE是指定開放容器的哪些端口;
ADD是把當前的目錄下的文件傳到容器中指定目錄下;必須是當前路徑
RUN是指在容器中執行哪些命令;
FROM是指定源鏡像,即這個鏡像是基於哪一個鏡像來作的。
WORKDIR是指定容器中的工做目錄,至關於centos系統中的cd命令
ENV是定義環境變量
CMD指定容器啓動來了以後執行的第一條命令爲何,須要用[]和引號分隔,若是有選項,則中間用逗號分隔,例如:["/usr/sbin/sshd","-D"]
建立的文件必須叫Dockerfile
若是感受手動書寫這些命令比較複雜,能夠進入基本鏡像中去執行各類命令,而後用history把命令查看出來,cp命令出來,用上面的相應的格式替換出來就能夠了。

三、編寫啓動腳本
因爲docker鏡像的CMD是定義啓動容器後執行的第一條默認命令,因此CMD中只能寫一條命令,而在這個案例中,咱們要啓動兩個程序sshd和httpd,因此須要寫一個腳本,讓CMD直接執行腳本便可。vim

vim qd.sh
#!/bin/bash
/usr/sbin/sshd -D &
/usr/sbin/httpd -DFOREGROUND
:wq

chmod +x qd.sh //加執行權限
四、建立鏡像
需在當前目錄下執行
docker build -t wang:sh2 .
五、啓動鏡像,而且把容器的端口映射出來
docker run -d -p 80:80 -p 2022:22 wang:sh2
把容器的80端口映射到物理機的80端口,把容器的22端口映射到物理機的2022端口。
六、訪問驗證
firefox http://192.168.1.194(物理機)
ssh -p 2022 192.168.1.194
七、擴展
也能夠先作一個當一的sshd服務的鏡像出來,再基於sshd這個鏡像來作httpd的容器:centos

vim Dockerfile
FROM wang:sshd
RUN yum -y  httpd
EXPOSE 80 22
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html
RUN echo "<h1><font color=red>this is httpd and sshd">index.html
ADD qd.sh /root/qd.sh    
CMD ["/root/qd.sh"] 
:wq
相關文章
相關標籤/搜索