docker安装mysql、elasticsearch、redis
mysql
1、创建mysql要挂载的数据卷,docker的卷一般在/var/lib/docker/volumes目录下
docker volume create mysql-data
2、拉取mysql镜像
docker pull mysql
3、运行容器,并将创建的卷挂载到mysql容器,端口映射,密码不要太复杂
docker run -d \--name=mysql \-p 3306:3306 \-v mysql-data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=1234 mysql# -d 后台运行
# -p 宿主机端口:容器内部服务端口 端口映射
# -v 宿主机数据目录:容器内部数据目录 数据卷挂载docker run -d --name=mysql -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 mysql
es
1、拉取es镜像,这里选择一个比较稳定的版本 elasticsearch:7.12.1
2、运行容器,挂载数据卷,端口映射
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/local/elasticsearch7.12.1/data \-v es-plugins:/usr/local/elasticsearch7.12.1/plugins \-v es-logs:/usr/local/elasticsearch7.12.1/logs \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1
redis
1、创建redis要挂载的数据卷
mkdir /home/redis
touch /home/redis/redis.conf
docker volume create redis-data
2、修改redis.conf文件,设置密码
requirepass: 1234
3、运行容器
docker run \--name redis \-p 6379:6379 \-v redis-data:/data \-v /home/redis/redis.conf:/etc/redis/redis.conf \-e REDIS_PASSWORD=1234 \-d redis redis-server /etc/redis/redis.confdocker run --name redis -p 6379:6379 -v redis-data:/data -v /home/redis/redis.conf:/etc/redis/redis.conf -e REDIS_PASSWORD=1234 -d redis redis-server /etc/redis/redis.conf
nginx
1、创建挂载数据卷
# 存放conf.d/* nginx.conf等配置文件
mkdir -p /home/nginx
# 存放dist
mkdir -p /home/xrc/nginx
# 存放后端uploads文件
2、先将一个nginx容器的配置文件复制到宿主机数据卷
docker run --name nginx -p 9001:80 -d nginxdocker cp nginx:/etc/nginx /home/nginx
在 /home/nginx/conf.d/default.conf 文件中修改你的配置
以下是我的配置修改
server {listen 80; listen [::]:80; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { try_files $uri $uri/ /index.html;root /usr/share/nginx/html; index index.html index.htm; } # 将/api下的请求转发到后端 location /api/ { proxy_pass http://127.0.0.1:8080/api/;proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # rewrite ^/api/(.*)$ /$1 break; } location /uploads/ {alias /opt/gvb/server/uploads/;}error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }
}
3、删除原来的容器,并运行一个新的nginx容器
如果你nginx配置转发后端的api服务的ip地址写的是127.0.0.1,那么就最好指定网络模式--netword host,否则容器默认使用bridge模式,这样会导致转发指定的127不会是宿主机,而是本nginx容器,但是后端服务又不在nginx容器里面,而是在宿主机中,所以我这里指定了host网络模式,通常是不需要指定-p端口映射的,而是直接与宿主机关联
docker rm nginxdocker run -d \--name nginx \-v /home/nginx/conf.d:/etc/nginx/conf.d \-v /home/nginx/nginx.conf:/home/nginx/nginx.conf \-v /home/xrc/nginx/dist:/usr/share/nginx/html \-v /www/server/go_project/gvb_ser/uploads:/opt/gvb/server/uploads \--network host \--restart=always \nginx