Docker 运行 Ubuntu Linux

有时候,我们想在一个空白的 Linux 环境下自己跑一些程序或者做一些测试或者跑一个 demo。

而如果使用虚拟机来做,首先需要的资源很多,你得占用数以 GB 的磁盘空间来跑一个虚拟机,而且你还得安装操作系统,安装环境等等。

其次,你做某项测试所需的依赖或者环境有可能会与其他环境所需的依赖冲突,所以,如果你想做到每做一项测试都使用干净的环境且不与其他环境冲突,那么你需要每做一次测试就安装一个虚拟机(或者使用快照来不停地还原系统)。但无论哪种方式,这显然所需资源巨大。

而 docker 就是完美的解决了这个问题,他体积小,所需资源少,安装与运行相当方便,且每一个环境之间相互独立。当然 docker 的特点与优点不止这些。

注:并不是说虚拟机相比于 docker 完全没有优势,只是上面这种场景使用 docker 更方便,但也有很多其他的场景是 docker 替代不了的,比如大型软件环境,图形环境等等。

如下方的场景示例:

1、拉取一个 ubuntu 的镜像

➜  ~ docker pull ubuntu
Using default tag: latest
...

➜  ~ docker images                
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              72300a873c2c        2 months ago        64.2MB

可以看到,我们拉取一个干净的 ubuntu 镜像的大小只有 64 MB,比起安装虚拟机的 ISO 动辙数 GB 大小,它显示是太小巧太方便了,而且拉取也非常快(可以设置国内镜像源来加速使拉取速度更快)。 

2、运行一个基于 Ubuntu 的 Linux 容器

docker run -p 8888:8888 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 10;done"

其中:

 -p 8888:8888 中前一个 8888 代表是你宿主机(运行 docker 进程的机器),后一个 8888 代表的是 docker 容器中的端口。这个端口可以是还没有程序监听的端口。

-d 这个参数表示的是在后台运行,即 --deamon

ubuntu 表示的是运行容器所使用的镜像名称

/bin/sh -c "while true; do echo hello world; sleep 10;done" 则表示使用 Linux 环境在 docker 容器内部执行了一条死循环的命令来保存此容器会一直在后台运行。

➜  ~ docker ps -a
CONTAINER ID        IMAGE         COMMAND                  CREATED             STATUS              PORTS                    NAMES
881250e83ebb        ubuntu        "/bin/sh -c 'while t…"   About an hour ago   Up About an hour    0.0.0.0:8888->8888/tcp   adoring_bell

3、进入  Ubuntu Linux 容器内部

如果要进入该容器内部,则可以使用下面的命令:

docker exec -it 881 /bin/bash

其中 881 是 docker 容器的 id,可以只输入某几位,如上方 docker ps -a 所示:

也可以使用容器名称,如:

docker exec -it adoring_bell /bin/bash

其中 docker exec 是固定命令,-it 是 interactive 和 tts 缩写,后面跟容器 id 或名称,/bin/bash 表示内部使用的 shell 方式,也可以简写 bash。

4、一些小 tips

由于是完全干净的 Ubuntu 系统,所以系统中的很多的工具或者组件是没有的,需要自行安装,不过使用 apt-get 工具也非常地方便。下面列几个常用的:

apt-get update    更新 apt-get 工具,这个步骤优先级最高,因为不更新很多组件安装不了
apt install vim    安装 vim 工具,初始系统中连 vi 都没有,显然很需要。另外,可以使用 apt-get 命令简写 apt 来执行安装,效果相同。
apt install lrzsz    安装 lrzsz 工具,你就可以轻松的进行文件的上传下载了。个人觉得比起 docker cp 来得方便。不过 lrzsz 使用 zmodem,需要 ssh client 支持。我使用 SecureCRT 是支持的,使用起来非常简单,省了用 ftp 的功夫。
apt install wget    安装 wget 工具,如果你需要从网络上下载资源
apt install curl    安装 curl 工具,如果你需要使用 curl 来访问网络资源

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注