Docker 相关站点
Docker 相关技术
- Golang
- CI/CD
- Mesos
- Swarm
- Machine
- Compose
- Kubernetes
Docker 的目标
Build and Ship any Application Anywhere,即通过对应组件的封装、分发、部署、运行等生命周期的管理,使用户的应用及其运行环境能够做到 “一次构建,到处运行”,官方图解如下:
什么是容器?
- 一种虚拟化方案
- 操作系统级别的虚拟化
- 只能运行相同或相似内核的操作系统
- 依赖于 Linux 内核特性:Namespace 和 Cgroups(Control Group),前者用于资源隔离,后者用于资源限制
- 容器只能使用宿主机的 kernel,并且不能修改;即所有容器都共用宿主机的 kernel,在容器中无法对 kernel 进行升级。
Docker 与虚拟机的区别
参考文章:Docker 容器与虚拟机有什么区别,VM vs Docker 的图解如下:
Docker 的三要素介绍
- 三要素:仓库、镜像、容器
- Docker 本身是一个容器运行载体或称之为管理引擎,基于 C/S 模式,即客户端 / 守护进程
- Docker 镜像是层叠的只读文件系统,镜像用作创建 Docker 容器,一个镜像可以创建多个容器
- 容器是用镜像创建的运行实例,这里的镜像相当于 Java 中的类,容器相当于通过该类创建的对象实例
- 仓库是集中存放镜像文件的场所,仓库(Repository)和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(Tag)
- 仓库分为公开仓库(Public)和私有仓库(Private)两种形式,最大的公开仓库是 Docker Hub,国内的公开仓库有阿里云、网易云等
- Docker 架构图
为什么要在开发中使用 Docker
- 一致的开发环境,Docker 可以保证整个研发团队使用一致的开发环境
- 在开发时只需 Docker,无需在自己的开发主机上搭建各种编程语言环境
- 简化了编译和构建的复杂性,对于一些动辄数小时的编译和构建工作,可以用 Docker 来简化
- 部署很简单,应用程序在容器中运行,开发环境与最终的生产环境保持一致,这减少了部署出错的可能性
- 可以使用同一编程语言(如 go, python, ruby, java, node 等)的多个版本,无需解决多版本冲突的问题
- Docker 拥有几大特性:持续集成、版本控制、可移植性、隔离性和安全性
- Docker 属于解决运行环境和配置问题,方便做持续集成,并有助于整体发布的容器虚拟化技术
- Docker 提供更快速的应用交付和部署,更便捷的升级和扩缩容,更简单的系统运维,更高效的计算资源利用
Docker 各版本对 Centos 的兼容
- docker-io(旧版本)
- Centos7(64-bit),Linux 内核版本为 3.10 以上
- Centos6.5(64-bit)或更高版本,Linux 内核版本为 2.6.32-431 或更高
- docker-ce(新版本)
- Centos7(64-bit),Linux 内核版本为 3.10 以上
- docker 新旧版本名称的区别
- 旧版本的名称是 docker、docker-io、docker-engine
- 新版本的名称是 docker-ce(社区版)、docker-ee(企业版)
Centos7 安装 Docker-CE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| # cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
# uname -a Linux centos7 3.10.0-957.1.3.el7.x86_64
# yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
# rm -rf /var/lib/docker
# yum install yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
# yum list docker-ce.x86_64 --showduplicates | sort -r docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# yum install docker-ce
# yum install docker-ce-18.06.1.ce-3.el7
# systemctl start docker
# systemctl enable docker
# docker version Client: Version: 18.09.0 API version: 1.39 Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov 7 00:48:22 2018 OS/Arch: linux/amd64 Experimental: false
Server: Docker Engine - Community Engine: Version: 18.09.0 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov 7 00:19:08 2018 OS/Arch: linux/amd64 Experimental: false
# docker run hello-world
|
Centos7 配置 Docker-CE 的镜像加速
1 2 3 4 5 6 7 8 9 10 11 12
| # mkdir -p /etc/docker
# vim /etc/docker/daemon.json {"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]}
# systemctl daemon-reload
# systemctl restart docker
|
Centos7 卸载 Docker-CE
1 2 3 4 5 6 7
| # yum remove docker-ce
# rm -rf /var/lib/docker
|
更改 Docker 默认安装路径
值得一提的是,如果已经存在大量 Docker 容器,更改 Docker 的默认安装路径存在数据丢失的风险,请提前备份重要的数据!建议使用下面介绍的第二种方法进行操作,因为第一种方法存在升级问题,那就是当 Docker 的版本升级后,docker.service
配置文件的内容会被覆盖掉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
# systemctl stop docker
# mv /var/lib/docker /home
# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:// --graph /home/docker
# systemctl daemon-reload
# systemctl start docker
# docker info Docker Root Dir: /home/docker
|
1 2 3 4 5 6 7 8 9 10 11 12 13
|
# systemctl stop docker
# mv /var/lib/docker /home
# ln -s /home/docker /var/lib/docker
# systemctl start docker
|
1 2 3 4 5 6 7 8
|
# ps -aux|grep docker
# docker pull centos # docker run -it centos
|
Docker 相关文件介绍
1 2 3
| Docker默认安装目录:/var/lib/docker Docker配置文件: /etc/docker/daemon.json Docker系统服务的配置文件: /usr/lib/systemd/system/docker.service
|
其他 Linux 发行版安装 Docker-CE