Dockerfile 案例之 SSh、systemctl、nginx、tomcat、mysql映象
阿新 • • 發佈:2021-10-19
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 &