随着计算机近几十年的蓬勃发展,产生了大量优秀系统和软件。软件开辟职员可以自由选择名种软件应用。但同时带来的问题就是必要维护一个非常庞大的开辟、测试和生产环境。 面临这种环境,Docker 容器技术横空出世,提供了简朴、灵活、高效的办理方案,不必要过多地改变现有的利用习惯,就可以和已有的工具,如 OpenStack 等配合利用。因此,掌握 Docker 相关技术也是途经云计算的必经之路。
本章将依次介绍 Docker 的三大核心概念--镜像、容器、堆栈,以及安装 Docker 与介绍围绕镜像和容器的具体操纵。
一、Docker概述
因为 Docker 轻便、快速的特性,可以使应用到达快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若于个小变更积攒到一定程度再变更。每次变更一小部分实在是一种非常安全的方式,在开辟环境中能够快速提高工作效率。
Docker 容器能够帮助开辟职员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。订定一套容器标准能够使系统管理员更改容器的时间,程序员不必要关心容器的变革,而更专注自己的应用程序代码。从而隔离开了开辟和管理,简化了开辟和部署的本钱。
1.1什么是Docker
- 是一种轻量级的“假造机”
- 在Linux容器里运行应用的开源工具
如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还必要任何时 间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。
1.2Docker的优势
Docker 容器运行速度很快,启动和制止可以在秒级实现,比传统假造秘密快很多;Docker 核心办理的问题是利用容器来实现雷同假造机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在包管应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为大概。Docker 操纵方便,可以通过 Dockerfile 设置文件支持灵活的自动化创建和部署。表 1-1将 Docker容器技术与传统假造机的特性进行了比力。
Docker之所以拥有浩繁优势,与操纵系统假造化自身的特点是分不开的。传统假造机必要有额外的假造机管理程序和假造机操纵系统层,而 Docker 容器则是直接在操纵系统层面之上实现的假造化。图 1.2 是 Docker 与传统假造机架构。
1.3镜像
镜像、容器、堆栈是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,雷同假造机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 Cent OS 操纵系统环境,称为一个 CentOS 镜像;也可以是一个安装了 MSQL 的应用程序,称之为一个 MySQL 镜像等等。
Docker 提供了简朴的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接利用。
1.4容器
Docker 的容器是从镜像创建的运行实例,它可以被启动、制止和删除。所创建的每一个容器都是相互隔离、互不可见,以包管安全性的平台。可以将容器看作是一个浅易版的 Linux 环境,Docker 利用容器来运行和隔离应用。
1.5堆栈
Docker 堆栈是用来集中保存镜像的地方,当创建了自己的镜像之后,可以利用 push 命令将它上传到公有堆栈(Public)大概私有堆栈(Private)。当下次要在另外一台机器上利用这个镜像时,只需从堆栈获取。
堆栈注册服务器(Registry)是存放堆栈的地方,其中包含了多个堆栈。每个堆栈集中存放某一类镜像,而且利用不同的标签(tag)来区分它们。现在最大的公共堆栈是docker Hub,存放了数量庞大的镜像供用户下载利用。
二、安装 Docker
Docker 支持在主流的操纵系统平台上进行利用,包括 Windows 系统、Linux 系统、以及 MacOS 系统等。现在最新的 RHEL、Cent OS 以及 Ubuntu 系统官方软件源中都已经默认自带了Docker 包,可直接安装利用,也可以用 Docker 自己的 YUM 源进行设置。
Cent OS 系统下安装 Docker 可以有两种方式:一种是利用 CURL 获得 Docker 的安装脚本进行安装,另一种是利用 YUM 堆栈来安装 Docker。
注意:现在 Docker 只能支持 64 位系统。
2.1安装最新版本Docker依赖版本环境
- #本安装方式使用阿里的软件仓库
- #Step1: 添加软件源信息
- yum -y install wget
- wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
- wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- yum clean all
- yum makecache
复制代码- #Step2: 使用本地yum源安装必要的一些系统工具
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
- sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
- yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码- #Step 3: 安装Docker-CE
- yum clean all
- yum makecache fast
- yum repolist
- yum -y install docker-ce
复制代码- ##Step 4:添加国内镜像站
- mkdir /etc/docker/
- cat>/etc/docker/daemon.json<<EOF
- {
- "registry-mirrors": ["https://registry.docker-cn.com"]
- }
- EOF
复制代码 备注:
也可以将国内的镜像站改为阿里镜像加快器,Docker镜像加快地点可以在阿里上申请
阿里云登录 - 接待登录阿里云,安全稳定的云计算服务平台
- #Step 5: 开启Docker服务
- systemctl restart docker
- systemctl enable docker
- docker version
- cat>> /etc/sysctl.conf <<EOF
- net.ipv4.ip_forward=1
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- EOF
- sysctl -p
复制代码 三、Docker镜像操纵
1.搜索镜像
- [root@localhost ~]# docker search lamp
复制代码 2.获取镜像
注意:可选择星级较高的镜像
- [root@localhost ~]# docker pull mattrayner/lamp
复制代码 3.查看镜像信息
- [root@localhost ~]# docker images
复制代码 查看镜像的具体信息
- [root@localhost ~]# docker inspect c15
复制代码 修改镜像标签(老名字+新名字)
- [root@localhost ~]# docker tag mattrayner/lamp lamp:lamp
- [root@localhost ~]# docker images
复制代码 注意:
修改标签时可以只设置新的镜像名称,不要标签TAG,此时的标签会利用默认的latest当做标署名
4.删除镜像
用镜像名删除
- [root@localhost ~]# docker rmi lamp:lamp
复制代码 注意:如果标署名为latest,删除时只用镜像名马上
用ID删除
- [root@localhost ~]# docker rmi c15
复制代码 注意:
用ID删除时,不能有同ID的镜像,好比修改镜像标签而天生的新的镜像,该镜像的ID和原始镜像是雷同的,此时不能用ID删除。
5.存出镜像和载入镜像
- [root@localhost ~]# docker save -o lamp mattrayner/lamp
- [root@localhost ~]# docker rmi mattrayner/lamp
- [root@localhost ~]# docker load<lamp
复制代码 6.上传镜像
- [root@localhost ~]# docker tag mattrayner/lamp 58wangjunqing/lamp:lamp
复制代码 注意:
要想将自己的镜像上传到Docker,必要修改镜像名字,名字的前缀要利用Docker账号
- [root@localhost ~]# docker login
- 输入账号和密码后即可登录成功
- [root@localhost ~]# docker push 58wangjunqing/lamp:lamp
- [root@localhost ~]# docker search 58wangjunqing
复制代码 备注:注册Docker账号,登录网址https://hub.docker.com/
四、Docker容器操纵
1.容器的创建与启动
- [root@localhost ~]# docker create -it mattrayner/lamp /bin/bash
复制代码 注意:
-i:让容器的输入保持打开状态
-t:让Docker分配一个伪终端
-d:以守卫进程的方式运行该容器
此命令只是把容器创建了出来,并没有运行
- [root@localhost ~]# docker ps -a
复制代码 2.容器的运行
- [root@localhost ~]# docker start 5a
- 在创建容器时直接启动容器
- [root@localhost ~]# docker run centos:7 /usr/bin/bash -c "ls /root"
- 注意:此命令只是用该容器执行了一下ls命令,随后此容器就关闭了
- 在启动容器时持续在后台运行
- [root@localhost ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
- 或
- [root@localhost ~]# docker run -dit centos:7 /bin/bash
复制代码 3.容器的制止
- [root@localhost ~]# docker stop b18
复制代码 4.进入容器
- [root@localhost ~]# docker exec -it 03f /bin/bash
复制代码 退出
- [root@03f062851c52 /]# exit
复制代码 5.容器导出
- [root@localhost ~]# docker export 03f >centos7
复制代码 6.容器导入天生镜像
- [root@localhost ~]# docker import centos7 centos7:test
- [root@localhost ~]# docker images
复制代码 7.容器删除
- [root@localhost ~]# docker rm 7f
复制代码 删除全部容器
- docker rm -f $(docker ps -a | awk '{print $1}')
复制代码 8.端口映射
- [root@consul ~]# docker pull httpd
复制代码 (1)随机映射端口
- [root@consul ~]# docker run -d -P httpd
- [root@consul ~]# docker ps -a
复制代码 (2)指定映射端口
- [root@consul ~]# docker run -d -p 49280:80 httpd
- [root@ consul ~]# docker ps -a
复制代码 备注:
49280:是映射到外部的端口,这个端口范围通常是从32768到61000
80:是容器的端口
备注:
在开启防火墙的环境下,创建容器时如果指定了端口映射,转发规则会自动的添加到docker主机的防火墙策略中,这样,外部主机就可以通过docker主机的ip地点+容器对外映射的端口访问容器的服务,这样就包管了docker主机的安全性
如果要关闭防火墙,会提示无法创建iptables策略,重启一下docker进程即可
9.容器互联
(1)创建源容器
- [root@consul ~]# docker run -dit --name web01 centos:7
复制代码 (2)创建接收容器
- [root@consul ~]# docker run -dit --name web02 --link web01:web01 centos:7
复制代码 备注:
--link web1:web1
冒号前的web1,是第一个必要链接的容器的名字
冒号后的web1,是链接到第二个容器后,为第一个容器起的别名
(3)测试容器互联
- [root@consul ~]# docker exec -it web02 /bin/bash
- [root@71591dd4a58e /]# cat /etc/hosts
- 127.0.0.1 localhost
- ::1 localhost ip6-localhost ip6-loopback
- fe00::0 ip6-localnet
- ff00::0 ip6-mcastprefix
- ff02::1 ip6-allnodes
- ff02::2 ip6-allrouters
- 172.17.0.2 web01 36411a49ce54
- 172.17.0.3 71591dd4a58e
- [root@71591dd4a58e /]# ping web01
复制代码 五、Docker的数据管理
1.什么是数据卷
Docker 提供的一种长期化数据存储办理方案,用于在容器之间共享和长期化数据。数据卷办理了容器中数据易失性的问题,使得容器可以更加灵活和可移植。
2.创建数据卷
- [root@localhost ~]# docker run -dit -v /data1 -v /data2 --name web03 centos:7
-
- [root@localhost ~]# docker exec -it web03 /bin/bash
- [root@9a398d3ec1f3 /]# cd /data1
- [root@9a398d3ec1f3 data1]# cd /data2
复制代码 3.数据卷容器
- [root@localhost ~]# docker run -dit --volumes-from web03 --name db1 centos:7 /bin/bash
复制代码 4.挂载主机目录作为数据卷
案例1
- [root@localhost ~]# docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web04 httpd
- [root@localhost ~]# echo "ni hao">/data1/index.html
- [root@localhost ~]# curl 192.168.10.101:8080
复制代码 案例2
- [root@localhost ~]# mkdir -p /www/{conf,html}
- 将编辑好的nginx配置文件拷贝到/www/conf
- 将网站代码拷贝到/www/html
- [root@localhost ~]# docker run -dit -p 9090:80 -v /www/conf/nginx.conf:/etc/nginx/nginx.conf -v /www/html:/www/html --name web05 nginx /bin/bash -c "nginx"
-
- [root@localhost conf]# docker run -d -p 9090:80 -v /www/conf/default.conf:/etc/nginx/conf.d/default.conf -v /www/html:/usr/share/nginx/html -v/www/nginx/log:/var/log/nginx --name web05 nginx
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |