Docker 是一种虚拟化技术,基于 Linux 的容器机制(Linux Containers,简称 LXC),可以把它近似地理解成是一个“轻量级的虚拟机”,只消耗较少的资源就能实现对进程的隔离保护

使用 Docker 可以把应用程序和它相关的各种依赖(如底层库、组件等)“打包”在一起,这就是 Docker 镜像(Docker image)。Docker 镜像可以让应用程序不再顾虑环境的差异,在任意的系统中以容器的形式运行(当然必须要基于 Docker 环境),极大地增强了应用部署的灵活性和适应性

宿主机环境

Ubuntu 18.04 x86_64

安装Docker环境

推荐官方的安装方式

sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

因为 Docker 是国外网站,直接从官网安装速度可能比较慢

所以还可以选择国内的镜像网站来加快速度,像这里就使用 “–mirror” 选项指定了“阿里云”

操作 Docker 必须要有 sudo 权限,安装完之后,检查是否安装成功

sudo docker version

docker 运行程序 docker运行环境_网络接口

获取Docker镜像

用的是 “docker pull” 命令

sudo docker pull ubuntu:18.04

从 docker 仓库拉取到一个精简版的 Ubuntu 18.04 镜像

可以用 “docker images” 来查看结果,列出目前宿主机本地的所有镜像

sudo docker images

启动Docker容器

可以用 “docker run” 命令

sudo docker run -it --rm ubuntu:18.04

“-it” 参数表示开启一个交互式的 Shell 终端,默认使用的是 bash

“–rm” 参数表示容器是“用完即扔”,不保存容器实例,一旦退出 Shell 就会自动删除容器(但不会删除镜像),免去了管理容器的麻烦。否则退出容器后,使用 “sudo docker ps -a” 命令还是可以看到一个已退出的容器被列出来

还有其它一些参数

“-v” 表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

“-p" 指定对外的网络端口

“docker run” 之后,就会像虚拟机一样进入容器的运行环境,身份也自动变成了 root 用户

退出容器,使用 “exit” 命令

在Docker容器里做实验

这里根据自己的实际情况,尽情做实验吧

有一点要注意的是:

在容器里生成的文件,在容器关闭后就会消失,所以还要用 “docker cp” 命令及时从容器里拷出来(指定容器的 ID,用 “docker ps -a” 查看)

打开另一个终端查看

sudo docker ps -a

接着拷贝容器里的文件到宿主机,例如

sudo docker cp 732597f4db9b:/hello.txt ./

删除容器

对于已经退出了的容器,如果用 “sudo docker ps -a” 还能看到容器 ID 的话

说明之前运行容器时没有加 “–rm” 参数,此时可以这样删除容器,带上容器 ID

sudo docker rm aa35aeefa2c9

删除镜像

删除完容器之后,还可以删除镜像(”容器“是”镜像“运行时的状态)

使用 “docker rmi” 删除镜像,带上镜像 ID

sudo docker rmi a8780b506fa4

Docker中的网络

Docker 的网络功能相对简单,没有过多复杂的配置,Docker 默认使用 birdge 桥接方式与容器通信。

启动 Docker 后,宿主机上会产生 docker0 这样一个虚拟网络接口,docker0 不是一个普通的网络接口, 它是一个虚拟的以太网桥,可以为绑定到 docker0 上面的网络接口自动转发数据包,这样可以使容器与宿主机之间相互通信。

每次 Docker 创建一个容器,会产生一个虚拟接口,在宿主机上执行 ifconfig,会发现多了一个类似 vethxxxxxxx 这样的网络接口,它会绑定到 docker0 上,由于所有容器都绑定到 docker0 上,所以容器之间也就可以通信。

docker 运行程序 docker运行环境_docker_02

小结

今天介绍了 Docker 实验环境的搭建,再小结一下要点

Docker 是一种非常流行的虚拟化技术,可以近似地把它理解成是一个“轻量级的虚拟机”

可以用 “docker pull” 命令从 Docker Hub 上获取相应的 Docker 镜像文件

可以用 “docker run” 命令从镜像启动一个容器,里面是完整的 XXX 环境