Dockerfild制作ssh,systemctl,nginx,tomcat,mysql镜像

一、SSH镜像制作
[root@docker ~]# mkdir /opt/sshd/
[root@docker ~]# cd /opt/sshd/
[root@docker sshd]# vim Dockerfile

#加载基础镜像
FROM centos:7
#作者信息
MAINTAINER cuiwangfeng
#更新yum源
RUN yum -y update
#安装组件包
RUN yum -y install openssh* net-tools lsof telnet passwd
#给root设置登录密码
RUN echo '123456' |passwd --stdin root
#修改配置文件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验证模块开启模块
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"]
生成镜像
[root@docker sshd]# docker build -t ssd:new .
启动
[root@docker sshd]# docker run -d -P ssd:new
08e815e9281de42ed08fa3312a6b8f037266d252c982c9b7eeecced80c8f43e6
[root@docker sshd]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
08e815e9281d        ssd:new             "/usr/sbin/sshd -D"   23 seconds ago      Up 22 seconds       0.0.0.0:32768->22/tcp   amazing_moser
验证ssh连接
[root@docker sshd]# ssh localhost -p 32768
The authenticity of host '[localhost]:32768 ([::1]:32768)' can't be established.
RSA key fingerprint is SHA256:RuCP0dpLuRyT87HxPSUTAAXuDSyrMo2B1kFqyQVzenw.
RSA key fingerprint is MD5:0a:cc:7a:4e:33:53:d5:8d:fa:2e:67:8c:c6:4a:04:e1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:32768' (RSA) to the list of known hosts.
root@localhost's password: 
[root@08e815e9281d ~]# 

二、systemctl镜像制作

[root@docker ~]#mkdir /opt/systemctl
[root@docker ~]#cd /opt/systemctl 
[root@docker systemctl]# vim Dockerfile
FROM ssd: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 /lib/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@docker systemctl]# docker build -t systemd:new .
//privileged是保持权限,到容器中依然有root的权限
#宿主机和容器数据共享,并且只给读的权限
[root@docker systemctl]# docker run --privileged -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:new /sbin/init &

[root@docker systemctl]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
2d3e241db7d4        systemd:new         "/sbin/init"          13 seconds ago      Up 11 seconds       22/tcp                  agitated_kapitsa
08e815e9281d        ssd:new             "/usr/sbin/sshd -D"   36 minutes ago      Up 36 minutes       0.0.0.0:32768->22/tcp   amazing_moser

进入容器验证systemctl

[root@docker systemctl]# docker exec -it 2d3e241db7d4 bash
[root@2d3e241db7d4 /]# sytemctl status ssh
bash: sytemctl: command not found
[root@2d3e241db7d4 /]# systemctl status ssh
Unit ssh.service could not be found.
[root@2d3e241db7d4 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-09-21 08:37:00 UTC; 2min 27s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 31 (sshd)
   CGroup: /docker/2d3e241db7d43befc8cfab3be6e420f0995f9834e305a0e33c106d054f3ae744/system.slice/sshd.service
           └─31 /usr/sbin/sshd -D
[root@2d3e241db7d4 /]# 

三、nginx镜像制作

[root@docker ~]#mkdir /opt/nginx
[root@docker ~]#cd /opt/nginx

Dockerfile文件
[root@docker nginx]#vim Dockerfile
#加载镜像
FROM centos:7
#作者信息
MAINTAINER cuiwangfeng
#更新yum源
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/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
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"]

启动脚本文件

[root@docker nginx]#vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
安装包
[root@docker nginx]# ls
Dockerfile  nginx-1.12.0.tar.gz  run.sh
镜像生成
[root@docker nginx]# docker build -t nginx:new .
启动容器
[root@docker nginx]# docker run -d -P nginx:new
[root@docker nginx]# docker ps -a

测试
在这里插入图片描述
四、Tomcat镜像制作

[root@docker ~]#mkdir /opt/tomcat
[root@docker ~]#cd /opt/tomcat/
[root@docker tomcat]#vim Dockerfile
FROM centos:7
MAINTAINER cuiwangfeng
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-8.5.16.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat8
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]

[root@docker tomcat]# docker build -t tomcat:centos .
[root@docker tomcat]# docker run -d --name tomcat01 -P tomcat:centos
查看端口号
[root@docker tomcat]#docker ps -a

在这里插入图片描述
五、mysql镜像制作

[root@docker ~]#mkdir /opt/mysql
[root@docker ~]#cd /opt/mysql
Dockerfile文件编写
[root@docker mysql]#vi Dockerfile
#基础镜像
FROM centos:7
#描述信息
MAINTAINER cuiwangfeng

#安装环境依赖包
RUN yum -y install gcc gcc-c++ cmake make pcre-devel expat-devel perl
RUN yum -y install autoconf ncurses-devel ncurses bison

#准备并解压mysql包
ADD mysql-5.6.26.tar.gz /opt

#创建mysql程序用户
RUN useradd -s /sbin/nologin mysql

#编译安装mysql
WORKDIR /opt/mysql-5.6.26/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock  && make && make install

#配置文件
RUN cp -f support-files/my-default.cnf /etc/my.cnf
RUN chown -R mysql.mysql /usr/local/mysql
#启动文件
RUN cp support-files/mysql.server /etc/init.d/mysqld
RUN chmod 755 /etc/init.d/mysqld

#配置环境变量
ENV PATH=$PATH:/usr/local/mysql/bin

#初始化数据库
RUN /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
RUN sed -i '/^# basedir/ c basedir = /usr/local/mysql' /etc/my.cnf
RUN sed -i '/^# datadir/ c datadir = /home/mysql' /etc/my.cnf

#指明服务端口
EXPOSE 3306

#启动
ENTRYPOINT ["/usr/local/mysql/bin/mysqld_safe"]
#CMD [""]

docker build -t mysql:new1 .
[root@4759deedc465 mysql-5.6.26]# mysql -uroot -p
Enter password: 
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit

验证

[root@docker mysql]# yum -y install mariadb
#端口为随机映射的端口,查看容器可看到
[root@docker mysql]# mysql -h 20.0.0.90 -u root -P 32773 -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.26 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值