docker mysql8.0镜像出现的问题以及解决方法

docker mysql8.0镜像出现的问题以及解决方法,第1张

本次安装,没有选择现成的镜像,从docker的github上,把dockerfile搞到本地,然后build镜像。如果不出意外的话,步骤很简单。

dockerfile文件在此: https://github.com/docker-library/mysql/blob/master/8.0/Dockerfile.debian

把dockerfile:Dockerfile.debian复制也好,wget也好,搞到本地,然后执行:

经过漫长的等待,期待,docker给我报了个错误。截图如下:

可见,报错内容为:目录不存在,不过/var/lib/docker/tmp/docker-builderxxxxx这个目录,是build在运行时的临时目录,build完成后,就会被删掉。所以,在build的时候,这里有没有docker-builderxxxxx这个目录,目录下有没有config,我也不知道。

但是问题还是要解决的,看一下dockerfile的内容

这样,把dockerfile里需要的内容,都手动的放到当前目录里,在此build。就可以通过了。

为什么直接执行build,会提示在tmp目录下找config呢?我觉得是build的时候,tmp目录下的docker-builderxxxxx目录会映射到当前目录。报的这个错误其实就是从当前目录找config文件,当前目录没有,就去映射的docker-builderxxxxx目录下找,而docker-builderxxxxx目录下因为我不知道的原因也没有,所以就报错了。只需要确保当前目录下有dockerfile里需要的文件就可以解决了。

将Docker安装到CentOS或Fedora上

要将Docker安装到CentOS上,首先启用EPEL软件库,然后使用yum命令

$ sudo yum install docker-io

$ sudo service docker start

$ sudo chkconfig docker on

要将Docker安装到Fedora上,使用下面这些命令:

$ sudo yum install docker-io

$ sudo systemctl start docker.service

$ sudo systemctl enable docker.service

将Docker安装到CentOS或Fedora上后,你需要将自己添加到docker群组,那样才能以非root用户的身份来运行Docker。为此,使用这个命令:

$ sudo usermod -a -G docker $USER

退出,重新登录,以激活群组变更。

至此,你应该能够以非特权用户的身份来运行docker命令了。

Docker的基本用法

你想启动一个新的Docker容器,就需要确定为容器使用哪个Docker映像。你可以搜索官方的Docker映像索引(),上面列出了公开可用的Docker映像。Docker索引包括:Docker团队管理的Linux基本映像(比如Ubuntu、Debian、Fedora和 CentOS),以及用户贡献的自定义映像(比如MySQL、Redis和WordPress)。

比如说,想在交互模式开启动一个Ubuntu容器,就要运行下面这个命令。容器一启动,最后的变量“/bin/bash”就在容器里面执行。

$ docker run -i -t ubuntu /bin/bash

你头一次运行上面这个命令时,它会通过网络下载可用的一个或多个Ubuntu docker映像,然后使用该映像,启动Docker容器。Ubuntu容器会立马启动,你会看到容器里面的控制台提示符。你可以访问容器沙箱里面的功能完备的Ubuntu *** 作系统。

如果你在提示符处键入“exit”,就会退出容器,容器会被停止。

想列出所有的容器(包括已停止的容器),运行这个命令:

$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

6a08a0b2bb4c ubuntu:14.04 /bin/bash About a minute ago Exit 0 cocky_ritchie

想在守护进程模式下重新启动某个已停止的容器:

$ docker start [container-id]

想移除某个已停止的容器:

$ docker rm [container-id]

想连接到后台运行的容器,以便查看容器或与之交互:

$ docker attach [container-id]

你可以随意定制某个运行中的容器(比如安装新软件)。如果你想把变更内容保存在当前容器中,先要在提示符处键入“exit”,退出容器的交互模式。然后使用这个命令,将已变更的映像保存为不同的映像:

$ docker commit [container-id] [new-image-name]

想获得你容器的容器ID,可以使用之前描述的“docker ps –a”命令。

一旦你已构建了像这样的新映像,就可以借助该映像启动一个新的容器了。

你还可以下载任何公开的容器映像(比如ubuntu,bowery/mysql),将它们保存到本地软件库中,如下所示。

$ docker pull [image name]

想查看所有本地下载/保存的容器映像:

$ docker images

你可以选择从哪个特定的映像来启动容器:

$ docker run -i -t [image-id] /bin/bash

想从本地软件库移除某个容器映像:

$ docker rmi [image-id]

