1. 程式人生 > 其它 >Dockerfile 案例之 SSh、systemctl、nginx、tomcat、mysql映象

Dockerfile 案例之 SSh、systemctl、nginx、tomcat、mysql映象

Dockerfile 案例之 SSh、systemctl、

一、Dockerfile之SSH映象構建

mkdir /opt/sshd
cd /opt/sshd
#基礎映象 FROM centos #映象維護人資訊 MAINTAINER this is ssh image <ht> #更新基於映象yum源 RUN yum
-y update #在基於映象上安裝軟體 #openssh是SSH協議的免費開源實現 #net-tools元件可支援使用ifconfig命令檢視網絡卡資訊 #lsof檢視程序開啟的檔案、開啟檔案的程序、程序開啟的埠 #telnet支援遠端登陸 #passwd用於設定密碼,更新使用者身份令牌 RUN yum
-y install openssh* net-tools lsof telnet passwd #更改root使用者密碼為abc1234 RUN echo 'abc1234' | passwd --stdin root #將ssh服務端配置檔案中所有的UsePAM yes替換為UsePAM no,關閉第三方認證登陸,別人都無法遠端登陸該主機 RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #建立非金鑰對檔案,生成到/etc/ssh/目錄下為ssh_host_rsa_key RUN sed -i '/^session\s+required\s+pam_loginuid.so/ s/^/#/
' /etc/pam.d/sshd
RUN ssh-keygen -t rsa -A # 生成祕鑰認證檔案 #巢狀建立
/root/.ssh目錄並且將/root目錄屬主和屬組改為root並且為/root/.ssh目錄賦權700,只有root使用者可讀寫執行 RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh #指定埠22 EXPOSE 22 #在執行容器時啟動ssh服務,並開啟守護程序 CMD ["/usr/sbin/sshd","-D"] #構建新映象, docker build -t sshd:centos . #後臺執行並啟動容器,修改root密碼
docker run -d -P sshd:centos
docker ps -a
ssh localhost -p 49153

二、Dockerfile之構建systemctl映象

mkdir /opt/systemctl
cd /opt/systemctl

vim Dockerfile
# 指定基礎映象為之前的sshd容器進行
FROM sshd:centos
MAINTAINER this is systemctl image <wl>
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" ]
#啟動容器時,用於init命令將系統初始化,作為容器的第一個程序,但是如果之前映象中有CMD命令或 ENTRYPOINT 命令會覆蓋或者只執行最後一條CMD命令
CMD ["/usr/sbin/init"] //生成新的映象 docker build -t systemd:centos . //啟動容器,並掛載宿主機目錄掛載到容器中,和進行初始化 docker run --privileged -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init & #--privileged:使container內的root擁有真正的root許可權。否則,container內的root只是外部的一個普通使用者許可權。 docker ps -a //進入容器 docker exec -it a0d624d2bfa9 bash systemctl status sshd 方法二: docker run -d -P --privileged sshd:centos /usr/sbin/init &