Docker常规软件安装 tomcat、mysql、redis

本文将讲述如何用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.145:8080/

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

新版已经将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

此时即可访问:

 

安装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 values(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 /data/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的汤姆猫了。

 

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

 

版权声明:
作者:admin
链接:https://www.chenxie.net/archives/2558.html
来源:蜀小陈
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录