Docker安装&部署

前言

20173月开始docker在原来的基础上分为两个版本:Docker CEDocker EE

Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但是需要付费。

Docker官方建议从CentOs7.0已上系统版本安装部署。

 

一、docker简介

1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.协议开源。

2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

3、容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone app,更重要的是容器性能开销极低。

4、Docker 17.03 版本之后分为 CECommunity Edition: 社区版) 和 EEEnterprise Edition: 企业版),我们用社区版就可以了。

5Docker是通过内核虚拟化技术(namespacescgroups)来提供容器的资源隔离与资源限制。由于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:解决了操作系统和软件运行环境的依赖例如:nginxgit需要安装的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)CentOS764位)

(2)CentOS6.564位及以后)

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-08-16 12:05  情定今生~~~  阅读(437)  评论(0编辑  收藏  举报