ubantu上安装docker
介绍
Docker 基于Go语言进行开发的,Docker 只包含应用程序及依赖库,基于libcontainer运行在宿主机上,并与虚拟机环境隔离,这使得Docker更加轻量高效,
极大地降低了服务和系统的耦合性,多个容器都运行各自独立的环境中,不会相互影响。
优点
1、快速,一致地交付您的应用程序,容器非常适合持续集成和持续交付(CI / CD)工作流程
2、响应式部署和扩展,Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务
上或混合环境中运行。
架构
1.Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互
2.Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过
socket或者RESTful api访问远程的Docker daemon
3.Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像
安装
更新apt包,否则有些时候下载东西的时候会报错
1 | ##sudo是使用root用户执行命令,如果没有切换到了root用户不用这个命令 |
下载安装docker
1 | apt install -y docker.io |
docker的基本使用
镜像(image)
镜像(Image)就是一堆只读层(read-only layer)
除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统(union file system)
技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
在主机上,我发现它们存在于/var/lib/docker/aufs目录下。
镜像层组成
镜像层是由一系列元数据(metadata)就是关于这个层的额外信息,它不仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息。每一层都包括了一个指
向父层的指针。如果一个层没有这个指针,说明它处于最底层。以及标识层的id序列号。
命令
查询镜像,默认是官网的镜像仓库,如果要添加其他的镜像仓库,需要在deamon.json里面添加,镜像名可以替换成id号
1 | docker search [images-name] |
查看自己的镜像
1 | docker images |
拉取仓库的镜像
1 | docker pull [images-name]:[版本号] |
删除镜像
1 | docker rmi [images-name] |
运行镜像,成为容器,其实本质是在镜像层的上面添加一个可读写层
1 | docker run -d -p 宿主机端口:docker容器的端口 --name 容器的名字(自己取) 镜像名字 |
我们可以自己自定义镜像,需要自己写一个dockerfile文件,里面有语法规则,后面讲。
容器(container)
容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
容器 = 镜像 + 读写层。并且容器的定义并没有提及是否要运行容器。
一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。在运行态的容器执行命令
1 | docker run ubuntu touch happiness.txt |
即便是这个ubuntu容器不再运行,我们依旧能够在主机的文件系统上找到这个新文件。
命令
为指定的镜像(image)添加了一个可读写层,构成了一个新的容器
1 | docker create <image-id> |
为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。
1 | docker start <container-id> |
列出所有运行中的容器,这隐藏了非运行态容器的存在
1 | docker ps |
停止所有的运行态容器进程
1 | docker stop <container-id> |
利用了cgroups的特性将运行中的进程空间暂停
1 | docker pause <container-id> |
移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行
1 | docker rm <container-id> |
将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像
1 | docker commit <container-id> |
在运行中的容器执行一个新进程。
1 | docker exec <running-container-id> |
提取出容器或者镜像最顶层的元数据
1 | docker inspect <container-id> or <image-id> |
docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。和export命令不同,这个命令为每一个层都保存了
它们的元数据。这个命令只能对镜像生效
1 | docker save <image-id> |
递归地输出指定镜像的历史镜像
1 | docker history <image-id> |