Docker的Centos7容器配置Tomcat和MySQL并打成基础镜像
下载centos7镜像
docker pull centos
进入docker中的CentOS7
docker run -itcentos /bin/bash
安装解压程序
yum install-y unzip zip
安装 libaio
yum install libaio*
yum -y install numactl.x86_64
安装weget
yum -y install wget
安装JDK
安装JAVA
系统自带的java没有jps命令
rpm -ivh jdk-8u171-linux-x64.rpm
默认安装路径为:
cd /usr/java/jdk1.8.0_171-amd64
配置JAVA环境变量
vim /etc/profile
#JDK环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
使配置立即生效
source /etc/profile
安装Tomcat
给tomcat文件夹下所有.sh 文件赋予权限
chmod 777 *.sh
在auto_service.sh文件中添加启动
sh /home/dmiaes/apache-tomcat-8.5.32/bin/startup.sh
CentOS7 yum方式安装MySQL5.7
安装weget
yum -yinstall wget
1 .下载并安装MySQL官方的 Yum Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。
yum -y install mysql57-community-release-el7-10.noarch.rpm
之后就开始安装MySQL服务器。
yum -y install mysql-community-server
这步可能会花些时间,安装完成后及完成mysql安装。
2 .MySQL数据库设置
首先启动MySQL
systemctl start mysqld.service
查看MySQL运行状态,运行状态如图:
systemctl status mysqld.service
此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:
grep "password" /var/log/mysqld.log
如下命令进入数据库:
mysql -uroot -p
输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:
mysql> ALTERUSER 'root'@'localhost' IDENTIFIED BY 'new password';
注意密码需要比较复杂,否则提示Error 1219错误
配置mysql允许远程登录
mysql> usemysql;
mysql> grantall privileges on *.* to root@'%' identified by "登录密码";
mysql> flush privileges;
MySQL5.7创建用户和允许远程登录
CREATE USER 'admin'IDENTIFIED BY "prdIR924KDFkdf";
grant all privilegeson *.* to 'admin' identified by 'prdIR924KDFkdf';
flush privileges;
My.cnf目标
/etc/my.cnf
配置不区分大小写
# 0 :区分大小写, 1 :不区分大小写
lower_case_table_names=1
最终测试
docker run -d--privileged -p 8080:8080 -p 3306:3306 -p 10022:22 -it centos_test6 /usr/sbin/init
注意--privileged不能少,加了他进入容器里面的用户才是真正意义的root,否则只是普通root账户。
docker 使用中遇到的问题记录:
cgroups: cannot findcgroup mount destination: unknown.
使用docker-machine sshdefault 进入虚拟机。
docker -machine sshdefault
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup-o none,name=systemd cgroup /sys/fs/cgroup/systemd
服务随容器启动而自启动并具备注册服务的权限
使用/home/auto_service.sh这种自启动方式弊端是不能使用/usr/sbin/init了,为了解决这个问题我们需要知道/usr/sbin/init干了什么,具体解释如下。理解其原理后我们可以在rc.local文件中添加我们自定义的启动运行的脚本,具体如下。然后我们就能使用如下命令运行我们的脚本了,这样在容器里就能使用服务启动了,避免了Failed to get D-Bus connection:Operation not permitted的错误,也能运行我们自定义启动脚本。
docker run -d--privileged -p 8080:8080 -p 3306:3306 -p 10022:22 -it centos_test6 /usr/sbin/init
注意--privileged不能少,加了他进入容器里面的用户才是真正意义的root,否则只是普通root账户。
测试看是否还报Failed to get D-Bus connection: Operation notpermitted错误
systemctl status firewalld.service
linux添加开机自启动脚本示例详解
加载内核顺序
执行init程序
/etc/rc.d/rc.sysinit # 由init执行的第一个脚本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式
/etc/rc.d/rc.local
#相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)
/sbin/mingetty # 等待用户登录
init 是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程,内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
内核会在过去曾使用过init 的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init,如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
Centos7开机启动自己的脚本的方法
1. 自己新建一个脚本,如auto_run.sh
经过后面的几个步骤后,这个脚本在开机的时候会执行,在这个脚本里面可以写你开机的时候想执行的命令,如启动tomcat,oracle等服务
2. 在脚本中输入启动服务的命令,如(开机启动tomcat):
#!/bin/bash
export JDK_HOME=/home/java/jdk1.8.0_91
export JAVA_HOME=/home/java/jdk1.8.0_91
sh /home/apache-tomcat-8.5.32/bin/startup.sh
3. 执行如下命令,将该脚本标记为可执行文件(添加可执行的权限)
chmod +x /home/auto_run.sh
4. 执行如下命令将/etc/rc.d/rc.local文标记为可执行文件
在centos7中,/etc/rc.d/rc.local文件的权限被降低了,开机的时候执行在自己的脚本是不能起动一些服务的,执行下面的命令可以文件标记为可执行的文件
chmod +x /etc/rc.d/rc.local
5. 打开/etc/rc.d/rc.local文件,
vi /etc/rc.d/rc.local
在最后面添加如下脚本
/home/auto_run.sh
这样,auto_run.sh这个脚本在开机的时候就会被执行了,以后再这里面写启动服务的命令就可以了。
注意:auto_run.sh文件为自定义需要开机启动的程序,只能为.sh的程序,否则请使用安装服务的方式进行自启动。
Redis安装
准备(安装gcc)
yum -y install gccautomake autoconf libtool make
安装:
$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz
$ tar xzfredis-3.0.7.tar.gz
$ cd redis-3.0.7
$ make
设置密码:redis.conf 文件中设置,requirepass test2019
启动:
以指定配置文件启动
$ src/redis-serverredis.conf
安装redis服务
测试
cd C:\redis-x64-2.8
redis-cli -h 192.168.99.100 -p 6379 -a"houli2015"