Dockerfile ----构建sshd、systemctl、Nginx、Tomcat镜像

本文详细介绍了如何使用Dockerfile构建包含sshd、systemctl、Nginx和Tomcat的镜像。内容包括Dockerfile的基本结构和常用指令,如FROM、MAINTAINER、RUN、CMD、EXPOSE等。通过创建目录、编写Dockerfile、生成镜像和启动容器的步骤,展示了如何一步步实现这四个服务的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile ----构建sshd、systemctl、Nginx、Tomcat镜像

一:什么是Dockerfile

​ Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 Dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像,每一个指令都会创建一个镜像层,即镜像都是多层叠加而成。

Dockerfile结构四部分:
  • 基础镜像信息

  • 维护者信息

  • 镜像操作指令

  • 容器启动时执行指令

Dockerfile操作指令:
  • FROM 镜像:指明构建的新镜像是来自于哪个基础镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令;
  • MAINTAINER 名字 :指明镜像的维护人信息;
  • RUN 命令: 在所基于的镜像上执行命令,并提交到新的镜像中;
  • CMD [“要运行的程序”,“参数1”,“参数2”]:指定启动容器时要运行的命令或脚本,Dockefile只能有一条CMD命令,如指定多条则只能最后一条被执行;
  • EXPOSE 端口号 :声明容器运行的服务端口;
  • ENV 环境变量 变量值 :指定一个环境变量的值,会被后面的RUN使用;
  • ADD 源文件/目录 目标文件/目录 : 将源文件复制到目标文件,源文件要与dockerfile位于相同目录中或者是一个URL;
  • COPY 源文件/目录 目标文件/目录 :作用与ADD类似,但是不支持自动下载和解压;
  • ENTRYPOINT:指定一个容器启动时要运行的命令,用法类似于CMD,只是有由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序;
  • VOLUME [“目录”] :在容器中创建一个挂载点;
  • USER 用户名/UID : 指定运行容器时的用户;
  • WORKDIR 路径:相当于cd命令,切换目录路径;
  • ONBUILD 命令 :指定所生成的镜像作为一个基础镜像时要运行的命令;
  • HEALTHCHECK :健康检查

二:Dockerfile实战

  • 构建nginx镜像

1、创建目录
[root@localhost ~]# mkdir nginx
[root@localhost ~]# cd nginx/
[root@localhost nginx]# rz     ‘把nginx-1.12.2源码包放入此目录中’
2、编辑dockerfile
[root@localhost nginx]# vim Dockerfile

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#下载nginx软件包
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
#指定工作目录
WORKDIR nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
#添加宿主机中的run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
3、创建run.sh脚本
[root@localhost nginx]# vim run.sh

#!/bin/bash
/usr/local/nginx/sbin/nginx
4、创建镜像
[root@localhost nginx]# docker build -t nginx:new . 
5、启动镜像
[root@localhost nginx]# docker run -d -P nginx:new
[root@localhost nginx]# docker ps -a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFqSRnuA-1587470773819)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1587389202667.png)]

6、验证:在浏览器上输入虚拟机地址和端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDUSGaf9-1587470773821)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1587373732332.png)]

  • 构建SSHD镜像

1、创建一个目录
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir sshd
[root@localhost opt]# cd sshd/
2、编辑Dockerfile
[root@localhost sshd]# vim Dockerfile

#基础镜像
FROM centos:7
#描述信息
MAINTAINER this is sshd <xm>
#更新容器的yum源
RUN yum -y update
#部署环境工具
RUN yum -y install openssh* net-tools lsof telnet passwd
#设置登录密码
RUN echo '123' | 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
#禁用ssh中pam会话模块
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
#开放22服务端口
EXPOSE 22
#容器加载时启动sshd服务
CMD ["/usr/sbin/sshd" , "-D"]
3、生成镜像
[root@localhost sshd]# docker build -t sshd:new .
4、启动容器
[root@localhost sshd]# docker run -d -P sshd:new
[root@localhost sshd]# docker ps -a
[root@localhost sshd]# ssh localhost -p 32768

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dod6P4fc-1587470773822)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1587440924007.png)]

  • 构建Systemctl镜像

1、创建目录
[root@localhost ~]# mkdir systemctl
[root@localhost ~]# cd systemctl/
2、编辑Dockerfile
[root@localhost systemctl]# vim Dockerfile

FROM sshd:new
#设置环境变量 container和docker
ENV container docker
#执行先到指定目录,进行for循环遍历目录下所有文件并删除指定的文件。之后进行一系列的删除
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"]
3、生成镜像
[root@localhost systemctl]# docker build -t systemd:new .
4、启动镜像
[root@localhost systemctl]# docker run --privileged -it -v /sys/fs/cgroup/:/sys/fs/cgroup:ro systemd:new /sbin/init
[root@localhost ~]# docker ps -a
[root@localhost ~]# docker exec -it 5967ae45751e bash
[root@5967ae45751e /]# systemctl status sshd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qBCgHkp0-1587470773825)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1587467174937.png)]

  • 构建Tomcat镜像

1、创建目录
[root@localhost ~]# mkdir /opt/tomcat
[root@localhost ~]# cd /opt/tomcat/
[root@localhost tomcat]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u91-linux-x64.tar.gz      ‘把这两个包拷贝到/opt/tomcat中’
2、编辑Dockerfile
[root@localhost tomcat]# vim Dockerfile

FROM centos:7
MAINTAINER this is tomcat
#添加jdk到/usr/local目录中
ADD jdk-8u91-linux-x64.tar.gz /usr/local
#指定工作目录,并安装jdk
WORKDIR /usr/local
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
#解压tomcat源码包
ADD apache-tomcat-9.0.16.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat8
#开启tomcat容器内部的8080端口
EXPOSE 8080
#使用ENTRYPOINT启动tomcat
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]
3、生成镜像
[root@localhost tomcat]# docker build -t tomcat:centos .
4、生成容器
[root@localhost tomcat]# docker run -d --name tomcat01 -p 1213:8080 tomcat:centos              ‘指定端口号为1213’
61b66ab566607e5817fd2486ff6b35181d2a3c346d3131912975c73c8d8aa42e

5、进入容器,启动服务
[root@localhost tomcat]# docker ps -a
[root@localhost tomcat]# docker exec -it 61b66ab56660 bash
[root@61b66ab56660 local]# cd /usr/local/tomcat8/bin/
[root@61b66ab56660 bin]# ./startup.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tG75WpNy-1587470773826)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1587470528636.png)]

6、验证,浏览器输入IP地址:端口号

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值