服务器环境:centos7
一、docker安装
1.1 安装
# step 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CEsudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务sudoservice docker start注意:其他注意事项在下面的注释中 # 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。# vim /etc/yum.repos.d/docker-ce.repo# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1## 安装指定版本的Docker-CE:# Step 1: 查找Docker-CE的版本:# yum list docker-ce.x86_64 --showduplicates | sort -r# Loading mirror speeds from cached hostfile# Loaded plugins: branch, fastestmirror, langpacks# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable# Available Packages# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)# sudo yum -y install docker-ce-[VERSION]# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。# yum list docker-ce-selinux- --showduplicates | sort -r# sudo yum -y install docker-ce-selinux-[VERSION]# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令# 经典网络:# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo# VPC网络:# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
1.2 配置加速镜像
配置阿里云的加速镜像
sudomkdir-p /etc/docker sudotee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["加速镜像地址"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
二、docker中安装mysql
2.1 查询mysql的各个版本
docker search mysql
2.2 拉取镜像
通过pull
命令去拉取镜像,默认拉取的是latest版本,可以通过冒号来指定版本,如拉取5.7版本的mysql
docker pull mysql:5.7
可以通过https://hub.docker.com/_/mysql
去查询版本号
2.3 查看拉取的镜像
docker images
2.4 新建一个mysql的配置文件
要运行mysql
,执行docker run
一下就可以了
但是,我们希望做一些配置,如:指定数据库data的存放位置,不区分大小写
这是我们新建一个my.cnf
mkdir-p /data/mysql/config vim my.cnf
在my.cnf
中添加参数
[mysqld] user=mysql sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION lower_case_table_names=1event_scheduler=ON default-time-zone ='+8:00'
其中
- event_scheduler=ON 表示开启事件支持
- lower_case_table_names=1 表示数据库不区分大小写
- default-time-zone = '+8:00' 表示使用中国时区
2.5 docker运行mysql
docker run -d-p3306:3306 -eMYSQL_ROOT_PASSWORD=123456--name mysql -v /data/mysql/config/my.cnf:/etc/mysql/my.cnf -v /data/mysql/db:/var/lib/mysql mysql:5.7
各个参数的说明
- run:运行一个容器
- -d:设置容器运行模式为后台运行
- -p:进行端口映射,用于暴露给外界让其访问
- -e:初始化用户密码
- --name:自定义容器名称
- -v:挂载
- 第一个-v:挂载我们自定义的配置文件
- 第二个-v:挂载数据库的data存放位置
2.5.1 docker中mysql的时区修改
不知道为什么上面的指定参数default-time-zone = '+8:00'没有生效
找了其他几种方法吧
- 启动容器时设置
-eTZ=Asia/Shanghai
- 容器内永久修改
# 进入容器docker exec -it mysql bash# 查看当前时区date -R# 修改时区cp /usr/share/zoneinfo/PRC /etc/localtime # 或者ln-sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 退出容器exit# 重启容器docker restart mysql
- mysql中临时修改,重启失效
# 查看时间 select now();# 修改为北京时间 mysql>set global time_zone ='+8:00';Query OK,0 rows affected (0.00 sec)mysql>set time_zone ='+8:00';Query OK,0 rows affected (0.00 sec)mysql> flush privileges;Query OK,0 rows affected (0.00 sec)
2.6 查看运行的容器
使用
docker ps
查看,类似于linux
的ps
,查看全部使用docker ps -a
进入容器内部,使用mysql
的相关命令
# 进入容器名称为mysql的内部docker exec -it mysql /bin/bash mysql -uroot-p# 在mysql的命令行中进行操作show databases; # 退出exit
2.7 mysql相关配置
2.7.1 创建一个用户
创建一个用户,如:testuser/123456
# 限定的IP地址,可以用通配符%替换,代表任何IP都可以 mysql>CREATE USER 'testuser'@'限定的IP地址' IDENTIFIED BY'123456';2 Query OK,0 rows affected (0.02 sec)# 设置这个用户的登录权限 # 设置testuser用户允许本地登录 grant all privileges on*.* to testuser@localhost identified by"123456";# 设置testuser用户允许任何任何ip登录 grant all privileges on*.* to testuser@"%" identified by"123456";# 进行flush # mysql新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表 # 否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效 flush privileges;
2.7.2 设置用户的数据库访问权限
# 设置用户testuser,只能访问数据库test_db的表user_infor # *.*代表任何数据库的任何表 # 数据库中的其他表均不能访问 ; grant all privileges on test_db.user_infor to testuser@localhost identified by"123456";
2.7.3 设置用户操作权限
# 设置用户testuser,拥有所有的操作权限,也就是管理员 ; grant all privileges on*.* to testuser@localhost identified by"123456" WITH GRANT OPTION;# 设置用户增删改查的权限 grant select,insert,update,deleteon*.* to testuser@localhost identified by"123456";
2.7.4 关闭root用户的远程登录
# 切换到mysql数据库 use mysql;deletefrom user where user ='root'and host ='%';select user,host from user;#刷新权限 flush privileges ;
2.8 其他相关
# 查看容器docker container ls# 查看所有容器docker container ls-a# 删除容器docker rm [容器名称or容器的id] docker rm mysql docker rm 88f9f37e7de8 # 删除容器前先关闭容器docker stop mysql # 删除镜像,同样删除镜像之前需要stop依赖这个镜像的容器docker rmi [image id]
2.9 在安装过程中遇到的坑
在run
一个容器时,发现没有网络
查了一番之后,说是没有开启转发,网桥配置完之后,需要开启转发,不然容器启动后,就没有网络,配置/etc/sysctl.conf
,添加net.ipv4.ip_forward=1
# 编辑文件vim /etc/sysctl.conf # 配置转发net.ipv4.ip_forward=1# 重启服务,让配置生效systemctl restart network # 查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功sysctl net.ipv4.ip_forward # 重启docker服务service docker restart