Java教程

Dockerfile运用(ssh,systemctl,tomcat,mysql)

本文主要是介绍Dockerfile运用(ssh,systemctl,tomcat,mysql),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

构建SSH镜像

mkdir /opt/sshd 
cd /opt/sshd 

vim Dockerfile
#指定基础镜像
FROM centos:7
#指定镜像维护人信息
MAINTAINER this is ssh image <dd>
#更新镜像yum源
RUN yum -y update

#在基于镜像上安装软件
#openssh是SSH协议的免费开源实现
#net-tools组件可支持使用ifconfig命令查看网卡信息
#lsof查看进程打开的文件、打开文件的进程、进程打开的端口
#telnet支持远程登陆
#passwd用于设置密码,更新用户身份令牌
RUN yum -y install openssh* net-tools lsof telnet passwd

#更改root用户密码为123456
RUN echo 123456 | passwd --stdin root

#将ssh服务端配置文件中所有的UsePAM yes替换为UsePAM no,关闭第三方认证登陆,别人都无法远程登陆该主机
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

#取消pam限制,\s为空字符,设置一条即可
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd

#为当前用户(root)创建秘钥对文件,使用rsa算法,-A选项实现的免交互,生成密钥文件
RUN ssh-keygen -t rsa -A

#嵌套创建/root/.ssh目录并且将/root目录属主和属组改为root并且为/root/.ssh目录赋权700
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

#指定端口222
EXPOSE 22

#/usr/sbin/sshd -D用于前台启动sshd服务
CMD ["/usr/sbin/sshd", "-D"]

#生成镜像
docker build -t sshd:dd .                 

#启动容器并修改root密码
docker run -d --name ssh1 -P sshd:dd 
docker ps -a
ssh localhost -p 49155               
#指定IP为本机,可以用localhost代替ip地址或者127.0.0.1都可以

 Systemctl镜像

mkdir /opt/systemctl 
cd /opt/systemctl 

vim Dockerfile
#指定基础镜像为之前的sshd容器镜像
FROM sshd:dd

MAINTAINER this is systemctl image <dd>

#基础镜像上执行切换到/lib/systemd/system/sysinit.target.wants目录下,for循环遍历该目录下所有文件,如果文件名称不是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 systemctl:dd .

#启动容器,挂载宿主机目录挂载到容器中并进行初始化
docker run --privileged -d --name No1 -P -v /sys/fs/cgroup/:/sys/fs/cgroup:ro systemctl:dd /sbin/init
#--privileged∶使container内的root拥有真正的root权限,普通用户使用systemctl命令需要root用户密码。否则container内的root只是外部的一个普通用户权限。
#/sys/fs/cgroup:/sys/fs/cgroup:ro∶后面:ro为给予只读的权限
#-d和&都能实现docker容器后台运行

docker ps -a

#进入容器可以使用systemctl命令
docker exec -it No1 bash
systemctl status sshd

Tomcat镜像

mkdir /opt/tomcat 
cd /opt/tomcat
#将jdk和tomcat源码编译包复制到该目录

vim Dockerfile
FROM centos:7
MAINTAINER this is tomcat image <dd>
#将源码包复制到镜像中自动进行解压
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 CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH=$JAVA_HOME/bin:$PATH

ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
#容器运行默认第一条命令为tomcat前台运行
CMD /usr/local/tomcat/bin/catalina.sh run

#创建新镜像
docker build -t tomcat:dd .
docker images
docker run -d --name tomcat1 -p 3444:8080 tomcat:dd 
docker ps -a

 Mysql镜像

mkdir /opt/mysql
cd /opt/mysql
#将mysql-boost-5.7.20.tar.gz源码包复制到该路径中
vim Dockerfile
FROM systemctl:dd
MAINTAINER this is mysql image <dd>
#编译安装需要的工具和环境
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make
#建立运行用户
RUN useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /opt
#编译安装模块软件
RUN cd /opt/mysql-5.7.20/;cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DWITH_SYSTEMD=1
#进行编译安装
RUN cd /opt/mysql-5.7.20/;make -j 4 && make install
#提前准备好mysql配置文件直接复制进去,或者挂载数据卷的方式
ADD my.cnf /etc/my.cnf
#开启mysql端口
EXPOSE 3306
#给予mysql数据目录和配置文件属主和属组
RUN chown -R mysql:mysql /usr/local/mysql/
RUN chown mysql:mysql /etc/my.cnf
#设置mysql命令加入系统环境变量
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#初始化mysql数据库
RUN /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
#将mysql自带的启动文件复制到系统变量中
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#重新读取启动文件,启动mysql服务,如果该步骤报错可以注释,后期容器需要手动进入容器内执行该命令
RUN systemctl daemon-reload;systemctl start mysqld.service

#创建新镜像
docker build -t mysql:dd .
docker images
#基于镜像创建容器
docker run --name mysql1 -d -P --privileged mysql:dd /usr/sbin/init
docker ps -a
#进入容器授权远程连接mysql,密码为abc123
docker exec -it a7356f2122c2 /bin/bash
mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by 'abc123'
grant all privileges on *.* to 'root'@'localhost' identified by 'abc123'
flush privileges;
create database AAA;                                #创建一个数据库方便验证
#客户端
在开启一个终端使用mysql命令连接容器内的mysql,如果宿主机没有数据库需要安装mariadb来使用mysql命令
yum -y install mariadb
mysql -h 192.168.150.30 -uroot -P 49158 -pabc123

 

 

这篇关于Dockerfile运用(ssh,systemctl,tomcat,mysql)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!