MySQL部署
需求:在Docker容器中部署MySQL,并通过外部MySQL客户端操作MySQL Server
首先明确一下几点:
- 容器内的网络服务和外部机器不能直接通信
- 外部机器和宿主机可以直接通信
- 宿主机和容器可以直接通信
因此,我们进行一个端口映射,如下图,外部容器访问3307端口,就映射到3306端口
步骤:
- 搜索MySQL镜像 docker search mysql
- 拉取MySQL镜像 docker pull mysql:5.7
- 创建容器
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
参数说明:
- -p 3307:3306 将容器的3306端口映射到宿主机的3307端口
- -v $PWD/conf:/etc/mysql/conf.d 将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf 。配置目录
- -v $PWD/logs:/logs 将主机当前目录下的logs目录挂载到容器的/logs。日志目录
- -v $PWD/data:/var/lib/mysql 将主机当前目录下的data目录挂载到容器的/var/lib/mysql 。数据目录
- -e MYSQL_ROOT_PASSWORD=root 初始化root用户的密码
5. 操作容器中的mysql
远程连接MySQL(本机Navicat)
如果使用阿里云服务器,则需要配置安全组规则。
Tomcat部署
需求:在Docker容器中部署Tomcat,并通过外部机器访问Tomcat部署的项目
实现步骤:
- 搜索tomcat镜像 docker search tomcat
- 拉取tomcat镜像 docker pull tomcat
- 创建容器
mkdir ~/tomcat cd ~/tomcat
docker run -id --name=c_tomcat \ -p 8080:8080 \ -v $PWD:/usr/local/tomcat/webapps \ tomcat # -v $PWD:/usr/local/tomcat/webapps将主机中当前目录挂载到容器的webapps
- 部署项目
直接把项目扔到tomcat目录访问,若使用阿里云服务器,那么外部访问时要添加安全组规则
Nginx部署
基本需求和搜索拉取镜像步骤同上。
创建容器步骤如下
mkdir nginx
cd nginx
mkdir conf
cd conf
vim nginx.conf
# 在nginx.conf下添加如下内容
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
配置完成后,返回到nginx目录开始创建
docker run -id --name=c_nginx -p 80:80\
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf\
-v $PWD/logs:/var/log/nginx\
-v $PWD/html:/usr/share/nginx/html\
nginx
Redis部署
基本需求和搜索拉取镜像步骤同上。
- 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis
- 使用外部机器连接Redis (阿里云服务器要先配置安全组规则):进到本机Redis目录里打开dos窗口输入一下命令
redis-cli.exe -h 101.37.19.90 -p 6379
方法二:配置文件启动
①创建配置文件目录存放redis.conf,文件从官网下载。
②创建文件夹,新建配置文件贴入从官网下载的配置文件并修改
mkdir /usr/local/docker
vi /usr/local/docker/redis.conf
③修改启动默认配置(从上至下依次):
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
databases 16 #数据库个数(可选),我修改了这个只是查看是否生效。
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
④官方启动命令:
docker run -p 6379:6379 --name redis -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
命令解释说明:
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
--name myredis 指定该容器名称,查看和进行操作都比较方便。
-v 挂载目录,规则与端口映射相同。
为什么需要挂载目录:个人认为docker是个沙箱隔离级别的容器,这个是它的特点及安全机制,不能随便访问外部(主机)资源目录,所以需要这个挂载目录机制。
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
--appendonly yes 开启redis 持久化
Redis最佳启动步骤:https://blog.csdn.net/qmqm33/article/details/105891985