最近觉的服务器总是怪怪的,总是报各种各样的错误,重启好了,过几天又不行了,感觉有很大的可能是装的东西多导致环境变量出问题了。我机器上装了jdk、tomcat(不止一个)、solr、mysql、MongoDB、redis等等...,虽然目前还能正常使用,但还是让我心里不舒服,万一哪天直接瘫痪了咋整?
所以,由于种种原因,我决定亲自把坑再踩一遍(这次使用Docker,以后换服务器更方便),记录在这里,以后用到方便查找。
目录
2.3、找一个最原始的redis.conf拷贝到宿主机的redis.conf中去,注意版本问题(这一步有疑问请先去学习redis,或者直接下载配置文件【点击下载】)
3.6.1、在宿主机的 /usr/local/mysql/conf 目录下新建配置文件 my.min
5.4.3、进入容器机,启动jupyter-notebook
1、Docker安装&卸载
操作系统:Centos7 (其他操作系统自己去Docker官网上看一下就可以很简单)
Centos 7安装官方教程:https://docs.docker.com/install/linux/docker-ce/centos/
1.1、安装所需的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
1.2、设置稳定的存储库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1.3、配置 启用 一些参数
sudo yum-config-manager --enable docker-ce-nightly
sudo yum-config-manager --enable docker-ce-test
sudo yum-config-manager --disable docker-ce-nightly
1.4、安装最新版dicker-ce
sudo yum install docker-ce docker-ce-cli containerd.io
1.5、启动docker
sudo systemctl start docker
1.6、配置阿里云镜像加速器
设置配置文件 `/etc/docker/daemon.json`
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxxxxxxxxliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1.7、测试是否安装成功
docker run hello-world
打印Hello from Docker! 就表示安装成功了
1.8、卸载
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2、Docker安装redis
2.1、拉取镜像
docker pull redis #拉取镜像
docker images #查看本地镜像
2.2、在宿主机创建数据卷要挂载的目录
这里我们要挂载的目录分别是:
- redis的数据存储目录
- redis的配置文件目录
#创建两个目录
mkdir -p /usr/local/redis/data & mkdir -p /usr/local/redis/redis.conf
2.3、找一个最原始的redis.conf拷贝到宿主机的redis.conf中去,注意版本问题(这一步有疑问请先去学习redis,或者直接下载配置文件【点击下载】)
将配置文件 上传到 宿主机的 /usr/local/redis/redis.conf 文件夹下
对配置文件有其他疑问,可以去看一下redis-5.0.5 配置文件详细解析:【点击这里】
2.4、修改配置文件
打开刚刚上传的 redis.conf 文件,找到 bind 127.0.0.1 将它注释掉,不然外网连接不到。
2.5、开启redis
docker run \
-p 6379:6379 \
-v /usr/local/redis/data:/data \
-v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf \
-d \
--name="myredis" \
redis \
redis-server \
/usr/local/etc/redis/redis.conf \
--appendonly yes
# -p :映射端口 宿主机向外暴露的访问端口:Docker内部redis容器的端口
# -v :数据卷 /宿主机绝对路径根目录:/容器内目录 这里是挂载了redis的数据目录 和 redis.conf配置文件夹
# -d :后台运行
# --name :容器的名字
# redis :运行的镜像
# redis-server:运行的命令
# /usr/local/etc/redis/redis.conf:运行的配置文件
# --appendonly yes : 开启aof缓存
2.6、连接docker中的redis并测试
docker ps #查看docker中当前运行的容器
docker exec -it 1743fa748ff1 redis-cli #连接docker中的redis
# -it 是以交互式的方式打开一个终端命令窗口
3、Docker安装Mysql
3.1、拉取镜像
先去Docker Hub上找想要的版本:https://hub.docker.com/_/mysql
这里演示latest的
docker pull mysql:latest
3.2、在宿主机上创建数据卷要挂载的目录
mkdir -p /usr/local/mysql/conf & mkdir -p /usr/local/mysql/logs & mkdir -p /usr/local/mysql/data
3.3、创建并运行Mysql,并挂载数据卷
docker run \
-p 3306:3306 \
--name myMysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/logs:/logs \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
# 命令说明:
# -p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
# --name myMysql:运行服务名字
#-v /usr/local/mysql/my.cnf:/etc/mysql/my.cnf :将主机/usr/local/mysql/my.cnf目录下的
# -v /usr/local/mysql/conf:/etc/mysql/conf.d :将主机/usr/local/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
# -v /usr/local/mysql/logs:/logs:将主机/usr/local/mysql目录下的 logs 目录挂载到容器的 /logs。
# -v /usr/local/mysql/data:/var/lib/mysql :将主机/usr/local/mysql目录下的data目录挂载到容器的 /var/lib/mysql
# -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码。
# -d mysql : 后台程序运行mysql
3.4、进入mysql
docker ps #查看当前docker中运行的容器
docker exec -it MySQL运行成功后的容器ID /bin/bash #进入mysql容器的终端命令控制台
mysql -u root -p #输入用户名
root #输入密码
可以看到安装已成功
可以使用快捷键 Ctrl+P+Q 退出Docker回到宿主机
3.5、修改用户名和密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'newpassword';
#更新一下用户的密码 root用户密码为newpassword
#如果不更新密码,会出现下面的连接被拒绝的错误
3.6、修改数据库默认编码集
这里以 mysql 8.0.18 版本为例 将编码集设置为utf8mb4(utf8mb4编码集一个字符占4个字节,可以表示特殊符号,如:表情)
先来看一下装好mysql原本的数据集吧。
#在docker的mysql中运行命令
mysql -uroot -p
#输入密码
root
#查看编码集
show variables like 'char%';
现在,我们的目标是将这几个设置为utf8mb4的编码集。
3.6.1、在宿主机的 /usr/local/mysql/conf 目录下新建配置文件 my.min
为什么要在这个目录下新建文件?(下面是一堆基础,会Docker就能理解,大神请跳过)
因为前面我们将这个目录挂载到Docker中mysql的 /etc/mysql/conf.d 上去了(不记得就往上翻看一看),可以认为这两个目录是同一个,修改了宿主机上的 /usr/local/mysql/conf目录,就等同于修改了Docker中mysql的 /etc/mysql/conf.d目录。
而且 mysql 在启动之前,通过一系列的配置文件中的包含等操作,最终会扫描到 /etc/mysql/conf.d 目录下的 my.min文件。所以我们在宿主机上的 /etc/mysql/conf.d下新建一个 my.min 文件,这个文件就可以被Docker中的mysql扫描到。
使用 Ctrl + P + Q 回到宿主机
执行命令:
#创建并编写配置文件
vim /usr/local/mysql/conf/my.cnf
# 输入以下的内容到文件中
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
# wq 保存并退出
3.6.2、重启Docker中的Mysql
#重新启动mysql
docker restart myMysql
#查看Docker中当前运行的容器
docker ps
3.6.3、进入Docker中的Mysql查看编码集
#进入Docker中的Mysql
docker exec -it myMysql /bin/bash
#输入用户名
mysql -uroot -p
#输入密码
root
#查看编码集
show variables like 'char%';
还有一些Mysql的其他配置这里就不详细说明了,本篇主要论怎么在Docker中安装。
4、Docker安装tomcat
4.1、从Docker Hub 拉取镜像
# 从 Docker Hub拉取镜像 镜像版本可以自己指定 docker pull tomcat:版本号 不指定默认最新
docker pull tomcat
#查看本地Docker中的镜像
docker images
4.2、创建容器并运行
这里是将Docker中的tomcat的webapps目录 挂载到 宿主机的 /usr/local/tomcat/webapps 目录下,这样以后发布项目可以直接把项目拷贝到宿主机的 /usr/local/tomcat/webapps 目录下就可以了。
当然,不挂载也是可以的,个人喜好。
docker run -d -p 8080:8080 --name myTomcat -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat
如果没有挂载,直接到外网访问 http://{IP}:8080 就可以看到tom小猫了
如果是挂载了的话,webapps下面是空的,需要添加项目进去。
5、Docker安装Anaconda3
5.1、查看并拉去镜像
#查看Docker Hub上的镜像
docker search anaconda
#选取想要安装的镜像拉去到本地
docker pull continuumio/anaconda3
#查看本地镜像
docker images
5.2、创建并运行Anaconda3容器
docker run -it --name Anaconda3 \
-p 8081:8081 \
-v /usr/local/jupyter_notebook:/usr/local/jupyter_notebook \
-v /usr/local/jupyter_notebook/config:/root/.jupyter/ \
continuumio/anaconda3 /bin/bash
# -it :以交互模式打开一个终端命令窗口
# --name :容器的名字
# -p :映射端口,后面用于jupyter-notebook使用
# -v :挂载数据卷 将宿主机的/usr/local/jupyter_notebook目录 挂载到 Docker中的Anaconda3容器的/usr/local/jupyter_notebook目录
5.3、测试
直接在Docker中的Anaconda3容器中输入命令查看python版本
python
会进入python编辑模式,说明安装正常。
5.4、配置并使用jupyter-notebook
5.4.1、生成密码:
在Docker中的Anaconda3容器中输入命令:
python #进入python命令行
from notebook.auth import passwd #导入相应的包
passwd() #生成秘钥
#然后输入密码 确认密码
#会生成一个秘钥 将它保存起来后面要使用
5.4.2、生成配置文件
在Docker中的Anaconda3容器中输入命令:
#生成 jupyter-notebook的配置文件
jupyter notebook --generate-config
这就是配置文件的位置,这也是我们前面将宿主机 /usr/local/jupyter_notebook/config 挂载到 /root/.jupyter/ 的原因
现在我们去宿主机修改配置文件
5.4.3、修改配置文件
使用 Ctrl + P + Q 可以切换到宿主机
# 打开并编辑配置文件
vim /usr/local/jupyter_notebook/config/jupyter_notebook_config.py
在文件中可以修改下面这些值(比较分散,要自己找到它们并修改):
c.NotebookApp.ip='0.0.0.0' # 指定 可访问 IP 或者 使用 0.0.0.0 则可以用任意 IP
c.NotebookApp.notebook_dir = '/usr/local/jupyter_notebook/datas' #指定工作文件夹
c.NotebookApp.open_browser = False # 关闭自动打开浏览器
c.NotebookApp.password = u'sha1:b6e292dcd871:11052b2dfce9620e6c12cadda685057111fe2f65' # 登录密码 要填前面生成的秘钥
c.NotebookApp.port = 8081 # 端口需要写前面创建Anaconda3容器是绑定的端口,然后在阿里云开对应端口的防火墙即可
新建工作目录 /usr/local/jupyter_notebook/datas
mkdir -p /usr/local/jupyter_notebook/datas
5.4.3、进入容器机,启动jupyter-notebook
# 进入容器机
docker exec -it Anaconda3 /bin/bash
# 后台运行jupyter-notebook
nohup jupyter notebook --allow-root > /usr/local/jupyter_notebook/jupyter.log 2>&1 &
通过外网访问即可:http://你的服务器IP:8081
5.4.4、补充说明
如果使用过jupyter notebook的话,就应该很清楚,我们平时所需要关心的是 jupyter-notebook 的工作目录、日志文件、配置文件这三个东西,经过以上的安装,这三个文件对应到宿主机上的位置:
宿主机 | Docker容器机 | |
工作目录 | /usr/local/jupyter_notebook/datas | /usr/local/jupyter_notebook/datas |
配置文件 | /usr/local/jupyter_notebook/config/jupyter_notebook_config.py | /root/.jupyter/jupyter_notebook_config.py |
日志文件 | /usr/local/jupyter_notebook/jupyter.log | /usr/local/jupyter_notebook/jupyter.log |
也就是说,我们如果想要更改配置,或者查看目录,直接到宿主机上的对应位置就可以操作。
6、Docker安装mongodb
6.1、拉取镜像
# 从 docker hub 上拉取镜像
docker pull mongo
# 查看当前本地的镜像
docker images
6.2、创建并运行容器并挂载数据卷
docker run \
-p 27017:27017 \
-v /usr/local/mongo/db:/data/db \
-d \
--name myMongo \
mongo
# -p 端口号映射
# -v 挂载数据卷,将宿主机的/usr/local/mongo/db目录 挂载到 容器机的/data/db
# -d 后台运行
# --name 给容器起个名字
6.3、远程连接并使用
在服务器将 27017 端口开放,然后使用桌面工具连接即可。