Java教程

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 &

 

 

 

 

 

这篇关于Dockerfile 案例之 SSh、systemctl、nginx、tomcat、mysql镜像的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!