由于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
系统无Vim
和gedit
等编辑器,需要使用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
后再生成镜像。