一、拉取JDK镜像
docker pull java:8
二、拉取MYSQL镜像
docker pull mysql:8.0.26
自定义目录及配置(可跳过)
1、在/home/mysql目录下新建两个文件夹,一个叫data另一个叫conf
mkdir -p /home/mysql/{data,conf}
2、编写my.cnf
/home/mysql/conf目录下创建my.conf
进入/home/mysql/conf,
cd /home/mysql/conf
创建 my.cnf文件
touch my.cnf
[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=1
#服务端口号 默认3306
port=3306
#mysql安装根目录(default /usr)
#basedir=/usr/local/mysql
#mysql数据文件所在位置
datadir=/var/lib/mysql
#pid
pid-file=/var/run/mysqld/mysqld.pid
#设置socke文件所在目录
socket=/var/lib/mysql/mysql.sock
#设置临时目录
#tmpdir=/tmp
# 用户
user=mysql
# 允许访问的IP网段
bind-address=0.0.0.0
# 跳过密码登录
#skip-grant-tables
#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
#skip-external-locking
#只能用IP地址检查客户端的登录,不用主机名
#skip_name_resolve=1
#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
#transaction_isolation=READ-COMMITTED
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
#最大连接数
max_connections=400
#最大错误连接数
max_connect_errors=1000
#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp=true
#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet=128M
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout=1800
wait_timeout=1800
#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size=134217728
max_heap_table_size=134217728
#禁用mysql的缓存查询结果集功能
#后期根据业务情况测试决定是否开启
#大部分情况下关闭下面两项
#query_cache_size = 0
#query_cache_type = 0
#数据库错误日志文件
#log-error=/var/log/mysqld.log
#慢查询sql日志设置
#slow_query_log=1
#slow_query_log_file=/var/log/mysqld_slow.log
#检查未使用到索引的sql
log_queries_not_using_indexes=1
#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes=5
#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements=1
#慢查询执行的秒数,必须达到此值可被记录
long_query_time=8
#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit=100
#mysql binlog日志文件保存的过期时间,过期后自动删除
#expire_logs_days=5
binlog_expire_logs_seconds=604800
启动MySql服务
docker run -itd -p 3306:3306 \
--name mysql8 \
-v /home/mysql/conf/my.cnf:/etc/my.cnf \
-v /home/mysql/data:/var/lib/mysql \
--privileged=true \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.26
解释
-p 3306:3306 : 第一个3306是liunx的端口号,第二个3306 是Docker容器的端口号.要想远程访问这个数据库 就要先通过远程访问Linux的端口,再映射到docker容器的端口访问mysql
–name mysql8 : myData是容器启动后的名字,可以自定义,但是建议见名知意
-e MYSQL_ROOT_PASSWORD=123456 : MySql启动需要的账户密码,默认root账户,我这里设置123456
-v /usr/local/docker/mysql/data:/var/lib/mysql : 设置数据存储路径 冒号左面的表示宿主机的挂载目录,冒号右边则表示容器内部的路径
-d : 表示后台启动该服务
mysql:8.0.26 : 安装的数据库的版本,我们拉取的是5.7版本
三、远程连接MySql
1、查看我们想要连接的mysql是否启动
#查看在运行的容器
docker ps -s
2、进入容器
docker exec -it 容器号或名字 /bin/bash
docker exec -it da0ae44cec50 /bin/bash
或
docker exec -it mysql /bin/bash
3、进入mysql
mysql -uroot -p
#输入密码(跟windows上运行mysql是一样的)
mysql> use mysql;
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql> flush privileges;
mysql> select host,user,plugin,authentication_string from mysql.user;
再次远程连接mysql就成功了
4、 开放服务器3306端口
systemctl start firewalld
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
注意:如果是云平台,需要配置安全组,开放3306端口
四、安装Redis
4.1、拉取Redis5.0的docker镜像
docker pull redis:5
重启一下docker ,防止redis启动失败
sudo systemctl restart docker
重启后记得启动MySql
docker start mysql
4.3 创建以下文件及文件夹,方便配置及管理redis
mkdir -p /docker/redis
mkdir -p /docker/redis/data
touch /docker/redis/redis.conf
编辑配置文件
vim /docker/redis/redis.conf
# 不开启守护进程
daemonize no
# 指定Redis端口为6379(默认)
port 6379
# 不要绑定的主机地址,那样无法在容器外部访问
bind 0.0.0.0
#需要密码则打开
requirepass 123456
# 持久化
appendonly yes
4.2 启动Redis
docker run \
-p 6379:6379 \
--name redis \
-v /docker/redis/redis.conf:/etc/redis/redis.conf \
-v /docker/redis/data:/data \
--restart=always \
-d redis:5 redis-server /etc/redis/redis.conf
五、安装Nginx
5.1 拉取镜像文件
docker pull nginx:1.14.1
5.2 运行nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.14.1
5.3 拷贝配置文件到指定目录
docker container cp nginx:/etc/nginx /mydata/nginx/
5.4 修改文件名称
cd /mydata/nginx/
mv nginx conf
5.5 终止并删除容器
docker stop nginx
docker rm nginx
5.6 重新启动nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.14.1
六、Docker中安装Tomcat
6.1 搜索tomcat
6.2 拉取
docker pull tomcat:9
6.2目录挂载
在usr/local/目录下创建一个dev目录,dev目录下再创建一个docker-tomcat目录,用docker-tomcat进行映射到docker中的tomcat容器里的webapps目录
创建容器同时进行挂载
#挂载usr/local/dev/docker-tomcat目录,并运行容器命令如下
docker run -d -p 8080:8080 --name tomcat -v /usr/local/dev/docker-tomcat:/usr/local/tomcat/webapps tomcat:9
进入容器
docker exec -it tomcat /bin/bash