用docker部署mysql8.0(Docker常规软件安装tomcatmysql)

用docker部署mysql8.0(Docker常规软件安装tomcatmysql)(1)

本文将讲述如何用Docker安装我们常用的一些软件,包括:tomcat、mysql、redis、nginx.

总体步骤
  • 搜索镜像: docker search 镜像名
  • 拉取镜像: docker pull 镜像名
  • 查看镜像: docker images
  • 启动容器: docker run 镜像名:tag
  • 停止容器: docer stop 容器ID
  • 移除容器: docer rm 容器ID
安装tomcat安装最新版tomcat10.0.14

从dockerhub上查找tomcat镜像:

docker search tomcat

拉取最新镜像:

docker pull tomcat

启动tomcat容器:

docker run -d -p 8080:8080 tomcat

访问:

http://192.168.92.147:8080/

注意:此时是无法访问到首页汤姆猫的,报404,因为新版的tomcat有所改变。

用docker部署mysql8.0(Docker常规软件安装tomcatmysql)(2)

新版已经将webapps目录下项目清空,将原项目放到了新的webapps.dist目录下。

需要做如下改变:

[root@localhost ~]# docker exec -it 34d4273a9447 /bin/bash root@34d4273a9447:/usr/local/tomcat# cp -r webapps.dist/* webapps/ # 将webapps.dist目录下所有项目拷贝至webapps root@34d4273a9447:/usr/local/tomcat# exit

此时即可访问:

用docker部署mysql8.0(Docker常规软件安装tomcatmysql)(3)

安装tomcat8.5.75

拉取镜像:

docker pull tomcat:8.5.75

运行容器:

docker run -d -p 8080:8080 tomcat:8.5.75

同样需要执行webapps.dist拷贝:

[root@localhost ~]# docker exec -it 68906c933148 /bin/bash root@68906c933148:/usr/local/tomcat# cp -r webapps.dist/* webapps/ root@68906c933148:/usr/local/tomcat# exit

安装mysql简单版

拉取 mysql5.7 镜像:

docker pull mysql:5.7.37

启动容器:

参考官方说明:https://hub.docker.com/_/mysql?tab=description

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.7.37

进入容器连接mysql测试:

[root@localhost ~]# docker exec -it fd943afcc1ed /bin/bash root@fd943afcc1ed:/# mysql -uroot -p123456 mysql> show databases; mysql> create database d1; mysql> use d1; mysql> create table t1(id int,name char(10)); mysql> insert into t1(1,'zhangsan'); mysql> select * from t1; ------ ---------- | id | name | ------ ---------- | 1 | zhangsan | ------ ---------- 1 row in set (0.00 sec) mysql> exit

一切看起来ok。

注意:此时插入中文会报错,因为字符集编码原因。

查看字符集(需要在服务器上看,客户端看不准):

mysql> SHOW VARIABLES LIKE 'character%'; -------------------------- ---------------------------- | Variable_name | Value | -------------------------- ---------------------------- | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | -------------------------- ---------------------------- 8 rows in set (0.00 sec)

都是latin1,插入中文会报错,需要改为utf-8

同时此时所有数据都在容器中,一旦容器删掉,所有数据都会消失,接下来我们引入数据卷来处理数据存储问题和字符集问题。

实战版

在宿主机上新建目录用于存储mysql相关数据:

mkdir -p /data/mysql/{data,conf,log}

新建my.cnf

vim /data/mysql/conf/my.cnf

内容如下:

[client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8

启动容器:

docker run -d -p 3306:3306 --privileged=true \ -v /data/mysql/log:/var/log/mysql \ -v /data/mysql/data:/var/lib/mysql \ -v /zzyyuse/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql \ mysql:5.7.37

完成。

安装redis简单版

拉取镜像:

docker pull redis:6.0.16

运行命令:

docker run -d -p 6379:6379 redis:6.0.16

测试:

[root@localhost ~]# docker exec -it a227eb2630ec /bin/bash root@a227eb2630ec:/data# root@a227eb2630ec:/data# redis-cli 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> ping PONG

实战版

同样简单版也有像安装mysql一样的问题,一旦容器删除,数据就没有了,所以需要解决数据存储问题。

新建目录用于存储redis相关数据:

mkdir -p /data/redis/data

拷贝准备好的 redis.conf 到 /data/redis/ 目录下。 redis6.0.16版本原版redis.conf

修改后的 redis.conf

修改项目包括:

开启验证: requirepass 123456 允许远程连接,将 bind 127.0.0.1 注释起来 # bind 127.0.0.1 开启redis数据持久化,将appendonly no改为appendonly yes appendonly yes

启动容器:

docker run -d -p 6379:6379 --name redis --privileged=true \ -v /data/redis/redis.conf:/etc/redis/redis.conf \ -v /data/redis/data:/data \ redis:6.0.16 redis-server /etc/redis/redis.conf

连接测试:

[root@localhost ~]# docker exec -it 81b27131013e /bin/bash root@81b27131013e:/data# redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> set k1 va OK 127.0.0.1:6379> get k1 "va"

完成。

安装nginx简单版

拉取nginx镜像:

docker pull nginx

启动镜像:

-p 80:80 表示将宿主机的80端口映射到容器内的80端口

docker run -d -p 80:80 nginx

访问:

http://192.168.92.147/

实战版

我们虽然已经在简单版部署了nginx,但是用过nginx的都知道,nginx还有很多配置的,如果要改就必须进到容器内去改,这样就很麻烦了,接下来解决这个问题。

拉取镜像:

docker pull nginx

启动一个临时镜像,主要是用于拷贝default.conf这个配置文件。

docker run -d --name temp-nginx nginx

宿主机上新建一个目录用于存储nginx相关的数据:

mkdir -p /data/nginx

从容器中拷贝default.conf

docker cp temp-nginx:/etc/nginx/conf.d/default.conf /data/nginx/

启动正式的nginx容器:

-v /data/nginx/default.conf:/etc/nginx/conf.d/default.conf 将宿主机的 /data/nginx/default.conf 文件挂载到容器内 /etc/nginx/conf.d/default.conf

-p 80:80 将宿主机的80端口映射到容器内的80端口

docker run -d -v /data/nginx/default.conf:/etc/nginx/conf.d/default.conf -p 80:80 --name nginx_prod nginx

接下来我们就可以通过在宿主机上修改 /data/nginx/default.conf 文件,容器内也可以生效,不用再进到容器内部了。

修改示例:

刚刚我们运行了tomcat的容器,接下来修改 /data/nginx/default.conf 文件来反向代理tomcat.

将 /data/nginx/default.conf 文件中:

location / { root /usr/share/nginx/html; index index.html index.htm; } 改为: location / { proxy_pass http://192.168.92.147:8080; }

重启nginx容器:

docker restart nginx_prod

再次访问 http://192.168.92.147/ 即可看到tomcat的汤姆猫了。

此外还有其他一些配置,请自行发挥。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页