基本的概念
数据卷就是宿主机上的一个文件或目录
当容器目录和数据卷(宿主机)目录绑定,双方修改会立即同步操作
一个数据卷可以被多个容器同时挂载
数据卷作用:容器数据的持久化 外部机器和容器间接通信 容器之间数据交换使用 -v命令。
数据卷添加的方式
容器内与宿主机实现数据的共享
数据卷--添加两种方式
1. 直接命令形式添加 docker run -it -v 宿主机绝对路径目录:容器内目录 镜像文件名称
2. Dockerfile方式添加
一、部署MySQL
搜索mysql镜像
docker search mysql
拉取mysql镜像
docker pull mysql
创建容器,设置端口映射、目录映射
# 在/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
$PWD:将当前目录获取到
\:命令可以换行使用
docker run -id \
-p 3307:3306 \
--name=c_mysql \
mysql
注意端口是 3307
配置远程连接:
alter user 'root'@'%' identified with mysql_native_password by 'root';
flush privileges;
参数说明:
-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=123456:初始化 root 用户的密码。
进入容器,操作mysql
docker exec -it c_mysql /bin/bash
使用外部机器连接容器中的mysql
密码是root
![](https://i-blog.csdnimg.cn/blog_migrate/f0d69e757c743deda9349f8292e34415.png)
二、部署Tomcat
搜索tomcat镜像
docker search tomcat
拉取tomcat镜像
docker pull tomcat
创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
参数说明:
-p 8080:8080:将容器的8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps
使用外部机器访问tomcat
![](https://i-blog.csdnimg.cn/blog_migrate/040f82cf938f40e4a162739d988784ea.png)
三、部署Nginx
搜索nginx镜像
docker search nginx
拉取nginx镜像
docker pull nginx
创建容器,设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir /nginx
cd /nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
server {
listen 80;
server_name localhost;
location / {
root /home/;
index index.html index.htm;
add_header 'Access-Control-Allow-Origin' *;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
cd /nginx
参数说明:
-p 81:80:将容器的 80端口映射到宿主机的 81 端口。
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录
-v $PWD/logs:/var/log/nginx:将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录
使用外部机器访问nginx
![](https://i-blog.csdnimg.cn/blog_migrate/f3105e69a53725243a4497259674cb68.png)
四、部署Redis
搜索redis镜像
docker search redis
拉取redis镜像
docker pull redis
创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis
使用外部机器连接redis
./redis-cli.exe -h 192.168.149.135 -p 6379
五、挂载redis
创建redis.conf
/data/redis/redis.conf
#开启保护
protected-mode yes
#开启远程连接
#bind 127.0.0.1
#自定义密码
requirepass 12345678
port 6379
timeout 0
# 900s内至少一次写操作则执行bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec
执行命令
docker run -id -p 6399:6379 \
-v /data/redis/redis.conf:/etc/redis.conf \
redis \
redis-server /etc/redis.conf --appendonly yes