商城项目--2.docker相关

昨天突然想到可以在我的博客中添加自己的公众号呀,然后我就修改了第一篇文章,打算在结尾家上我自己公众号的二维码,但是提交后没有通过审核,说我打广告。那只能自己手动推荐一波了,欢迎大家关注我的公众号“风云编程录”,感谢大家🙏

上一篇中我们已经通过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镜像的内容已经完成。

欢迎大家关注我的公众号“风云编程录”,感谢大家🙏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值