Docker---Dockerfile构建sshd,systemctl,nginx,tomcat镜像

Docker—Dockerfile构建sshd,systemctl,nginx,tomcat镜像

一.Dockerfile构建sshd镜像

创建sshd目录
[root@localhost ~]# mkdir sshd
[root@localhost ~]# cd sshd/
编写Dockerfile文件
[root@localhost sshd]# vim Dockerfile

#基础镜像
FROM centos:7
#描述信息
MAINTATINER The CentOS Project <cloud-centos>
#更新容器的yum源
RUN yum -y update
#部署环境工具
RUN yum -y install openssh* net-tools lsof telnet passwd
#设置登陆密码
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
#禁用ssh中pam会话模块
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
#创建ssh工作目录和权限设置
RUN mkdir -p /root/.ssh && chwon root.root /root && chmod 700 /root/.ssh
#开发22服务端口
EXPOSE 22
#容器加载时启动sshd服务
CMD ["/usr/sbin/sshd" , "-D"]
生成镜像:
[root@localhost sshd]# docker build -t sshd:new .(注意后面有个点)
启动容器:
[root@localhost sshd]# docker run -d -P sshd:new

[root@localhost sshd]# docker ps -a 

[root@localhost sshd]# ssh localhost -p 32768
输入密码123456

二.Dockerfile构建systemctl镜像

创建目录
[root@localhost ~]# mkdir systemctl
[root@localhost ~]# cd systemctl/
编辑Dockerfile文件
[root@localhost systemctl]# vim Dockerfile

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

[root@localhost systemctl]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
646cabb64277        systemd:new         "/sbin/init"          2 minutes ago       Up 2 minutes        22/tcp              eloquent_wiles
进入容器,把sshd服务用systemctl开启
[root@localhost systemctl]# docker exec -it 646cabb64277 bash
[root@646cabb64277 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:sshd(8)
           man:sshd_config(5)
[root@646cabb64277 /]# systemctl start sshd
[root@646cabb64277 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-04-22 16:48:37 UTC; 3s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
systemctl就可以控制sshd服务(从dead状态到running状态)

三.Dockerfile构建nginx镜像

创建目录,把nginx软件包放入:
[root@localhost ~]# mkdir nginx
[root@localhost ~]# cd nginx/
[root@localhost nginx]# rz

[root@localhost nginx]# ls
nginx-1.12.2.tar.gz
编写Dockerfile文件:
[root@localhost nginx]# vim Dockerfile

#添加环境包
FROM centos:7
MAINTAINER this is nginx
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.0.tar.gz /usr/local/src
WORKDIR /usr/local/src
#指定工作目录
WORKDIR nginx-1.12.0
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.cof
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
编写run.sh脚本
[root@localhost nginx]# vim run.sh

#!/bin/bash
/usr/local/nginx/sbin/nginx
创建镜像:
[root@localhost nginx]# docker build -t nginx:new .
运行容器:
docker run -d -P nginx:new
测试:
###### 先查看端口:

[root@localhost nginx]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED              STATUS              PORTS                                           NAMES
c70ac974fedd        nginx:new             "/run.sh"           About a minute ago   Up About a minute   0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   nginx_web

##### 在浏览器中输入地址+端口

在这里插入图片描述

四.Dockerfile构建tomcat镜像

创建目录,准备软件包:
[root@localhost ~]# mkdir tomcat
[root@localhost ~]# cd tomcat/
[root@localhost tomcat]# rz
[root@localhost tomcat]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u91-linux-x64.tar.gz
编写Dockerfile文件
[root@localhost tomcat]# vim Dockerfile

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 /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
ADD apache-tomcat-9.0.16.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat8
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]
生成镜像:
[root@localhost tomcat]# docker build -t tomcat:centos .
生成容器,指定端口
docker run -d --name tomcat01 -p 1216:8080 tomcat:centos
测试:
浏览器输入地址+端口
原创文章 84 获赞 95 访问量 5889

猜你喜欢

转载自blog.csdn.net/obsessiveY/article/details/105697846