按照上述方法,雖然可以進入目標容器,并在其中安裝各種軟件。但是,如果退出之后,重新進入的話,這些安裝的程序就會消失,這主要是因為沒有執(zhí)行保存的緣故。
為了解決該問題,可以使用Dockerfile這一工具,對Docker容器進行有效管理。使用Dockerfile,可以制作自己的鏡像。通過將容器的各種配置信息寫入到Dockerfile文件中,之后就可以據(jù)此啟動目標鏡像,這樣就省去了每次進入容器都需要重置配置相關(guān)參數(shù)的繁瑣。
例 如, 執(zhí) 行“docker iages”命令,來查看可用的鏡像信息。
執(zhí) 行“docker run -d centos:v1 /bin/bash”命令,在后臺啟動選定的鏡像。
執(zhí)行“/etc/init.d/sshd restart”命令,來啟動SSH服務(wù)。
執(zhí)行“rpm -e cracklibdicts”命令,卸載指定的包。
執(zhí) 行“yum install cracklib-dicts pam”命令,安裝最新的cracklib-dicts包。
執(zhí)行“passwd”命令,更改當前賬戶密碼。因為當前賬戶為Root,為了允許其登錄SSH服務(wù),需要
執(zhí) 行“v i /e t c/ssh/sshd_config” 命令,將該文件中的將“PermitRootLogin”的值修改為“yes”。
執(zhí) 行“cd .ssh/”,“cp id_rsa.pub authorized_keys”,“chmod 600 .sshauthorized_keys”命令,就可以實現(xiàn)無密碼登錄SSH服務(wù)。當然,這是在本機測試之用。
執(zhí)行“ifconfig”命令,來查看當前的IP。例如為192.168.1.30。
執(zhí) 行“ssh-l root 192.168.1.30” 或 者“ssh-l root localhost”命令,可以登錄到本機的SSH中。當然,這里只是進行了簡單的例子,之后需要將這些配置信息寫入到Dockerfile文件中。
執(zhí)行“docker ps -a-q”命令,可以查看當前容器的ID。
執(zhí)行“docker ps-a-q|xargs docker rm”命令,可以刪除當前的容器。
執(zhí) 行“vi Dockerfile”命令,創(chuàng)建一個Dockerfile文件。在其中添加“FROM centos:v1”一行,表示以“centos:v1”這個鏡像文件基礎(chǔ)進行編輯,來創(chuàng)建新的鏡像。
添 加“MAINTAINER User01”一行,表示開發(fā)者名稱。添加“yum install passwd openssl opensshserver -y”一行,表示安裝“passwd”,“openssl”,“openssh-server”等模塊,如果容器中已經(jīng)存在這些模塊,可以在最前面添加“#”符號,將本行注釋掉。添加“RUN echo 'qwe123'|passwd--stdin root” 一行,表示為Root賬戶設(shè)置密碼,密碼為“qwe123”。添加“RUN mkdir-p/root/.ssh&& chown root.root/root&& chmod 700/root/.ssh”一行,表示創(chuàng)建所需的目錄,以及為其設(shè)置合適的權(quán)限。添加“Run mkdir /var/run/sshd”一行,來創(chuàng)建所需的目錄。添加“RUN yum install pcre-devel -y”,“RUN yum install httpd httpd-devel-y”,“mysql mysql-server php php-devel -y”等行,可以安裝Apache,MySQL模塊。
添 加“EXPOSE 22” 命令,來開放TCP 22端口。添加“EXPOSE 80”一行,來開放80端口。添加“CMD ["/usr/sbin/sshd" "-D"]”一行,表示在啟動容器時,以后臺方式啟動ssh服務(wù),這相當于自啟動命令。
注意:在一個Dockerfile文件中可以使用多個“RUN”命令行,但是只能使用一個“CMD”命令行。
創(chuàng)建好Dockerfile文件后,執(zhí)行“dicker build-t centos-new.”命令,可以在當前目錄下生成一個名為“centos-new”的新的鏡像。執(zhí)行“docker image|grep none |awk '{print$3 |xargs docker rmi}'”命令,可以刪除失效的鏡像。
執(zhí) 行“docker images”命令,可以看到新生成的鏡像。如何啟動這個新的鏡像呢?方法是運行“docker run -d -p 22:2201 -name=newimage centos-new”命令,就啟動了該鏡像,其中的“newimage”表 示 其 名稱.“-p”參數(shù)執(zhí)行端口映射,將容器的TCP 22端口映射到宿主機的TCP 2201端口。這樣,其他主機通過訪問宿主機的TCP 2201端口,就可以連接該容器。之后執(zhí)行“docker ps -a”命令,可以看到其中的TCP 20端口已經(jīng)處于打開狀態(tài),還可以查看其ID,啟動命令,創(chuàng)建時間等 內(nèi) 容。 執(zhí) 行“docker inspect xxxxxxxxxxxx|grep "IPA"”命令,可以查看對應(yīng)容器的的IP信息。因為該容器的SSH服務(wù)已經(jīng)打開,因此執(zhí)行“ssh -l root xxx.xxx.xxx.xxx”,連接該容器,輸入密碼(即上述Dockerfile中的預(yù)設(shè)密碼“qwe123”),就可以利用 SSH通道連接到該容器中。