用docker部署mysql8.0(Docker常规软件安装tomcatmysql)
本文将讲述如何用Docker安装我们常用的一些软件,包括:tomcat、mysql、redis、nginx.
总体步骤- 搜索镜像: docker search 镜像名
- 拉取镜像: docker pull 镜像名
- 查看镜像: docker images
- 启动容器: docker run 镜像名:tag
- 停止容器: docer stop 容器ID
- 移除容器: docer rm 容器ID
从dockerhub上查找tomcat镜像:
docker search tomcat
拉取最新镜像:
docker pull tomcat
启动tomcat容器:
docker run -d -p 8080:8080 tomcat
访问:
http://192.168.92.147: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
拉取 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