这里写目录标题

  • docker搭环境部署how2j项目实操
  • 背景
  • 步骤
  • 拉取一个Linux镜像
  • 安装ftp服务
  • vsftpd介绍
  • 安装和启停
  • 增加用户
  • 配置用户
  • 配置端口
  • 鉴权配置
  • 重启服务
  • 开放端口
  • 安装java
  • 安装mysql
  • 安装tomcat
  • 部署java应用和sql语句
  • 设置自启动
  • 服务自启动
  • 脚本自启动
  • 容器打包成镜像


docker搭环境部署how2j项目实操

背景

本文档记录how2j的tmall项目在本地虚拟机上使用docker生成镜像并推送到仓库的过程

Linux:centos7,docker为20.10…版本。注意有个坑,linux内核版本过低(比如内核版本3…和docker20…就不行)、docker版本过高,部署完也无法访问,解决办法

步骤

拉取一个Linux镜像
//在自身虚拟机上的操作系统中拉取一个镜像
docker pull centos:7.6.1810
安装ftp服务

为了后续从本地上传java应用、tomcat等到虚拟机中的操作系统方便,安装vsftpd

vsftpd介绍

vsftpd 全称是:very secure FTP daemon 非常安全的ftp后台程序,及ftp 服务端

安装和启停
yum install vsftpd -y
systemctl start vsftpd.service
systemctl status vsftpd.service
systemctl stop vsftpd.service
//ftp服务启动的是21端口,使用如下命令应该观察到21端口正在处于监听状态,这也从侧面反应了ftp服务器启动成功了
netstat -anp|grep 21
增加用户

为了连接上vsftpd,我们创建专门的用户

  • 创建一个目录专属于此用户拥有

mkdir -p /home/wwwroot/ftptest

  • 创建用户, 创建用户ftptest,并且指定其目录为用户目录中创建的/home/wwwroot/ftptest
  • -g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
    -s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端。 这种不能登陆的用户又叫做虚拟用户
    创建过程给出的警告信息是正常的,不用理会

useradd -d /home/wwwroot/ftptest -g ftp -s /sbin/nologin ftptest

  • 设置目录权限 , 把目录/home/wwwroot/ftptest的拥有者设置为ftptest
    使ftptest用户拥有这个目录的读写权限

chown -R ftptest /home/wwwroot/ftptest chmod -R 775 /home/wwwroot/ftptest

  • 设置密码

//输入 paw123### passwd ftptest

配置用户
  • 为了安全起见,去掉vsftpd的匿名登录

vi /etc/vsftpd/vsftpd.conf //进入后把原来的anonymous_enable=YES改为 anonymous_enable=NO

  • 限制用户访问, 创建的ftptest用户所拥有的目录是 /home/wwwroot/ftptest,如果不做限制,那么使用ftptest登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患

vi /etc/vsftpd/vsftpd.conf //进入后找到 #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list //将这三行改为,即去掉注释 chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list

  • 添加用户名单

vi /etc/vsftpd/chroot_list //进入后增加一行 ftptest

  • 打开写权限, vsftpd服务器是这样的,一旦某个用户被限制访问了,那么默认情况下,该用户的写权限也被剥夺了。 这就导致ftp客户端连接上服务器之后无法上传文件。

vi /etc/vsftpd/vsftpd.conf //最后面加上 allow_writeable_chroot=YES

配置端口

vsftpd有两种端口,一个是21端口,用来监听客户端连接请求的。 这个一般说来是固定的,就一直使用21端口。
另一种是,一旦获取到请求之后,再专门用户服务端和客户端传输数据的端口。
本知识点就是用于指定第二种端口的获取范围

vi /etc/vsftpd/vsftpd.conf //进入后,在最后添加,这表示使用被动模式,用于传输数据的端口分配从30000-30010之间。 pasv_enable=YES pasv_min_port=30000 pasv_max_port=30010

鉴权配置

不懂为啥、、、跟着配置把

vi /etc/pam.d/vsftpd //注释掉/etc/pam.d/vsftpd文件里这一行: #auth required pam_shells.so //这样不去鉴权,从而允许 ftptest 这种 nologin用户登录 ftp 服务器.

重启服务
systemctl restart vsftpd.service
systemctl status vsftpd.service
开放端口

有防火墙且开启的,需要开放端口,才能访问

firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --zone=public --add-port=30000-30010/tcp --permanent //开放完之后一定要刷新 firewall-cmd --reload //查看一下 firewall-cmd --zone=public --list-ports

本地下载个ftp客户端待后续使用,xftp、ftprush等等都行

安装java

这里的安装是在虚拟机中的docker容器里centos7安装

//运行容器 docker run -dit --privileged --name centos7 centos:7.6.1810 /usr/sbin/init //进入容器,补充:退出容器exit docker exec -it centos7 /bin/bash

然后再执行

yum -y install java-1.8.0-openjdk.x86_64 //验证 java -version

