- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Docker的核心及安装的具体使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
一.docker是什么?
(1)docker是在linux容器里运行应用的开源工具,是一种轻量级的“虚拟机” 。
logo设计为蓝色鲸鱼,鲸鱼可以看作为宿主机,上面的集装箱可以理解为相互隔离的容器,每个集装箱中包含自己的应用程序.
(2)docker和虚拟机的区别 。
作为一种轻量级的虚拟化方式,docker 与传统虚拟机相比具有显著的优势.
docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虛拟机操作系统层,而docker容器是直接在操作系统层面之上实现的虚拟化, 如图:
(3)docker的使用场景 。
现在开发者需要能方便地创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时间地点可获取这些资源,这正是docker所能提供的。docker 的容器技术可以在一台主机 上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大地提高了工作效率.
二.docker的核心概念及安装 。
(1)镜像 。
docker的镜像(mage) 是创建容器的基础,类似虚拟机的快照 可以理解为是一一个面向docker容器引擎的只读模板。比如,一个镜像可以是一个完整的 centos 操作系统环境,称为-个centos 镜像;可以是一个安装了mysql的应用程序,称为一个mysql镜像,等等.
(2)容器 。
dooker的容器(container) 是从镜像创建的运行实例。它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,可以保证安全性的平台。可以把容器看作一个简易版的linux环 境,docker 利用容器来运行和隔离应用.
(3)仓库 。
docker仓库(repository) 是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(public) 或者私有仓库(private), 这样一来当 下次要在另外一台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了.
(4)安装docker 。
主机有网的话可以直接安装, 。
配置yum 。
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]
# rm -rf /etc/yum.repos.d/*
[root@localhost ~]
# vim /etc/yum.repos.d/a.repo
[aaa]
name=asd
baseurl=
file
:
///media
gpgcheck=0
[root@localhost ~]
# mount /dev/cdrom /media/
[root@localhost ~]
# yum -y install docker
|
安装完成可以启动docker,并设置开机自启 。
1
2
3
4
5
|
[root@localhost ~]
# systemctl start docker
[root@localhost ~]
# systemctl enable docker
created
symlink
from
/etc/systemd/system/multi-user
.target.wants
/docker
.service to
/usr/lib/systemd/system/docker
.service.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@localhost ~]
# docker version //查看docker版本
client:
version: 1.13.1
api version: 1.26
package version: docker-1.13.1-75.git8633870.el7.centos.x86_64
go version: go1.9.4
git commit: 8633870
/1
.13.1
built: fri sep 28 19:45:08 2018
os
/arch
: linux
/amd64
server:
version: 1.13.1
api version: 1.26 (minimum version 1.12)
package version: docker-1.13.1-75.git8633870.el7.centos.x86_64
go version: go1.9.4
git commit: 8633870
/1
.13.1
built: fri sep 28 19:45:08 2018
os
/arch
: linux
/amd64
experimental:
false
|
分为服务端与客户端 。
三.docker镜像操作 。
(1)搜索镜像(前提电脑有网) 。
1
2
3
4
5
6
7
8
9
|
[root@localhost ~]
# docker search dhcp
index name description stars official automated
docker.io docker.io
/networkboot/dhcpd
suitable
for
running a dhcp server
for
you... 43 [ok]
docker.io docker.io
/joebiellik/dhcpd
dhcp server running on alpine linux 15 [ok]
docker.io docker.io
/gns3/dhcp
a dhcp container
for
gns3 using dnsmasq 3 [ok]
docker.io docker.io
/instantlinux/dhcpd-dns-pxe
serve dns, dhcp and tftp from a small alpi... 2 [ok]
docker.io docker.io
/ictu/dhcpd-tftpd
dhcpd tftpd container 1 [ok]
docker.io docker.io
/marcelwiget/dhcptester
simple dhcp client simula
|
(2)获取镜像 。
1
|
[root@localhost ~]
# docker pull docker.io/network/dhcpd //下载上面最开头的dhcp
|
还有一种就是插入已经下载好的dhcp 。
做成光盘插入到主机中 。
1
2
3
4
5
6
|
[root@localhost ~]
# mount /dev/cdrom /media/
[root@localhost ~]
# cd /media/
[root@localhost media]
# ls
dhcp
[root@localhost media]
# cp dhcp /
[root@localhost media]
#
|
1
2
3
4
5
6
7
8
9
10
|
[root@localhost /]
# docker load < dhcp
fccbfa2912f0: loading layer 116.9 mb
/116
.9 mb
e1a9a6284d0d: loading layer 15.87 kb
/15
.87 kb
ac7299292f8b: loading layer 14.85 kb
/14
.85 kb
a5e66470b281: loading layer 5.632 kb
/5
.632 kb
a8de0e025d94: loading layer 3.072 kb
/3
.072 kb
e2e29955c5aa: loading layer 12.7 mb
/12
.7 mb
12e14fab4dd4: loading layer 49.15 kb
/49
.15 kb
47bdfd3bbf39: loading layer 4.096 kb
/4
.096 kb
loaded image: docker.io
/networkboot/dhcpd
:latest
|
将镜像下载到本地 。
(3)查看镜像信息 。
1
2
3
|
[root@localhost /]
# docker images
repository tag image
id
//
镜像
id
created size
docker.io
/networkboot/dhcpd
latest 6f98b6b9b486 19 months ago 125 mb
|
1
|
[root@localhost /]
# docker inspect 6f98b6b9b486 \查看镜像id详细信息
|
镜像的详细信息中包括创建时间、系统版本.主机名.域名.用户.卷.标签.操作系统.设备id等各种信息.
1
2
3
|
[root@localhost /]
# docker tag docker.io/networkboot/dhcpd dhcp:dhcp
第一个dhcp:名称
第二个dhcp:标签
|
(4)删除镜像 。
1
2
|
[root@localhost /]
# docker rmi dhcp:dhcp
untagged: dhcp:dhcp
|
四.docker容器操作 。
容器是docker的另一一个核心概念,简单来说,容器是镜像的一个运行实例,是独立运行的一个或一组应用及它们所必需的运行环境,包括文件系统、系统类库. shell 环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层 。
(1)容器的创建与启动 。
1
2
3
|
[root@localhost /]
# docker create -it docker.io/networkboot/dhcpd /bin/bash
e392026ddd186d01cbd3306acae15f2f197dc9874a84ea241d347c7fe20a0946
|
常用选项: -i表示让容器的输入保持打开: -t表示让docker分配一个伪终端.
1
2
3
|
[root@localhost /]
# docker ps -a \\查看所有容器运行状态
container
id
image
command
created status ports names
e392026ddd18 docker.io
/networkboot/dhcpd
"/entrypoint.sh /b..."
about a minute ago created elegant_goldwasser
|
输出信息显示容器的id号.加载的镜像.运行的程序.创建时间、目前所处的状态、端口映射.容器名称等。其中状态-栏为created表示当前的容器是新创建的并处于停止状态.
1
2
|
[root@localhost /]
# docker start e392026ddd18 \\启动容器 ,上面的id
e392026ddd18
|
容器启动后,可以看到容器状态一栏已经变为up,表示容器已经处于启动状态.
(2)容器的运行与终止 。
1
|
[root@localhost /]
# docker stop 容器的id号
|
(3)容器的进入 。
1
2
|
[root@localhost /]
# docker exec -it e392026ddd18 /bin/bash
root@e392026ddd18:/
#
|
用户可以通过所创建的终端来输入命令,通过exit命令退出容器. 。
1
2
3
4
5
|
root@e392026ddd18:/
# ls
bin core entrypoint.sh home lib64 mnt proc run srv tmp var
boot dev etc lib media opt root sbin sys usr
root@e392026ddd18:/
# exit
exit
|
(4)容器的导出导入 。
容器是最小化,导致一些命令不能使用,所以就要从容器里面导出到本地来设置,设置完再导入进容器就可以.
导出命令如下:
1
|
[root@localhost /]
# docker export e392026ddd18>/etc/dhcp/dhcpd.conf
|
乱数字为容器的id号 。
把dhcp主配置文件导出来配置, 。
导入命令如下:
1
|
[root@localhost /]
# docker import /etc/dhcp/dhcpd.conf > e392026ddd18
|
(5)容器的删除 。
可以使用dockerrm命令将一个已经终止状态的容器进行删除.
一个镜像可以包含多个容器 。
1
2
3
4
5
6
|
[root@localhost /]
# docker stop e392026ddd18 \\先停止
e392026ddd18
[root@localhost /]
# docker rm e392026ddd18 \\再删除
e392026ddd18
[root@localhost /]
# docker ps -a
container
id
image
command
created status ports names
|
五.docker资源控制 。
cgroup是controlgroup的简写,是linux内核提供的一种限制所使用物理资源的机制,这些资源主要包括cpu.内存、blkio。 下面就这3个方面来谈一下docker是如何使用cgroup机制进行管理的.
(1)限制cpu使用速率 。
例如,将容器60ff4594cc73的cpu使用设置为20000,设置cpu的使用率限定为20%
1
|
[root@localhost ~]
# echo 20000 >/sys/fs/ cgroup/ cpu/ system. slice/docker-60ff4594cc73b5474477 636b25b41f 16e1 66a3606aed22 6522d420d0c296990d. scope/cpu . cfs_ quota _us
|
(2)多任务按比例分享cpu 。
例如,运行3个新建容器a. b、c,占用cpu资源的比例为1:1:2就可以这样执行
1
2
3
|
[root@localhost /]
# docker run -tid --cpu-shares 1024 +镜像a
[root@localhost /]
# docker run -tid --cpu-shares 1024 +镜像b
[root@localhost /]
# docker run -tid --cpu-shares 2048 +镜像c
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.51cto.com/14400213/2453357 。
最后此篇关于Docker的核心及安装的具体使用的文章就讲到这里了,如果你想了解更多关于Docker的核心及安装的具体使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是 Robert,我在使用 JavaScript 时遇到了一些问题。 我得到了一个 (这是隐藏的)。我唯一想问你的是:我想检查日期是否在 中已通过。如果通过了我想改变CSS中容器的背景颜色。不幸的
所以我的问题是我想要求输入使用扫描仪的信息,但它根本不打印出来。当它显示跳过的扫描仪的值时,Scanner CheeseType = new Scanner(System.in);,我得到 null。
Fe_Order_Items fe_order_items_id fe_order_specification_id fe_users_id fe_menu_items_id fe_order_ite
人们普遍提到 - “Celery 是一个基于分布式消息传递的异步任务队列/作业队列”。虽然我知道如何使用 Celery 工作人员等。但内心深处我不明白分布式消息传递的真正重要性和意义以及任务队列在其中
我试图理解下面的代码,但有一些我以前从未见过的东西,那就是:“\&\&” 这是代码: int main() { fork() \&\& (fork() || fork()); exit(EXIT_SU
您好,我是论坛新手。 我有很多使用 python 的经验,但没有使用 tkinter 的经验。 这是我的代码: from tkinter import * def Done(): celEn
在 C# 中,假设我们有一个通用类和一个具体类 [Serializable] public class GenericUser { ... [Serializable] public class Co
我尝试使用的库有一个通用抽象类,其中有两个实现该基础的子类。我想编写一个类,它将根据构造函数参数的参数类型自动创建其中一个子级的实例。 基类没有默认构造函数 基类的构造函数也需要其他通用类的实例 代码
我是 Angular 的新手,我一直在尝试了解它的工作原理。我正在制作一个简单的应用程序,其中有人可以通过简单的 html 界面添加用户并使用 SQLite 将其存储在数据库中,然后他们可以编辑或删除
我想创建一个用于存储数据的对象,限制读/写访问。 例如: OBJ obj1; OBJ obj2; // DataOBJ has 2 methods : read() and write() DataO
注入(inject)/隔离密封在 dll 中且不实现接口(interface)的类的首选方法是什么? 我们使用 Ninject。 假设我们有一个类“Server”,我们想要注入(inject)/隔离“
在花费了至少 10 个小时的时间浏览在线资源、视频和教程之后,我有两个关于将我的 Android 应用程序与 mySQL 数据库连接的问题。 保存文件 1) 所有教程都将 php 文件保存在 C/WA
许多有经验的开发人员建议不要使用 Django multi-table inheritance因为它的性能不佳: Django gotcha: concrete inheritance通过 Jacob
我知道我冒着挨揍的风险,但我觉得我在这件事上要绕圈子。为了让模型可用于多个项目,我们已将模型移出到一个单独的项目(一个 DLL)中,作为一系列要实现的接口(interface)。我们的界面上有这一行:
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我遇到了一个特定 mac 的问题,它没有显示我正确构建的某个网站。我测试过的所有其他 mac 和 pc 都能正确显示网站,但是在所有浏览器中这个特定的 mac 显示不正确就像提到的那样,这在其他每台计
给定这段代码 public override void Serialize(BaseContentObject obj) { string file = ObjectDataStoreFold
我已经搜索了网络和我的服务器,但我无法找到我网站的 php.ini。我的网站出现以下错误。 Class 'finfo' not found Details G:\inetpub\wwwroot\lan
SQL 爱好者: 我正在尝试通过玩以下用例来挖掘我一些生疏的 sql 技能: 假设我们有一家有线电视公司,并且有跟踪的数据库表: 电视节目, 观看我们节目的客户,以及 观看事件(特定客户观看特定节目的
我正在设计一个使用 HTML5 网络组件(HTML 导入、影子 DOM、模板和自定义 HTML 元素)的网络应用程序,这些组件是通过普通 JavaScript(无框架)实现的。 Web 应用程序相当简
我是一名优秀的程序员,十分优秀!