在项目开发阶段经常听到一句话:代码在我这里跑正常,为什么在你的机器上就出 bug?
docker 就是为了解决此问题诞生,将整个环境打包一起交付,这样保证开发环境、测试环境、正式环境都是一样的,避免因为环境不一致而产生不必要的问题。
docker 是基于 go 语言实现的开源项目,主要理念是:Build、ship and run any app,anywhere(在任何地方构建、发布、并运行任何项目)。
docker 是解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
虚拟机是模拟一套完整的计算机硬件,在模拟的硬件上运行起来新的操作系统,启动慢,占用资源大。
Linux 内核中提供了容器技术(Container)的支持,利用 namespace 将进程之间隔离,利用 cgroup 限制特定进程的资源使用。
基于 Linux 内核提供的容器技术,docker 不需要模拟一套硬件,甚至都不需要新的操作系统内核,提供一套新的 rootfs 即可,带来的优点如下:
docker 整体架构图如下:
(1)安装 docker 启动之后,在本机就会有一个 docker 守护服务,称之为 docker host
(2)用户通过 docker client 执行命令去和 docker host 进行交互
(3)用户可以将常用的一些docker 镜像从docker hub(docker 镜像中心)拉取到本地
(4)用户想要运行某个拉取到本地的镜像时,docker host 会创建一个加载了该 docker 镜像的全新 docker 容器
这段话不需要理解,在接下来的安装和使用过程中体验这段话所表述的意思即可。
在 Ubuntu20.04 上安装方法如下。
更新索引:
sudo apt-get update
添加 docker 官方的 GPG 密钥:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
添加仓库 app 源(注意架构,我的是 amd64):
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
更新索引:
sudo apt-get update
安装 docker 社区版:
sudo apt-get install docker-ce docker-ce-cli containerd.io
查看 docker 版本:
新建 /etc/docker/daemon.json 文件,添加以下内容,替换为腾讯云提供的 docker 源:
{"registry-mirrors":["https://mirror.ccs.tencentyun.com"]}
重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
docker 官方提供了常用的 docker 镜像,包括 ubuntu、centos、fedora 等基本的操作系统,nginx、mysql、redis、python 等基本的运行环境。
docker hub 官方地址:https://hub.docker.com/。
比如拉取 18.04 版本的 ubuntu 镜像:
sudo docker pull ubuntu18.04
查看已经 pull 下来的 docker 镜像:
sudo docker images
该 docker 镜像仅占用 63.1MB,开销非常小:
docker 会启动一个容器,该容器会将 docker 镜像加载进来。
-d
:表示容器在后台运行-i
:表示交互式操作-t
:表示终端--name
:指定容器名称docker run [参数] <要启动的docker镜像名称> [进入容器后要执行的程序]
(1)启动容器并直接进入
sudo docker run -it ubuntu /bin/bash
(2)在后台启动一个容器,并设置容器名字为 ubuntu-test
sudo docker run -it -d --name ubuntu-test ubuntu:18.04 /bin/bash
sudo docker ps -a
进入后台正在运行的容器:
sudo docker exec -it <容器id> <进入容器后执行的程序>
同时,这里我验证了容器中和容器外查看内核版本,用的是同一个内核。
sudo docker stop <容器id>
sudo docker rm <容器id>
sudo docker rmi <镜像名称>