Docker学习笔记
一、Docker 简介
1.1、Docker是什么?
简单来说:
- IT 软件中所说的 “Docker” ,是指容器化技术,用于支持创建和使用 Linux® 容器。
- Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中

架构:
Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。

思想:
- 集装箱
- 标准化
- 隔离
核心:
- 镜像
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
- 容器
Docker 利用容器(Container)独立运行的一个或一组应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。 - 仓库
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
| 概念 | 说明 |
|---|---|
| Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
| Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
| Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
| Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
| Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
| Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
1.3、Docker VS 传统虚拟化方式


Docker 与 虚拟机 性能比较:
可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
1.3.1 什么是虚拟化技术
谈到计算机的虚拟化技术,我们直接想到的便是虚拟机,虚拟机允许我们在一台物理计算机模拟出多台机器,简单地理解,虚拟化技术就是在一台物理计算机上,通过中间虚拟软件层Hypervisor隔离CPU、内存等硬件资源,虚拟出多台虚拟服务器,这样做的话,一台物理服务器便可以安装多个应用程序,达到资源利用的最大化,而且多个应用之间相互隔离,如下图所示:
虚拟机的优点:
- 可以把资源分配到不同的虚拟机,达到硬件资源的最大化利用
- 与直接在物理机上部署应用,虚拟更容易扩展应用。
- 云服务:通过虚拟机虚拟出不同的物理资源,可以快速搭建云服务
虚拟机的不足之处:
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
- 高度可复用的开发环境
- …
注:http://www.dockerinfo.net/document
二、docker 安装
2.1、ubuntu安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.3、windows下docker 与vm共存
2.4、替换国内源
配置docker-desktop
登录到docker machine,
docker-machine ssh devvi /etc/docker/daemon.json
{"registry-mirrors": ["https://b3ipffra.mirror.aliyuncs.com","http://registry.docker-cn.com","http://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"],"insecure-registries": ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug": false,"experimental": false,"features": {"buildkit": true}}
配置docker 加速器以及仓库(阿里云)
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://b3ipffra.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
三、docker 命令
—restart=always : docker 运行时自动运行
四、其他
docker login registry.cn-hangzhou.aliyuncs.comUsername: xxx@163.comPassword:** Message: 05:55:27.024: Remote error from secret service: org.freedesktop.Secret.Error.IsLocked: Cannot create an item in a locked collectionError saving credentials: error storing credentials - err: exit status 1, out: `Cannot create an item in a locked collection`
sudo apt install gnupg2 passgpg2 --full-generate-key# 上面这个命令生成需要一些真随机条件,所以需要在电脑上多操作(比如乱打键盘、乱动鼠标、乱操作磁盘)。然而因为我是连远程服务器,无法操作本地键盘和鼠标,远程键盘和鼠标好像是没用的,所以只能另开一个窗口操作磁盘。# 下面的命令显示生成的密钥信息gpg2 -k# 把上面显示结果中的[uid]后面的部分复制到下面的命令里pass init "[uid]内容"
