如何使用Docker部署安装MySQL、Redis、Nginx
快速上传下载工具(lrzsz)
# 安装lrzsz
yum install -y lrzsz
上传方式:拖拽上传到当前目录。rz -y选择上传。
下载指定文件:sz 文件路径,接着就让我们进行选择存放目录,
Docker环境安装
安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2
为yum源添加docker仓库位置:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker:
yum install -y docker-ce
启动docker:
systemctl start docker
一、快速部署MySQL
mysql-docker文档
# 官方
docker run --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -it --network some-network --rm mysql mysql -hmymysql -uroot -proot
正式快速部署:
1、下载MySQL5.7的docker镜像:
docker pull mysql:5.7
2、使用如下命令启动MySQL服务:
docker run -p 3306:3306 --name mysql \
-v /etc/localtime:/etc/localtime \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
3、将准备好的sql复制到容器中
# 复制宿主机的manage.sql到mysql容器下的/路径中
docker cp /mydata/manage.sql mysql:/
4、进入运行MySQL的docker容器:
# 在容器中创建一个新的命令行
docker exec -it mysql /bin/bash # docker exec -it mysql mysql -uroot -p # 使用mysql容器中的命令行
5、在容器中对mysql进行操作
# 使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
# 此时进入mysql的命令行中,使用数据库并进行导入
use manage;
source /manage.sql;
# 接着创建一个账户,该账号所有ip都能够访问
grant all privileges on *.* to 'changlu' @'%' identified by '123456';
注意注意:
在mysql7中有一个groupby的问题:
我们可以自定义一个my.cnf放置到/mysql/conf目录中,docker的mysql镜像源没有带配置文件,我们进行绑定之后启动mysql也就有了
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 修改添加好了之后,重启我们的docker容器
docker restart mysql
二、快速部署redis
redis镜像中默认时没有redis.conf的
参考文章:史上最详细Docker安装Redis (含每一步的图解)实战
下载Redis5.0的docker镜像:
docker pull redis:5
由于redis镜像中默认不会带redis.conf,所以若是我们想要使用配置文件来进行启动的话就需要自己去官方找redis.conf,再经过修改后放入到指定的目录,之后来容器启动时挂载即可:各个版本下载地址-redis官方
docker安装启动redis 说说那些年遇到的坑
需要修改的的点有:
1、一定要注意自己的redis版本
2、设置密码:requirepass 123456
3、#bind 127.0.0.1 要注释掉,允许对外连接
4、appendonly yes:开启持久化
5、# daemonize yes 一定要要注释,注释,注释!!!
之后使用如下命令启动Redis服务:
# –restart=always 总是开机启动
# –log是日志方面的
# –appendonly yes 开启redis 持久化
# –requirepass xxx 设置密码
docker run --log-opt max-size=100m --log-opt max-file=2 \
-p 6379:6379 --name redis \
-v /etc/localtime:/etc/localtime \
-v /mydata/redis/redis.conf:/etc/redis/redis.conf \
-v /mydata/redis/data:/data \
-d redis:5 redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass 123456
进入Redis容器使用redis-cli命令进行连接:
docker exec -it redis redis-cli
三、快速部署Nginx
下载Nginx1.10的docker镜像:
docker pull nginx:1.10
先运行一次容器(为了拷贝配置文件):若是不这样拷贝直接指定对应目录的话,在宿主机的conf目录下就都是为空的了
docker run --restart=always -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.10
将容器内的配置文件拷贝到指定目录:
docker container cp nginx:/etc/nginx /mydata/nginx/
进入到宿主机的/mydata/nginx目录,修改该目录下nginx文件名称:
mv nginx conf
终止并删除容器:
docker stop nginx
docker rm nginx
启动nginx:
# /usr/share/nginx/html是nginx默认访问的路径、/var/log/nginx是对应的log日志、/etc/nginx也就是对应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.10
问题
1、关于Docker启动后端口绕过防火墙问题
问题背景:我启动了多个Docker容器后,开了防火墙也能够直接访问端口。
# 查看路由表
iptables --list
# 安装lrzsz
yum install -y lrzsz
上传方式:拖拽上传到当前目录。rz -y选择上传。
下载指定文件:sz 文件路径,接着就让我们进行选择存放目录,
Docker环境安装
安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2
为yum源添加docker仓库位置:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker:
yum install -y docker-ce
启动docker:
systemctl start docker
一、快速部署MySQL
mysql-docker文档
# 官方
docker run --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -it --network some-network --rm mysql mysql -hmymysql -uroot -proot
正式快速部署:
1、下载MySQL5.7的docker镜像:
docker pull mysql:5.7
2、使用如下命令启动MySQL服务:
docker run -p 3306:3306 --name mysql \
-v /etc/localtime:/etc/localtime \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
3、将准备好的sql复制到容器中
# 复制宿主机的manage.sql到mysql容器下的/路径中
docker cp /mydata/manage.sql mysql:/
4、进入运行MySQL的docker容器:
# 在容器中创建一个新的命令行
docker exec -it mysql /bin/bash # docker exec -it mysql mysql -uroot -p # 使用mysql容器中的命令行
5、在容器中对mysql进行操作
# 使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
# 此时进入mysql的命令行中,使用数据库并进行导入
use manage;
source /manage.sql;
# 接着创建一个账户,该账号所有ip都能够访问
grant all privileges on *.* to 'changlu' @'%' identified by '123456';
注意注意:
在mysql7中有一个groupby的问题:
我们可以自定义一个my.cnf放置到/mysql/conf目录中,docker的mysql镜像源没有带配置文件,我们进行绑定之后启动mysql也就有了
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 修改添加好了之后,重启我们的docker容器
docker restart mysql
二、快速部署redis
redis镜像中默认时没有redis.conf的
参考文章:史上最详细Docker安装Redis (含每一步的图解)实战
下载Redis5.0的docker镜像:
docker pull redis:5
由于redis镜像中默认不会带redis.conf,所以若是我们想要使用配置文件来进行启动的话就需要自己去官方找redis.conf,再经过修改后放入到指定的目录,之后来容器启动时挂载即可:各个版本下载地址-redis官方
docker安装启动redis 说说那些年遇到的坑
需要修改的的点有:
1、一定要注意自己的redis版本
2、设置密码:requirepass 123456
3、#bind 127.0.0.1 要注释掉,允许对外连接
4、appendonly yes:开启持久化
5、# daemonize yes 一定要要注释,注释,注释!!!
之后使用如下命令启动Redis服务:
# –restart=always 总是开机启动
# –log是日志方面的
# –appendonly yes 开启redis 持久化
# –requirepass xxx 设置密码
docker run --log-opt max-size=100m --log-opt max-file=2 \
-p 6379:6379 --name redis \
-v /etc/localtime:/etc/localtime \
-v /mydata/redis/redis.conf:/etc/redis/redis.conf \
-v /mydata/redis/data:/data \
-d redis:5 redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass 123456
进入Redis容器使用redis-cli命令进行连接:
docker exec -it redis redis-cli
三、快速部署Nginx
下载Nginx1.10的docker镜像:
docker pull nginx:1.10
先运行一次容器(为了拷贝配置文件):若是不这样拷贝直接指定对应目录的话,在宿主机的conf目录下就都是为空的了
docker run --restart=always -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.10
将容器内的配置文件拷贝到指定目录:
docker container cp nginx:/etc/nginx /mydata/nginx/
进入到宿主机的/mydata/nginx目录,修改该目录下nginx文件名称:
mv nginx conf
终止并删除容器:
docker stop nginx
docker rm nginx
启动nginx:
# /usr/share/nginx/html是nginx默认访问的路径、/var/log/nginx是对应的log日志、/etc/nginx也就是对应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.10
问题
1、关于Docker启动后端口绕过防火墙问题
问题背景:我启动了多个Docker容器后,开了防火墙也能够直接访问端口。
# 查看路由表
iptables --list