安装mysql

这里的安装是在虚拟机中的docker容器里centos7安装,进入容器同上

yum上mysql的资源有问题,所以不能仅仅之用yum。在使用yum之前还需要用其他命令获取mysql社区版

cd /tmp wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm //接着就可以通过yum安装了: yum install mysql mysql-server mysql-devel -y //启动 systemctl start mysql.service //验证 netstat -anp|grep 3306 //设置mysql密码 //通过Yum安装的mysql的管理员账户是没有密码的,这里通过命令设置其密码为 admin ,尽量使用这个密码哦,后续部署j2ee应用的时候会用到这个密码哦。 mysqladmin -u root password admin //登录 mysql -uroot -padmin //进入了终端,试试sql语句 show databases;

安装tomcat

yum上没有tomcat的源,可以用其他方式,如

cd /tmp wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.92/bin/apache-tomcat-7.0.92.tar.gz tar xzf apache-tomcat-7.0.92.tar.gz mv apache-tomcat-7.0.92 /usr/local/tomcat7

  • 但是本教程用的tomcat8,直接在这右上角下载

//下载到本地,通过ftp客户端上传到虚拟机的操作系统,然后再通过docker的cp命令复制到容器centos7中 //将宿主机目录线下/home/wwwroot/ftptest/apache-tomcat-8.5.23.tar.gz复制到名为centos7的容器的/tmp目录下面 docker cp /home/wwwroot/ftptest/apache-tomcat-8.5.23.tar.gz centos7:/tmp //进入容器,同上 ... //解压、移动 tar xzf apache-tomcat-8.5.23.tar.gz mv apache-tomcat-8.5.23 /usr/local/tomcat8

二进制docker启动 220j docker_docker

  • 验证一下

//启动tomcat /usr/local/tomcat8/bin/startup.sh //查看端口 netstat -anp|grep 8080 //查看启动日志 tail -300f /usr/local/tomcat8/logs/catalina.out

  • 开放端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent //开放完之后一定要刷新 firewall-cmd --reload //查看一下 firewall-cmd --zone=public --list-ports

部署java应用和sql语句

rar包下载

下载tmall.rar,解压后上传到虚拟机的操作系统中,才通过docker的cp转移到容器中。

//步骤基本同上 docker cp /home/wwwroot/ftptest/tmall centos7:/home/wwwroot/ftptest //最后的项目位置在/home/wwwroot/ftptest/tmall/web //配置tomcat vi /usr/local/tomcat7/conf/server.xml //然后在<host下面增加一行 <Context path="/tmall" docBase="/home/wwwroot/ftptest/tmall/web" debug="0" reloadable="false" /> //重启tomcat /usr/local/tomcat7/bin/shutdown.sh /usr/local/tomcat7/bin/startup.sh

二进制docker启动 220j docker_二进制docker启动_02

下载tmall.sql,上传到虚拟机的操作系统中,才通过docker的cp转移到容器中。

//Linux MySQL默认是大小写敏感的,但是模仿天猫在设计的时候是在windows上开发的,而windows上的Mysql默认是非大小写敏感的,所以JDBC代码有的表名是大写,有的是小写的,一旦运行起来就会因为大小写不一致导致无法识别表名。 为了解决这个矛盾,就需要把MySQL的大小写敏感修改为非敏感。解决办法如下: vi /etc/my.cnf //打开后在[mysqld]后添加添加 lower_case_table_names=1 //重启mysql systemctl restart mysqld.service //连接数据库 mysql -uroot -padmin //创建数据库 CREATE DATABASE tmall DEFAULT CHARACTER SET utf8; //查看 show databases; //导入数据 mysql -u root -padmin --default-character-set=utf8 tmall < /home/wwwroot/ftptest/tmall.sql //重新登录验证 mysql -uroot -padmin use tmall; show tables; select count(*) from product;

设置自启动
服务自启动
//分别执行如下代码就可以开启服务的自启动了。
systemctl enable vsftpd.service
systemctl enable mysqld.service
//关闭
systemctl disable vsftpd.service
systemctl disable mysqld.service
脚本自启动

有个文件叫做 rc.local, 把脚本放进去就可以了。
不过这个脚本在 centos7里被降级了,不能被执行,所以要执行如下语句使得其可以被执行先

chmod +x /etc/rc.d/rc.local
//然后修改 /etc/rc.d/rc.local, 放入 tomcat脚本即可
vi /etc/rc.d/rc.local
/usr/local/tomcat7/bin/startup.sh

二进制docker启动 220j docker_centos_03

容器打包成镜像
//容器打包成镜像
docker commit -m="my tmall" -a="yujin" centos7 blknjyty/mytmall:v1
//运行镜像
docker run -dit --privileged -p80:80 -p8080:8080  --name mytmall blknjyty/mytmall:v1  /usr/sbin/init
//本机访问
http://虚拟机ip:8080/tmall/

二进制docker启动 220j docker_docker_04