Docker安装
-
查看自己的linux的系统版本,检查系统是否满足安装要求
uname - r
可选: 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
-
安装 Docker CE
curl -fsSl https://get.docker.com -o get-docker.sh
此处的docker ce为社区版,如果是花钱购买,还有docker ee
-
通过docker-ce 安装docker
sudo sh get-docker.sh
-
测试docker是否安装正常
docker -v
-
可能会出现的问题:docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
解决方法: 出现此错误是因为安装后,docker没有启动,需要使用
systemctl start docker
来启动docker 6.如果使用docker pull
命令拉取镜像过慢或者超时,需要配置镜像源,具体步骤如下1.使用
docker info
观察是否有registry 开头的键值对,如果有使用vim /etc/docker/daemon.json
来修改镜像源2.执行追加写入命令
tee /etc/docker/daemon.json <<-'EOF'
写入的内容:
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
以
EOF
结尾结束追加内容3.重新加载配置
sudo systemctl daemon-reload
4.重启docker服务
sudo systemctl restart docker
Docker安装Mysql
- 拉取mysql镜像
docker pull mysql
- 查看拉取成功的镜像
docker images
- 运行镜像:
sql
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/loacl/mysql/conf.d:/etc/mysql/conf.d\
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
--命令解释--
-p 3306:3306:指定宿主机端口与容器端口映射关系
name mysql:创建的容器名称
restart=always:总是跟随docker启动
privileged=true:获取宿主机root权限,真实环境避免设置,防止容器逃逸越权
-v /usr/local/mysql/log:/var/log/mysql:映射日志目录,
-v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,
-v /usr/local/mysql/conf:/etc/mysql:映射配置目录,
-v /etc/localtime:/etc/localtime:ro:时钟同步,避免时区的问题,ro是只读的意思,
-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
-d mysql:latest:后台运行mysql容器,版本是latest。
-
如果容器启动显示exit ,需要执行命令
docker logs -f mysql
来查看错误日志。 -
进入挂载数据卷的位置
cd /usr/local/mysql
,创建my.inf配置文件vim my.inf
- my.inf写入内容:
inf[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] # 设置东八区时区 default-time_zone = '+8:00' # 设置密码验证规则,default_authentication_plugin参数已被废弃 # 改为authentication_policy #default_authentication_plugin=mysql_native_password authentication_policy=mysql_native_password # 限制导入和导出的数据目录 # 为空,不限制导入到处的数据目录; # 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录; # 为NULL,禁止导入与导出功能 #secure_file_priv=/var/lib/mysql secure_file_priv= init_connect='SET collation_connection = utf8mb4_0900_ai_ci' init_connect='SET NAMES utf8mb4' character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci skip-character-set-client-handshake skip-name-resolve
-
重启mysql容器,刷新配置
docker restart mysql
-
授权远程登录权限
- 进入容器内部
docker exec -it mysql /bin/bash
- 进入mysql
mysql -u root -p
- 切换至mysql系统库
use mysql
- 查询远程登录root用户的权限
select user,host from user;
- 看是否出现
%
权限,如若都是localhost权限则是属于没有授权远程登录 - 授权
ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '密码';
因为mysql8.0版本默认是caching_sha2_password密码规则,不修改无法使用客户端连接,因为客户端通常使用的都是mysql_native_passwor。 - 刷新权限
FLUSH PRIVILEGES;
- 此时通过客户端就可以连接服务器上的mysql镜像了。
- 进入容器内部
可能遇到的问题
- 执行进入容器的命令无法退出容器,请使用组合键ctrl+p+q 或者exit。
- 经过一系列操作发现自己还是无法再客户端连接mysql,请检查云服务器是否开放端口3306
- 查看或监测容器镜像的命令,
docker ps -a
检查容器运行状态,启动镜像docker start 镜像名称
- 请在未使用root用户的前提下,遇到问题多使用
su
命令开头加待执行命令