由于Docker镜像站中的Ubuntu镜像是一个最小版本,连vi也没有:( 每次创建容器时都需要更换国内源和安装gcc等工具。因此,笔者觉得要做一个适合自己的Ubuntu镜像,减少后续的dirty work 😃

注意事项

  • 以下命令均在root用户下完成,若不在root用户,先使用如下命令转到root用户。
su root
  • 如果下载缓慢,请自行百度如何将Docker镜像换成国内镜像,如阿里云的容器镜像站。

获取Ubuntu

使用如下命令从镜像站下载一个Ubuntu 16.04的镜像

docker pull ubuntu 16.04

会输出如下信息

root@ubuntu:~# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
4f53fa4d2cf0: Pull complete 
6af7c939e38e: Pull complete 
903d0ffd64f6: Pull complete 
04feeed388b7: Pull complete 
Digest: sha256:185fec2d6dbe9165f35e4a1136b4cf09363b328d4f850695393ca191aa1475fd
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04

使用命令docker images查看镜像是否下载到本地,会输出如下信息

root@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               096efd74bb89        3 weeks ago         127MB

运行容器

以前台方式为刚刚下载的ubuntu:16.04创建容器,并进入shell

docker run -it ubuntu:16.04 /bin/bash

此时已进入容器的shell,如下所示

root@ubuntu:~# docker run -it ubuntu:16.04 /bin/bash
root@2ce6712ef339:/#

容器换源

将容器的国外源换成阿里源

删除原来的国外源文件sources.list

rm /etc/apt/sources.list

创建一个新的文件,名字依然是sources.list。由于Docker下的Ubuntu系统无Vimgedit等编辑器,需要使用cat命令批量写入多行内容到指定文件,如下所示。

cat>/etc/atp/sources.list<<EOF

上面这条命令表示输入了EOF这三个字符后才结束输入。

执行了上面的语句后,复制下面的阿里云的源信息,以EOF这三个字符作为最后一行

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

然后使用命令cat /etc/apt/sources.list输出文件信息。整个过程输出信息如下。

root@2ce6712ef339:/# rm /etc/apt/sources.list
root@2ce6712ef339:/# cat>/etc/apt/sources.list<<EOF
> deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
> deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
> EOF
root@2ce6712ef339:/# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新apt

使用如下命令更新apt

apt update

输出如下信息

root@2ce6712ef339:/# apt update
Get:1 http://mirrors.aliyun.com/ubuntu bionic InRelease [242 kB]
Get:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease [242 kB]
Get:5 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://mirrors.aliyun.com/ubuntu bionic/main Sources [1063 kB]
Get:7 http://mirrors.aliyun.com/ubuntu bionic/restricted Sources [5823 B]
Get:8 http://mirrors.aliyun.com/ubuntu bionic/universe Sources [11.5 MB]
Get:9 http://mirrors.aliyun.com/ubuntu bionic/multiverse Sources [216 kB]                                                                                                                                  
Get:10 http://mirrors.aliyun.com/ubuntu bionic/main amd64 Packages [1344 kB]                                                                                                                               
Get:11 http://mirrors.aliyun.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]                                                                                                                         
Get:12 http://mirrors.aliyun.com/ubuntu bionic/universe amd64 Packages [11.3 MB]                                                                                                                           
Get:13 http://mirrors.aliyun.com/ubuntu bionic/multiverse amd64 Packages [186 kB]                                                                                                                          
Get:14 http://mirrors.aliyun.com/ubuntu bionic-security/main Sources [298 kB]                                                                                                                              
Get:15 http://mirrors.aliyun.com/ubuntu bionic-security/restricted Sources [13.0 kB]                                                                                                                       
Get:16 http://mirrors.aliyun.com/ubuntu bionic-security/universe Sources [331 kB]                                                                                                                          
Get:17 http://mirrors.aliyun.com/ubuntu bionic-security/multiverse Sources [4352 B]                                                                                                                        
Get:18 http://mirrors.aliyun.com/ubuntu bionic-security/main amd64 Packages [1733 kB]                                                                                                                      
Get:19 http://mirrors.aliyun.com/ubuntu bionic-security/restricted amd64 Packages [205 kB]                                                                                                                 
Get:20 http://mirrors.aliyun.com/ubuntu bionic-security/universe amd64 Packages [1348 kB]                                                                                                                  
Get:21 http://mirrors.aliyun.com/ubuntu bionic-security/multiverse amd64 Packages [15.0 kB]                                                                                                                
Get:22 http://mirrors.aliyun.com/ubuntu bionic-updates/main Sources [621 kB]                                                                                                                               
Get:23 http://mirrors.aliyun.com/ubuntu bionic-updates/restricted Sources [18.4 kB]                                                                                                                        
Get:24 http://mirrors.aliyun.com/ubuntu bionic-updates/universe Sources [547 kB]                                                                                                                           
Get:25 http://mirrors.aliyun.com/ubuntu bionic-updates/multiverse Sources [11.6 kB]                                                                                                                        
Get:26 http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 Packages [2150 kB]                                                                                                                       
Get:27 http://mirrors.aliyun.com/ubuntu bionic-updates/restricted amd64 Packages [231 kB]                                                                                                                  
Get:28 http://mirrors.aliyun.com/ubuntu bionic-updates/universe amd64 Packages [2112 kB]                                                                                                                   
Get:29 http://mirrors.aliyun.com/ubuntu bionic-updates/multiverse amd64 Packages [45.5 kB]                                                                                                                 
Get:30 http://mirrors.aliyun.com/ubuntu bionic-proposed/main Sources [111 kB]                                                                                                                              
Get:31 http://mirrors.aliyun.com/ubuntu bionic-proposed/restricted Sources [9288 B]                                                                                                                        
Get:32 http://mirrors.aliyun.com/ubuntu bionic-proposed/universe Sources [18.0 kB]                                                                                                                         
Get:33 http://mirrors.aliyun.com/ubuntu bionic-proposed/multiverse Sources [899 B]                                                                                                                         
Get:34 http://mirrors.aliyun.com/ubuntu bionic-proposed/main amd64 Packages [212 kB]                                                                                                                       
Get:35 http://mirrors.aliyun.com/ubuntu bionic-proposed/restricted amd64 Packages [69.3 kB]                                                                                                                
Get:36 http://mirrors.aliyun.com/ubuntu bionic-proposed/universe amd64 Packages [44.8 kB]                                                                                                                  
Get:37 http://mirrors.aliyun.com/ubuntu bionic-proposed/multiverse amd64 Packages [11.3 kB]                                                                                                                
Get:38 http://mirrors.aliyun.com/ubuntu bionic-backports/main Sources [5823 B]                                                                                                                             
Get:39 http://mirrors.aliyun.com/ubuntu bionic-backports/universe Sources [5759 B]                                                                                                                         
Get:40 http://mirrors.aliyun.com/ubuntu bionic-backports/main amd64 Packages [11.3 kB]                                                                                                                     
Get:41 http://mirrors.aliyun.com/ubuntu bionic-backports/universe amd64 Packages [11.4 kB]                                                                                                                 
Fetched 36.6 MB in 28s (1277 kB/s)                                                                                                                                                                         
Reading package lists... Done
Building dependency tree       
Reading state information... Done
90 packages can be upgraded. Run 'apt list --upgradable' to see them.

安装build-essential

使用如下命令安装build-essential

apt install build-essential

查看以下gcc的版本,如果输出gcc版本则说明安装成功

gcc --version

输出信息如下

root@2ce6712ef339:/# gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

生成镜像

我们需要基于当前已经配置好的容器生成镜像,方便后面的操作。

不要退出当前容器,在新建一个终端,以下操作均在新终端下完成。

生成镜像的命令

docker commit -m "description" -a "author" <容器id> repository:tag
  • “description”:描述信息。
  • “author”:作者名。
  • <容器id>:可以在就终端那里看到,形如root@2ce6712ef339:/#。可以看到<容器id>2ce6712ef339
  • reposiory:镜像仓库名,任取即可。
  • tag:镜像标签名,任取即可。

在本例中,生成镜像使用如下命令

docker commit -m "ubuntu 16.04 with aliyun and build-essential" -a "Nelson" 2ce6712ef339 nelson/ubuntu:16.04

执行完上述语句后用如下命令查看镜像是否生成

docker images

可以看到镜像nelson/ubuntu:16.04在输出结果中。

root@ubuntu:/home/nelson/docker/hw2# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nelson/ubuntu       16.04               4192315dcfef        5 seconds ago       419MB
ubuntu              16.04               096efd74bb89        3 weeks ago         127MB

成功生成镜像,以后就可以直接使用该镜像创建容器,无需再进行换源,安装gcc什么的。根据读者的需要,可以安装更多的软件如vim后再生成镜像。