首先我們編寫一個簡單的Dockerfile的例子。不過再此之前大家得去把編寫dockerfile的指令了解一下。
編寫以 centos鏡像為基礎鏡像,構建 http 服務,Dockerfile 要求刪除鏡像的 yum 源,使用當前系統的 yum 源文件,完成后安裝 http 服務,此鏡像要求暴露 80 端口。構建的鏡像名字叫 http:v1.0。
我們首先要來理解一下題目的要求,第一步我們需要創建一個空的文件夾mydocker,在這個文件夾里准備我們所需要的文件。如下所示。
[root@server mydocker]# ls
dockerfile2 yum.repo
第二步我們具體編寫dockerfile2里面的內容。當然這里的dockerfile2這是筆者自己定義的,你們可以根據自己的意願來定義。編寫的內容如下:
FROM centos:latest
MAINTAINER lfz@852
RUN rm -rf /etc/yum.repos.d/*
ADD yum.repo /etc/yum.repos.d/
RUN yum clean all
RUN yum install -y httpd
EXPOSE 80
在這里呢,筆者想重點說明一下yum的問題,題干中所提到的Dockerfile 要求刪除鏡像的 yum 源,使用當前系統的 yum 源文件。這里的意思是,刪除除我們構建的鏡像的yum源,而使用當前系統的yum源,是指宿主機的yum源。但是呢,這里的yum源並不是我們之前配置的本地yum源,而是存在與/etc/yum.repo.d下面的所有源文件。
下面給大家看一下我之前創建yum.repo文件,大家就能明白。
[root@server mydocker]# ls yum.repo/
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
最后呢,我們依據我們創建的dockerfile2 docker build 一個新的鏡像。
[root@server mydocker]# docker build -f /mydocker/dockerfile2 -t http.v1.0 .
Sending build context to Docker daemon 15.87 kB
Step 1 : FROM centos:latest
---> ff426288ea90
Step 2 : MAINTAINER lfz@852
---> Running in 0730eeb7f233
---> 37be11bdf981
Removing intermediate container 0730eeb7f233
Step 3 : RUN rm -rf /etc/yum.repos.d/*
---> Running in 803722a3ff8b
---> 6d3a727a9804
Removing intermediate container 803722a3ff8b
Step 4 : ADD yum.repo /etc/yum.repos.d/
步驟筆者這里就不全部展示了。構建的過程可能有點久,耐心等待。
不過呢,這里來提醒一下,在構建過程當中可能會遇到下面這種情況。
http://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/updates/x86_64/repodata/8e9b9348c76f762ec88992f1e6437a169cdf5e259742714c864d6e2c81c7ede5-primary.sqlite.bz2: [Errno 12] Timeout on http://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/updates/x86_64/repodata/8e9b9348c76f762ec88992f1e6437a169cdf5e259742714c864d6e2c81c7ede5-primary.sqlite.bz2: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds')
Trying other mirror.
這並不是報錯,所以也不需要去打斷構建的過程。
希望可以幫到大家!!!