昨天突然想到可以在我的博客中添加自己的公众号呀,然后我就修改了第一篇文章,打算在结尾家上我自己公众号的二维码,但是提交后没有通过审核,说我打广告。那只能自己手动推荐一波了,欢迎大家关注我的公众号“风云编程录”,感谢大家🙏。
上一篇中我们已经通过Vagrant安装好了centos7的虚拟机,以及配置好了相应的网络配置。今天我们继续努力,下载安装好我们的docker。
1.docker安装
(1)清除对应docker镜像
安装之前先清除,是一个好习惯,避免以前曾经安装的版本对现在有影响。就像SQL语句增加之前先删除,insert之前先delete。
由于登陆使用的用户是vagrant,需要采用高权用户执行下面的命令
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(2)安装docker依赖的工具包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
(3)设定docker下载地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
(4)开始下载docker
sudo yum -y install docker
(5)启动docker
sudo systemctl start docker
2.docker部分命令使用
(1)查看docker版本
[vagrant@localhost ~]$ docker -v
Docker version 1.13.1, build 7d71120/1.13.1
(2)查看当前所有镜像,当然我们现在还没有安装任何镜像
[vagrant@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
(3)设置docker开机自启动
默认docker不是开机自启动,每次虚拟机开机后,需要重新调用 sudo systemctl start docker 启动docker
[vagrant@localhost ~]$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
至此,docker安装完成。
3. 配置国内阿里云镜像加速
由于docker hub属于国外的网站,下载镜像速度比较慢,我们可以配置一个国内的阿里云镜像加速,加快docker镜像的下载速度。
登陆阿里云官方网站,产品中搜索镜像加速服务,我把具体的配置放到下面了:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://09ug4tv4.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4. docker安装mysql
我们此处使用的是5.7版本的mysql镜像。
(1)使用命令 sudo docker pull mysql:5.7下载5.7版本的docker镜像。
[vagrant@localhost ~]$ sudo docker pull mysql:5.7
Trying to pull repository docker.io/library/mysql ...
5.7: Pulling from docker.io/library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for docker.io/mysql:5.7
(2)切换到root用户
因为好多命令都是需要管理员权限才能进行操作,所以我们直接将用户从vagrant切换到root用户,root用户的密码与vagrant的密码相同,都是vagrant
su root
(3)下载完成后,查看镜像文件
[root@localhost vagrant]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7 c20987f18b13 10 months ago 448 MB
可以看到我们已经下载了5.7版本的mysql镜像。
(4)启动mysql的docker镜像
我是直接使用的视频中相同的配置,启动mysql镜像。
[root@localhost vagrant]# docker run -p 3306:3306 --name mysql \
> -v /mydata/mysql/log:/var/log/mysql \
> -v /mydata/mysql/data:/var/lib/mysql \
> -v /mydata/mysql/conf:/etc/mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> -d mysql:5.7
55859bab5ad6cf21ec00c21529d33205a8cf6c87bfb2c4310e38d48ed5f3a441
具体的配置含义如下:
但是,在这里我遇到了一个问题,没有启动成功!!!!
问题解决:
(1)报错:chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied
视频中,老师紧急着使用命令查看docker ps查看已经启动的mysql,但是我使用docker ps查看毛都没有?????
[root@bogon vagrant]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
然后我又找到一个命令,docker ps -a可以查看当前所有的镜像,我查看了一下情况如下:
[root@bogon vagrant]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4055d0fa8ae7 mysql:5.7 "docker-entrypoint..." 7 minutes ago Exited (1) 7 minutes ago mysql
可以看到我的docker曾经想启动mysql,但是异常退出了。
我一开始怀疑的原因是,我的电脑上已经启动了mysql,因为配置了端口映射,docker中的mysql也会映射到外部操作系统上的3306端口,因为端口冲突,导致启动失败了。所以我把系统上的mysql关闭了。
经过一番努力,我又采用相同的配置,重新启动mysql,又失败了,因为镜像重复了。我已经创建过名称是mysql的镜像。
又学到一条命令 docker rm mysql,我使用这条命令,将我已有的mysql删掉,重新启动,然后又失败了。
当然又学到一条命令
docker logs mysql(容器名) 查看日志.
[root@bogon vagrant]# docker logs mysql
2022-11-09 14:22:04+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
chown: changing ownership of '/var/lib/mysql/': Permission denied
说我对/var/lib/mysql目录没有权限,我才想起来,我的电脑是mac,而且我用的不是管理员账户,我自己创建了一个低权限账号单独做编程,但是挂载的这些目录的属主都是root用户,也就是mysql的这些目录我选择挂载的目录,当前用户没有访问权限。所以我将上面启动的命令稍作修改,将挂载目录都修改了一下。
具体的命令如下:
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/Users/GodShadow/mydata/mysql/log \
-v /mydata/mysql/data:/Users/GodShadow/mydata/mysql/data \
-v /mydata/mysql/conf:/Users/GodShadow/mydata/mysql/conf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
此时,再查看我们的活跃进程:
[root@bogon vagrant]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e6e429ccc32 mysql:5.7 "docker-entrypoint..." 32 seconds ago Up 31 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
后面有伏笔哈,其实问题没有解决!!!!!
(2)测试mysql联通性
安装完成后,我们从主操作系统测试一个是否可以联通到docker中的mysql,不出所料,又失败了。我通过navicat测试失败了。
我查看了一下,发现了一个问题,我的虚拟机在启动了docker之后,新建了一个docker0的网卡,因为mysql启动了,我查看了一下3306端口的启动情况,发现3306是由一个172.17.0.2的ip在监听,这个ip很明显可以看到是docker0网卡同一个网段的地址
[root@localhost vagrant]# ps -ef | grep 3306
root 2494 2365 0 07:11 ? 00:00:00 /usr/libexec/docker/docker-proxy-current -proto tcp -host-ip 192.168.56.100 -host-port 3306 -container-ip 172.17.0.2 -container-port 3306
root 2801 1901 0 07:18 pts/0 00:00:00 grep --color=auto 3306
具体关于docker0网卡的问题,其实比较复杂,这里我也不赘述了,具体解决方法我使用了一个比较讨巧的方式,在mysql启动的时候我使用了指定ip:port的端口映射模式,将对mysql的访问映射到了虚拟机(192.168.56.100)的3306端口上,然后测试通过
docker run -p 192.168.56.100:3306:3306 --name mysql \
-v /mydata/mysql/log:/Users/GodShadow/mydata/mysql/log \
-v /mydata/mysql/data:/Users/GodShadow/mydata/mysql/data \
-v /mydata/mysql/conf:/Users/GodShadow/mydata/mysql/conf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
然后我们查看docker进程
[root@localhost vagrant]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59bf0aa8b669 mysql:5.7 "docker-entrypoint..." 14 minutes ago Up 14 minutes 192.168.56.100:3306->3306/tcp, 33060/tcp mysql
我们可以看到与原先启动的mysql有明显的差别,原先启动的mysql ip是0.0.0.0,现在已经变成了虚拟机的IP(192.168.56.100)。
(3)报错:chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied 第二弹
后面仔细翻阅资料,发现我理解错了,docker启动时候的参数配置如下:
docker run -p 3306:3306 --name mysql
-v /mydata/mysql/master/log:/var/log/mysql
-v /mydata/mysql/master/data:/var/lib/mysql
-v /mydata/mysql/master/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7
参数说明
-p 3306:3306 将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/master/conf:/etc/mysql ;将配置文件夹挂载到主机上
-v /mydata/mysql/master/log:/var/log/mysql:将日志文件夹挂载到主机上
-v /mydata/mysql/master/data:/var/lib/mysql:将数据文件夹挂载到主机上
-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
其中挂载文件地方,其实是/etc/mysql内部的mysql文件,我们为了方便修改,挂接到了linux服务器对应目录下,我理解反了。我上面把这些目录都配置成/Users/GodShadow/mydata下的目录,由于mysql安装目录中就没有这些目录,启动mysql倒是没有影响,但是没有达到人家所需要的含义,方便在linux上修改对应的docker中mysql的配置文件。
我主要是参考这篇博客解决的问题:
chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied_mischen520的博客-CSDN博客
我还通过测试,发现也不用进行ip:port这种映射模式了,我真是emo了。最后给出最终的mysql启动命令行如下:
docker run -p 3306:3306 --privileged=true --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
docker容器内进程状态如下:
[root@localhost vagrant]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b08e8409b41 mysql:5.7 "docker-entrypoint..." 13 minutes ago Up 13 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
当然联通性测试也OK了。
至此,docker安装以及安装mysql的docker镜像的内容已经完成。