1. 序言

将应用容器化更方便于管理,昨天辛辛苦苦安装在宿主机上的,今天狠心重置服务器,学下docker练练手。

2. Get start

2.1 安装Docker

公司的云用的是ubuntu,我自己的用的是centos,不过都差不多,在Runnoob上有详细的教程,可以在这里查看

2.2 安装mysql

在 / 目录下执行 mkdir -p /mysql/{conf.d,mysql} 可以根据喜好改名,主要是挂载一些配置文件。

执行以下命令:

  1. docker run --name mysql \
  2. --restart=always \
  3. -p 3306:3306 \
  4. -v /mysql/conf.d:/etc/mysql/conf.d \
  5. -v /mysql/mysql:/var/lib/mysql \
  6. -e MYSQL_ROOT_PASSWORD=<你的root密码> \
  7. mysql

如果你的镜像库中没有mysql,docker会自动下载,注意,默认下载最新版本,可以通过加 -d mysql : <版本号> 的方式,或者提前pull指定版本的数据库安装。

我直接安装了最新的版本,目前是8.0.18,但是有个问题,新版本数据库需要设置native password才可以远程登录。

接下来进入数据库,开一个用户,设置上面说到的东西吧。

  1. docker exec -it mysql bash
  2. mysql -p
  3. --输入密码
  4. create user '<想要的用户名>'@'%' identified by '<密码>';
  5. grant all on *.* to '<上面那个用户名>'@'%';
  6. flush privileges;
  7. alter user '<上面那个用户名>'@'%' identified by '<密码>' password expire never;
  8. alter user '<上面那个用户名>'@'%' identified with mysql_native_password by '<密码>';
  9. flush privileges;

之后就可以用navicat等工具在远程登录了。

2.3 安装Nginx

安装mysql并没有耗我太多时间,但是nginx的坑可真多啊。

首先我在根目录下创建一个文件夹,用于挂在配置文件。

  1. mkdir -p /nginx/{conf,conf.d,log,dist}

conf: 用于放主配置文件

conf.d: 用于放一些主配置文件下拆出来的东西

log: 放logs

dist: 其实一般叫做html比较好,用于存放打包的文件,叫dist可以直接拉过来不用改名了

然后在conf里写一个nginx.conf

  1. touch nginx.conf
  2. vim nignx.conf

