dockerfile构建(ssh、systemctl、nginx、tomcat)

该博客详细介绍了如何通过Dockerfile分别构建SSH、systemctl、Nginx和Tomcat的镜像。首先,通过Dockerfile创建SSH镜像,并进行登录测试验证;接着,构建了支持systemctl的镜像并启动测试;然后,创建Nginx的Dockerfile,结合run.sh脚本建立新镜像并启动;最后,构建了Tomcat的Dockerfile,注释清晰,成功创建镜像和容器,并进行了测试。
摘要由CSDN通过智能技术生成

构建SSH镜像

Dockerfile文件

mkdir sshd
cd sshd/

vi Dockerfile 

FROM centos:7
MAINTAINER this is ssh

#更新容器的yum源
RUN yum -y update

#安装ssh和其他服务软件包
RUN yum install -y openssh* net-tools lsof telnet passwd

#修改root用户密码
RUN echo "123456" | passwd --stdin root

#设置不使用ssh服务端的pam模块
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

#创建非对称秘钥
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

#关闭pam.d机制里的ssh会话模块
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^ /#/' /etc/pam.d/sshd

#创建ssh工作目录并放通权限
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

#开通端口
EXPOSE 22

#开启sshd服务,容器的centos7镜像里没有systemctl命令,故不能用服务的方式启动
CMD ["/usr/sbin/sshd","-D"]

FROM centos:7
MAINTAINER this is ssh
RUN yum -y update
RUN yum install -y openssh* net-tools lsof telnet passwd
RUN echo "123456" | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^ /#/' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22

CMD ["/usr/sbin/sshd","-D"]
~                                                                                                                                                                           

生成镜像

docker build -t sshd:new .
docker run -d -P sshd:new

-P指随机分配一个端口映射
登录测试
在这里插入图片描述

构建systemctl 镜像
Dockerfile文件

mkdir /systemctl
cd /systemctl

FROM sshd:new
ENV container docker
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"]
CMD ["/usr/sbin/init"]

生成镜像

[root@localhost systemctl]# docker build -t systemd:new .

、启动镜像:

[root@localhost systemctl]# docker run --privileged -it -v /sys/fs/cgroup/:/sys/fs/cgroup:ro systemd:new /sbin/init
//privateged container 内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

测试

[root@b66f9bb47209 /]# systemctl start sshd
[root@b66f9bb47209 /]# systemctl status sshd
 sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-09-21 08:50:27 UTC; 10s ago
     Docs: man:sshd(8)
     
'//已经可以使用了systemct和ssh命令'   

构建Nginx镜像

创建目录

mkdir nginx
cd  nginx

Dockerfile 文件

[root@localhost nginx]# vim Dockerfile

FROM centos:7
MAINTAINER The is nginx <wwj>
RUN yum install -y proc-devel gcc gcc-c++ zlib zlib-devel make openssl-devel wget
RUN wget http://nginx.org/download/nginx-1.12.0.tar.gz
RUN tar zxvf nginx-1.12.0.tar.gz
WORKDIR nginx-1.12.0/
RUN ./configure --prefix=/usr/local/nginx && make && make install
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
WORKDIR /root/nginx
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]


[root@docker nginx]# rz -E	'//上传nginx源码包'
rz waiting to receive.
[root@docker nginx]# ls
Dockerfile  nginx-1.12.0.tar.gz

run.sh 脚本

[root@localhost nginx]# vim run.sh

#!/bin/bash
/usr/local/nginx/sbin/nginx

建新镜像

[root@localhost nginx]# docker build -t nginx:new .

启动

[root@localhost nginx]# docker run -d -P nginx:new

[root@localhost nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                                           NAMES
1b337d41a3b2        nginx:new           "/run.sh"                42 seconds ago      Up 41 seconds            0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp   unruffled_hawking

在这里插入图片描述
构建tomcat镜像
Dockerfile文件

mkdir tomcat
cd tomcat
#将jdk-8u91-linux-x64.tar.gz、apache-tomcat-9.0.16.tar.gz放在目录里
FROM centos:7
MAINTAINER this is tomcat
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME /usr/local/java/jre
ENV CLASSPATH /usr/local/java/lib:/usr/local/java/jre/lib
ENV PATH /usr/local/java/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat9
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh","run"]

注释

FROM centos:7
MAINTAINER this is tomcat

#解压java到目录/usr/local下,搭建tomcat的环境
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 java

#设置环境变量
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME /usr/local/java/jre
ENV CLASSPATH /usr/local/java/lib:/usr/local/java/jre/lib
ENV PATH /usr/local/java/bin:$PATH

#解压安装tomcat包
ADD apache-tomcat-8.5.16.tar.gz /usr/local/

#进入目录/usr/local/
WORKDIR /usr/local/

#重命名方便管理
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat9
#放通tomcat服务的8080端口
EXPOSE 8080

#在这里我用的是catalina.sh文件启动,startup.sh文件也可以。
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh","run"]

创建镜像和容器

docker build -t tomcat.new .
docker run -d -P tomcat.new

测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值