Docker安装&部署
前言
从2017年3月开始docker在原来的基础上分为两个版本:Docker CE和Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但是需要付费。
Docker官方建议从CentOs7.0已上系统版本安装部署。
一、docker简介
1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
3、容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
4、Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
5、Docker是通过内核虚拟化技术(namespaces及cgroups)来提供容器的资源隔离与资源限制。由于Docker通过操作系统层的虚拟化实现隔离(对操作系统的内核有要求),所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,从而比kvm虚拟机更轻量。也可以把docker理解为一种简单的打包技术
docker目标
docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行
构建:制作docker镜像,打包容器的所有系统目录文件
运输:下载docker镜像
运行:基于docker镜像提供的rootfs,启动容器
总结:只要能运行docker容器,那么docker镜像中已经安装好的软件也可以运行,所以说docker是一种件的打包技术。
应用场景
1、Web 应用的自动化打包和发布。
2、自动化测试和持续集成、发布。
3、在服务型环境中部署和调整数据库或其他的后台应用。
4、从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
docker优势
1:解决了操作系统和软件运行环境的依赖例如:nginx和git需要安装的openssl版本不同,在同一台设备上安装会造成软件冲突
2:对于开发人员来说,再也不用担心不会部署开发环境
3:开发环境,测试环境和生产环境高度一致。
4:让用户体验产品新特性的又一种思路。
5:容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
6:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
7:由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
8:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
Docker与虚拟机的区别
二、docker的架构
1、docker三个基本概念:
1.镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
2. 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
3.仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
2、docker的镜像分层
一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker容器运行过程中主要提供文件系统数据支撑。
Docker镜像作为docker中最基本的概念,有以下几个特性:
1.镜像分层,每个镜像都由一个或多个镜像层组成;
2.可通过在某个镜像加上一定的镜像层得到新镜像(此过程可通过编写dockerfile或基于容器Commit实现);
3.每个镜像层拥有唯一镜像ID;
4.镜像在存储和使用时共享相同的镜像层(根据ID),所以在pull镜像时,已有的镜像层会自动跳过下载;
5.每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层;
Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。
3、镜像与容器的联系
当启动一个新的容器时,Docker会加载只读镜像,并在其之上添加一个读写层,即容器层。
docker 容器=镜像+可读层
4、镜像存储核心技术:联合文件系统
镜像的高效存储:引入联合文件系统,将镜像多层文件联合挂载到容器文件系统。
5、镜像存储核心技术:写时复制(COW)
引入写时复制(copy-on-write),需要修改文件操作时,会先从镜像里把要写的文件复制到自己的文件系统(容器的读写层)中进行修改。源镜像层中的文件不会发生变化。
前提条件
一、内核
1.Docker运行内核要求比较高,因此一般建议使用Ubuntu这样的平台运行,但是Docker作为一个标准容器也支持CentOS, Mac OS X, Windows等平台。目前Docker支持以下版本CentOS:
(1)CentOS7(64位)
(2)CentOS6.5(64位及以后)
2.在运行CentOS 6.5及以后版本时,需要内核版本>=2.6.32-431,因为这些内核包含了运行Docker的一些特定修改。
uname -r
注:网上很多教程说CentOS6.5必须要升级内核到3.10才能使用docker,其实是【可选】升级,但最好升级。
二、Device Mapper
1.Docker默认使用AUFS作为存储驱动,但是AUFS并没有被包括在Linux的主线内核中。CentOS中可以使用Device Mapper作为存储驱动,这是在2.6.9内核版本引入的新功能。我们需要先确认是否启用该功能:
ls -l /sys/class/misc/device-mapper
(1)如果没有检测到Device Mapper,需要安装device-mapper软件包:
sudo yum install -y device-mapper
(2)然后重新加载dm_mod内核模块:
sudo modprobe dm_mod
(3)再次确认存储驱动
ls -l /sys/class/misc/device-mapper
安装
2.1.CentOS 7
2.2.1.准备
CentOS7能上外网
yum -y install gcc
yum -y install gcc-c++
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
如果yum报告未安装任何这些软件,表示情况正常。
2.2.2.安装(过程版) 往下看
安装依赖包
安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 设置stable镜像仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 或 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
如果这是自添加 Docker 镜像仓库以来您首次刷新软件包索引,系统将提示您接受 GPG 密钥,并且将显示此密钥的指纹。验证指纹是否正确,并且在正确的情况下接受此密钥。指纹应匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35。
安装docker
1、安装指定版本:
yum list docker-ce.x86_64 --showduplicates | sort -r #从高到低列出Docker-ce的版本
该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。
例如:指定版本(docker-ce-18.09.9)进行安装:
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io # 例如: yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
2、安装最新版本:
yum -y install docker-ce
启动docker
执行以下命令启动docker:
systemctl start docker
启动时报错信息解决方法:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. systemctl status docker.service
解决方案:卸载docker重新安装新的docker。
解决步骤:
1、卸载Docker,旧版本docker没安装成功直接卸载掉。
(1)查看安装过的包:
yum list installed | grep docker
本机安装过的旧版本:
docker-ce.x86_64
docker-ce-cli.x86_64
docker-ce-rootless-extras.x86_64
(2)删除安装的Docker相关的软件包:
yum -y remove docker-ce.x86_64 yum -y remove docker-ce-cli.x86_64 yum -y remove docker-common.x86_64
2、安装Docker
(1)查看内核版本【Docker要求Centos系统的内核版本高于3.10】
uname -r 【本机的内核版本:3.10.0-1160.11.1.el7.x86_64】
(2)把yum包更新到最新(时间可能有点长,慢慢等待......)
yum update
(3)安装需要的软件包。
【yum-util提供yum-config-manager功能,另外两个是devicemapper驱动所需依赖】
yum install -y yum -utils device-mapper-persistent-data lvm2
(4)设置yum源
yum install -y yum -utils device-mapper-persistent-data lvm2
(5)查看仓库的docker版本
yum list docker-ce --showduplicates | sort -r
(6)安装docker
yum install docker-ce
(7)启动docker,设置开机启动docker。
systemctl start docker
systemctl enable docker
systemctl stop docker【补充:这是关闭docker的命令】
(8)查看版本
docker version
用一张图总结docker命令
Docker工作流
docker安装与启动(手动版)
yum install -y epel-release
yum install docker-io # 安装docker
# 配置文件vim /etc/sysconfig/docker chkconfig docker on # 加入开机启动
service docker start # 启动docker服务
# 基本信息查看 docker version # 查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info # 查看系统(docker)层面信息,包括管理的images, containers数等
docker pull centos 下载
docker images [ centos ] 查看 docker run -i -t centos /bin/bash 查看镜像详细信息 注:下面容器一节会看到,这个命令也能够用来查看容器的详细信息 docker inspect [image-id]
docker安装与启动(shell版)
安装shell脚本
install-docker.sh #!/bin/bash # 卸载旧版本 echo "" echo "" echo "#########################################################" echo "# 卸载旧版本 -- 开始 #" echo "#########################################################" yum -y remove docker docker-common docker-selinux docker-engine echo "#########################################################" echo "# 卸载旧版本 -- 结束 #" echo "#########################################################" # 安装需要的依赖软件包 echo "" echo "" echo "#########################################################" echo "# 安装需要的软件包 -- 开始 #" echo "#########################################################" yum install -y yum-utils device-mapper-persistent-data lvm2 echo "#########################################################" echo "# 安装需要的软件包 -- 结束 #" echo "#########################################################" # 设置 yum 源,清华镜像仓库,速度很快 echo "" echo "" echo "#########################################################" echo "# 设置 yum 源 -- 开始 #" echo "#########################################################" #安装wget,如果已安装则会跳过 yum -y install wget #根据你的发行版下载repo文件: wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo #把软件仓库地址替换为 TUNA: sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo echo "#########################################################" echo "# 设置 yum 源 -- 结束 #" echo "#########################################################" # 安装 docker-ce echo "" echo "" echo "#########################################################" echo "# 安装 docker-ce -- 开始 #" echo "#########################################################" yum -y install docker-ce echo "#########################################################" echo "# 安装 docker-ce -- 结束 #" echo "#########################################################" # 启动并加入开机启动 echo "" echo "" echo "#########################################################" echo "# 启动并加入开机启动 -- 开始 #" echo "#########################################################" systemctl start docker systemctl enable docker echo "#########################################################" echo "# 启动并加入开机启动 -- 结束 #" echo "#########################################################" # 验证安装是否成功 echo "" echo "" echo "#########################################################" echo "# 验证安装是否成功 -- 开始 #" echo "#########################################################" docker version echo "#########################################################" echo "# 验证安装是否成功 -- 结束 #" echo "#########################################################" # 安装docker-compose echo "" echo "" echo "#########################################################" echo "# 安装docker-compose -- 开始 #" echo "#########################################################" # 从国内镜像 get.daocloud.io 快速下载 curl -L https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose echo "#########################################################" echo "# 安装docker-compose -- 结束 #" echo "#########################################################" # 验证安装是否成功 echo "" echo "" echo "#########################################################" echo "# 验证安装是否成功 -- 开始 #" echo "#########################################################" docker-compose --version echo "#########################################################" echo "# 验证安装是否成功 -- 结束 #" echo "#########################################################" # 添加 docker 国内镜像站点并重启docker echo "" echo "" echo "#########################################################" echo "# 添加 docker 国内镜像站点并重启docker -- 开始 #" echo "#########################################################" #创建目录:/etc/docker mkdir -p /etc/docker echo '{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }' >> /etc/docker/daemon.json systemctl restart docker echo "#########################################################" echo "# 添加 docker 国内镜像站点并重启docker -- 结束 #" echo "#########################################################" echo "" echo "" echo "install OK!" # 提示安装完成 echo "" echo "enjoy!" echo "songbao--"$(date +%F%n%A--%T) #输出年月日星期时分秒 echo "" echo "" 卸载shell脚本 Uninstall-docker.sh #!/bin/bash echo "" echo "" echo "" echo "#####################################################" echo "# 删除docker-ce相关程序及依赖 #" echo "#####################################################" yum -y remove docker-ce \ docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine echo "" echo "#####################################################" echo "# 删除docker服务 #" echo "#####################################################" rm -rf /etc/systemd/system/docker.service.d echo "" echo "#####################################################" echo "# 删除相关目录 #" echo "#####################################################" rm -rf /var/lib/docker rm -rf /var/run/docker echo "" echo "#####################################################" echo "# 安装网桥管理工具 #" echo "#####################################################" yum -y install bridge-utils echo "" echo "#####################################################" echo "# 停止并删除docker0 #" echo "#####################################################" ifconfig docker0 down brctl delbr docker0