将Docker安装到CentOS或Fedora上

要将Docker安装到CentOS上,首先启用EPEL软件库,然后使用yum命令:

$ sudo yum install docker-io

$ sudo service docker start

$ sudo chkconfig docker on

要将Docker安装到Fedora上,使用下面这些命令:

$ sudo yum install docker-io

$ sudo systemctl start docker.service

$ sudo systemctl enable docker.service

将Docker安装到CentOS或Fedora上后,你需要将自己添加到docker群组,那样才能以非root用户的身份来运行Docker。为此,使用这个命令:

$ sudo usermod -a -G docker $USER

退出,重新登录,以激活群组变更。

至此,你应该能够以非特权用户的身份来运行docker命令了。

Docker的基本用法

你想启动一个新的Docker容器,就需要确定为容器使用哪个Docker映像。你可以搜索官方的Docker映像索引(),上面列出了公开可用的Docker映像。Docker索引包括:Docker团队管理的Linux基本映像(比如Ubuntu、Debian、Fedora和 CentOS),以及用户贡献的自定义映像(比如MySQL、Redis和WordPress)。

比如说,想在交互模式开启动一个Ubuntu容器,就要运行下面这个命令。容器一启动,最后的变量“/bin/bash”就在容器里面执行。

$ docker run -i -t ubuntu /bin/bash

你头一次运行上面这个命令时,它会通过网络下载可用的一个或多个Ubuntu docker映像,然后使用该映像,启动Docker容器。Ubuntu容器会立马启动,你会看到容器里面的控制台提示符。你可以访问容器沙箱里面的功能完备的Ubuntu *** 作系统。

如果你在提示符处键入“exit”,就会退出容器,容器会被停止。

想列出所有的容器(包括已停止的容器),运行这个命令:

$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

6a08a0b2bb4c ubuntu:14.04 /bin/bash About a minute ago Exit 0 cocky_ritchie

想在守护进程模式下重新启动某个已停止的容器:

$ docker start [container-id]

想移除某个已停止的容器:

$ docker rm [container-id]

想连接到后台运行的容器,以便查看容器或与之交互:

$ docker attach [container-id]

你可以随意定制某个运行中的容器(比如安装新软件)。如果你想把变更内容保存在当前容器中,先要在提示符处键入“exit”,退出容器的交互模式。然后使用这个命令,将已变更的映像保存为不同的映像:

$ docker commit [container-id] [new-image-name]

想获得你容器的容器ID,可以使用之前描述的“docker ps –a”命令。

一旦你已构建了像这样的新映像,就可以借助该映像启动一个新的容器了。

你还可以下载任何公开的容器映像(比如ubuntu,bowery/mysql),将它们保存到本地软件库中,如下所示。

$ docker pull [image name]

想查看所有本地下载/保存的容器映像:

$ docker images

你可以选择从哪个特定的映像来启动容器:

$ docker run -i -t [image-id] /bin/bash

想从本地软件库移除某个容器映像:

$ docker rmi [image-id]

在制作镜像的过程中,我们要注意几点:

1.文件系统是UnionFs,Dockerfile中每一条RUN都会生成一个层次(layer)。所以我们需要在每一条RUN之后清理产生的数据。因为生成的结果(3G的大小)是各层次大小的线性叠加。

2.为什么官方的镜像普遍偏小呢?我们就以mysql:5.6来作为参考,来分析一下:

RUN apt-get update &&apt-get install -y perl --no-install-recommends &&rm -rf /var/lib/apt/lists/*在更新组建以后,接着删除了apt的缓存的包文件。通常来说这个文件夹视情况会占用100M左右。

RUN { ...&&apt-get update &&apt-get install -y

mysql-server="${MYSQL_VERSION}" &&rm -rf /var/lib/apt/lists/* &&rm

-rf /var/lib/mysql &&mkdir -p /var/lib/mysql 在安装db以后,照例删除缓存的包文件。删除/var/lib/mysql能清除示例数据库。

而我们观察一下,hub.docker.com中最常用的vim包,我们发现haron/vim镜像是300M用的scratch作为基础镜像。

在hub.docker.com上粗略找了下,没有找到用centos做基础的mysql镜像。个人估计是缓存的包没有删掉,导致的问题。

至于@ShawnTaoo兄弟提到的基础镜像大小问题,我也做了下调查:centos:latest 190+MB, debian:jessie: 130+MB, ubuntu:latest 180+MB


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8640353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存