win10下docker desktop:使用dockerfile基于CentOS:8创建可以使用vim的镜像

简介: win10下docker desktop:使用dockerfile基于CentOS:8创建可以使用vim的镜像

使用dockerfile基于CentOS:8创建可以使用vim的镜像

问题描述:Win10家庭版系统,使用docker desktop,基于centos:latest版本创建镜像时报错。

PS C:\Users\cong\Desktop> docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    5d0da3dc9764   8 months ago   231MB

我的centos镜像是直接pull的默认latest版本,应该是centos:8。

在桌面的mydocker文件夹中创建一个centos_dockerfile.txt文件:

FROM centos:latest
MAINTAINER  zcong <zcong@zcongfly.cn>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash

根据dockerfile文件自定义centos:8镜像,要求:

1.默认登陆路径为/usr

2.可以使用vim命令(需要另外安装的第三方包)

运行代码:

PS C:\Users\cong\Desktop\mydocker> docker build -f ./centos_dockerfile.txt -t centos:latest

报错:

Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

百度了下原因,是因为centos:8版本更新后没有了appstream,镜像源出现点问题。

我找到的所有办法都需要在Linux系统下操作/etc/yum.repos.d这个文件夹,然而我的电脑是win10系统,根本没有这个文件夹!

思考了一下,dockerfile文件的那几行命令,其实就是以centos:8为父镜像,创建一个可以使用vim命令的新镜像,创建过程执行RUN yum install -y vim下载对应的包。上一步骤就是在这一命令处报错,告诉我centos:8找不到urls

好吧,那我就照着当前latest版本的centos镜像,搞一个有urlscentos:8出来。

网上已经有很多解决方法,这里采用https://blog.csdn.net/xiaocao_debug/article/details/123041407的方法将yum设置为阿里云的镜像源。

基于centos创建一个容器c1:

PS C:\Users\cong\Desktop\mydocker> docker run -it --name=c1 centos:latest /bin/bash

进入到c1容器中,找到并/etc/yum.repos.d文件夹:

[root@1eae32974792 /] cd /etc/yum.repos.d

创建文件备份:

[root@1eae32974792 yum.repos.d] mkdir backup
[root@1eae32974792 yum.repos.d] mv *repo backup/
[root@1eae32974792 yum.repos.d] ls -lh
total 4.0K
drwxr-xr-x 2 root root 4.0K May 16 05:40 backup

下载阿里云文件:

[root@1eae32974792 yum.repos.d] curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2600  100  2600    0     0   2610      0 --:--:-- --:--:-- --:--:--  2607
[root@1eae32974792 yum.repos.d]# ls -lh
total 8.0K
-rw-r--r-- 1 root root 2.6K May 16 05:41 CentOS-Base.repo
drwxr-xr-x 2 root root 4.0K May 16 05:40 backup

更新源里面的地址:

[root@1eae32974792 yum.repos.d] sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
[root@1eae32974792 yum.repos.d] sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*

生成缓存:

[root@1eae32974792 yum.repos.d] yum clean all
[root@1eae32974792 yum.repos.d] yum makecache

至此构建了一个更新了yum阿里源的容器c1,下面将容器c1转换为镜像mycentos:8

PS C:\Users\cong\Desktop> docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS                  PORTS     NAMES
1eae32974792   centos:latest   "/bin/bash"              5 hours ago   Up 8 minutes                      c1
PS C:\Users\cong\Desktop> docker commit 1eae32974792 mycentos:8
sha256:1a595a092da8e52a1a44141c972c11490997279dc9d3dae2860a1a42663ce016
PS C:\Users\cong\Desktop> docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mycentos     8         1a595a092da8   7 seconds ago   317MB
centos       latest    5d0da3dc9764   8 months ago    231MB

基于新创建的镜像mycentos:8,修改dockerfile.txt文件并根据该文件自定义镜像zc_centos:1.0

FROM mycentos:8
MAINTAINER  zcong <zcong@zcongfly.cn>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
PS C:\Users\cong\Desktop\mydocker> docker build -f ./centos_dockerfile.txt -t zc_centos:1.0

看一下镜像是否成功创建:

PS C:\Users\cong\Desktop\mydocker> docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
zc_centos    1.0       3eec5f13e8be   44 seconds ago   402MB
mycentos     8         1a595a092da8   14 minutes ago   317MB
centos       latest    5d0da3dc9764   8 months ago     231MB

根据新创建的zc_centos:1.0镜像创建容器zc_c1

PS C:\Users\cong\Desktop\mydocker> docker run -it --name=zc_c1 zc_centos:1.0

进入容器zc_c1,验证能否使用vim命令:

[root@86d20d7fd932 usr] cd ~
[root@86d20d7fd932 ~] vim a.txt

成功进入vim编辑界面。

目录
相关文章
|
18天前
|
应用服务中间件 Linux nginx
Docker镜像-手动制作yum版nginx镜像
这篇文章介绍了如何手动制作一个基于CentOS 7.6的Docker镜像,其中包括下载指定版本的CentOS镜像,创建容器,配置阿里云软件源,安装并配置nginx,自定义nginx日志格式和web页面,最后提交镜像并基于该镜像启动新容器的详细步骤。
79 21
Docker镜像-手动制作yum版nginx镜像
|
18天前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
94 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
18天前
|
应用服务中间件 Linux nginx
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
60 20
|
17天前
|
Docker 容器
Docker Hub镜像公共仓库使用
这篇文章介绍了如何使用Docker Hub公共仓库进行镜像的创建、上传、下载和管理。
299 8
|
1月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
4月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
53 0
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
131 0
|
应用服务中间件 Linux Shell
Docker进阶 dockerfile指令构建docker镜像
Docker进阶 Dockerfile指令,编译dockerfile文件构建镜像,dockerfile常用指令,实操训练:Dockerfile构建Nginx镜像: FROM #指定基础镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建的时候需要运行的命令 ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容 WORKDIR #镜像的工作目录 VOLUME #挂载的目录 EXPOST #暴露端口配置
Docker进阶 dockerfile指令构建docker镜像
|
Java 应用服务中间件 Shell
【Docker】四 Dockerfile指令详解
需求 - 启动一个Nginx容器。 - 将Nginx容器的首⻚改为 `Welcome to my first docker class` 。 - 将容器保存下来。
183 0
|
存储 Shell 应用服务中间件
学习Docker就应该掌握的dockerfile语法与指令
在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。 ## Docker commit Docker commit一般用做从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。 ``` docker commit 容器名 新镜像名:tag ``` 使用这种方式的缺点是:1.对外不