写入:


  1. user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. include /etc/nginx/conf.d/*.conf;
  20. }

在conf.d中添加一个随便叫什么都可以的.conf

  1. touch default.conf
  2. vim default.conf

写入:

  1. server {
  2. listen 80;
  3. server_name localhost;
  4. #charset koi8-r;
  5. #access_log /var/log/nginx/host.access.log main;
  6. location / {
  7. root /usr/share/nginx/html;
  8. index index.html index.htm;
  9. }
  10. #error_page 404 /404.html;
  11. # redirect server error pages to the static page /50x.html
  12. #
  13. error_page 500 502 503 504 /50x.html;
  14. location = /50x.html {
  15. root /usr/share/nginx/html;
  16. try_files $uri $uri/ /index.html;
  17. }
  18. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  19. #
  20. #location ~ \.php$ {
  21. # proxy_pass http://127.0.0.1;
  22. #}
  23. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  24. #
  25. #location ~ \.php$ {
  26. # root html;
  27. # fastcgi_pass 127.0.0.1:9000;
  28. # fastcgi_index index.php;
  29. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  30. # include fastcgi_params;
  31. #}
  32. # deny access to .htaccess files, if Apache's document root
  33. # concurs with nginx's one
  34. #
  35. #location ~ /\.ht {
  36. # deny all;
  37. #}
  38. }

写完了之后就好了,创建nginx容器。

  1. docker run --name nginx -d -p 80:80 \
  2. -v /nginx/log:/var/log/nginx \
  3. -v /nginx/conf.d:/etc/nginx/conf.d \
  4. -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  5. -v /nginx/dist:/usr/share/nginx/html nginx

分别把配置文件和静态文件目录挂载。

这里直接映射到了80端口,如果有冲突的话,可以改成别的。

做到这里如果一切正常,那么应该成功了。

  • 编辑,当需要在一个nginx中暴露多个端口部署多个站点时,可以-p -p一直开下去
  1. docker run --name nginx -d -p 80:80 -p 443:443 \
  2. -v /nginx/cert:/cert \
  3. -v /nginx/log:/var/log/nginx \
  4. -v /nginx/conf.d:/etc/nginx/conf.d \
  5. -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  6. -v /nginx/dep:/usr/share/nginx/html nginx

坑点

  • 不知道配置文件的格式,虽然和昨天的配置差不多,但是还是希望看到新的配置文件, 解决方案:
  1. 先安装一个不设置挂载的nginx容器
  2. 使用docker cp 把这两个文件copy到宿主机上

    如果你的网速够快,可以apt-get update apt-get install vim-tiny, 然后vi打开配置文件直接复制出来(并不推荐,但是我是这么做的)
  • 刷新404

这好像是Vue项目的问题,其他不知道会不会有这种问题,因为每次刷新相当于请求那个url的文件,肯定是不存在的,也不可能拦截所有/~,解决方案也很优雅,添加 try_files $uri $uri/ /index.html; 就可以了。(上面已加)

  • 还有遇到问题的话,一定要看一下docker log。我所有都配置完成后,发现启动nginx闪退,也没有报错,看了log才知道它报了不识别erver。。。才发现少写了个s,坑啊。大家复制一定要仔细,不要漏东西。

Docker安装Mysql和Nginx的更多相关文章

  1. Docker安装mysql、nginx、redis、tomcat

    拉取mysql 5.7官方镜像 docker pull mysql:5.7 启动容器 docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PAS ...

  2. 【Linux】【自学笔记】Linux下面docker安装mysql

    写在前面: 捣腾继续,之前把一个SpringBoot的程序安装在docker上面,参考链接:https://www.cnblogs.com/aki-stones/p/2019-11-01-note.h ...

  3. docker初识-docker安装、基于docker安装mysql及tomcat、基本命令

    一.docker是什么 用go语言开发,开源的应用容器引擎,容器性能开销极低 二.整体架构图 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 r ...

  4. 使用Docker安装Mysql

    最近使用阿里云服务器,学习一下Docker,今天学着使用Docker安装MySQL. 首先,从阿里云的Docker Hub 上pull一个MySQL的image. [centos@loovelj~]$ ...

  5. Docker学习实践 - Docker安装MySql数据库

    Docker安装MySQL数据库 1.Ubuntu安装MySQL安装 (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libnc ...

  6. 使用docker安装mysql和redis

    本文介绍在linux下使用docker安装mysql和redis. 原文地址:代码汇个人博客 http://www.codehui.net/info/59.html 测试环境:centos7.6,do ...

  7. 解决Docker安装MySQL不区分大小写问题

    Docker安装MySQL忽略大小写问题的问题连接MySQL: 查看当前mysql的大小写敏感配置 show global variables like '%lower_case%'; +------ ...

  8. [转]Docker学习之四:使用docker安装mysql

    本文转自:https://blog.csdn.net/qq_19348391/article/details/82998391 Docker学习之一:注册Docker Hub账号 Docker学习之二 ...

  9. SpringBoot Docker Mysql安装,Docker安装Mysql

    SpringBoot Docker Mysql安装,Docker安装Mysql ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...

随机推荐

  1. 【VS开发】【电子电路技术】PCI与PCIE主板插卡与插槽识别

    一.PCI PCI接口分为32bit和64bit两种,32bit就是一般台式机使用的普通的pci接口(图一.图三),64bit接口比32bit接口长一些一般只出现在服务器上(图四.图五).32bit和 ...

  2. Autofac依赖注入容器

    依赖注入容器-- Autofac https://github.com/danielpalme/IocPerformance Unity 更新频率高,微软的项目Grace 综合性能更高 目录: 一.简 ...

  3. dstat 好用的命令 cpu mem io

    1.dstat dstat -lrpm --top-io --top-mem --top-cpu 2.安装 yum -y install dstat

  4. 关于.Net Core+Angular+Ueditor富文本编辑器的使用方式

    博客:https://www.cnblogs.com/24klr/ 资料:https://www.jianshu.com/p/0b21a1324d47 GitHub:https://github.co ...

  5. Emgu 学习之HelloWorld

    安装和配置 系统Win10,VS2013,下载Emgu安装包libemgucv-windesktop-3.4.3.3016 安装到了E:\OpenCV\emgucv-windesktop 3.4.3. ...

  6. Vue 中 $attrs 的使用

    名词解释: $attrs--继承所有的父组件属性(除了prop传递的属性.class 和 style ) inheritAttrs:默认值true,继承所有的父组件属性(除props的特定绑定)作为普 ...

  7. Linux-1.5日志查看常用命令

    常访问的日志目录:\data\log\(message系统 | secure安全 | maillog邮件) 进入日志目录 find \d1\data\log -name '*log' 在目录下查找以l ...

  8. solr学习笔记-增加mmesg4J中文分词

    solr版本6.1.centos6.7.mmesg4j版本2.30 solr安装目录:/usr/local/solr-6.1.0 1.下载mmesg4j包: 地址:https://github.com ...

  9. 使用zookeeper报错 stat is not executed because it is not in the whitelist. envi is not executed because it is not in the whitelist.

    在使用四字命令或者zk ui界面查看zookeeper集群时,出现如下提示: stat is not executed because it is not in the whitelist. envi ...

  10. All shortest paths between a set of nodes

    .big{font-size:larger} .small{font-size:smaller} .underline{text-decoration:underline} .overline{tex ...