运维知识体系

运维知识体系

运维知识体系总结,持续更新,欢迎转载。
缓存知识体系

缓存知识体系

运维知识体系之缓存,分层多级缓存体系。
K8S实践指南

K8S实践指南

Docker和Kubernetes实践指南(每周更新)
新运维课堂

新运维课堂

全新体系化课程,开启运维新征程!

只要一小时,零基础入门Docker

Docker有只黑白猫 发表了文章 • 0 个评论 • 31 次浏览 • 2020-01-21 15:52 • 来自相关话题

简介: Docker是什么? Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中 ...查看全部

简介: Docker是什么? Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。



原文链接

Docker的三个概念

1.镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含 Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

2.容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

3.仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。



Docker的安装和卸载

Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:




[root@xxx ~]# docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64

Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64


查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。




Docker中关于镜像的基本操作


安装完Docker引擎之后,就可以对镜像进行基本的操作了。



我们从官方注册服务器(https://hub.docker.com)的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:




[root@xxx ~]# docker search centos # 查看centos镜像是否存在
[root@xxx ~]# docker pull centos # 利用pull命令获取镜像
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest

[root@xxx ~]# docker images # 查看当前系统中的images信息
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 9 days ago 196.5 MB


以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。



(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本




[root@xxx ~]# docker run -it centos:latest /bin/bash # 启动一个容器
[root@72f1a8a0e394 /]# # 这里命令行形式变了,表示已经进入了一个新环境
[root@72f1a8a0e394 /]# git --version # 此时的容器中没有git
bash: git: command not found
[root@72f1a8a0e394 /]# yum install git # 利用yum安装git
......
[root@72f1a8a0e394 /]# git --version # 此时的容器中已经装有git了
git version 1.8.3.1


此时利用exit退出该容器,然后查看docker中运行的程序(容器):




[root@xxx ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72f1a8a0e394 centos:latest "/bin/bash" 9 minutes ago Exited (0) 3 minutes ago angry_hodgkin


这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:




[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git

[root@xxx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos git 52166e4475ed 5 seconds ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB


其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。



此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。




[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash
[root@520afc596c51 /]# git --version
git version 1.8.3.1


利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。



(2)利用Dockerfile创建镜像



Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。一个简易的Dockerfile文件如下所示,官方说明:Dockerfile reference:




# 说明该镜像以哪个镜像为基础
FROM centos:latest

# 构建者的基本信息
MAINTAINER xianhu

# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git

# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/


有了Dockerfile之后,就可以利用build命令构建镜像了:




[root@xxx ~]# docker build -t="xianhu/centos:gitdir" .


其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。



构建完成之后,同样可以使用docker images命令查看:




[root@xxx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos gitdir 0749ecbca587 34 minutes ago 359.7 MB
xianhu/centos git 52166e4475ed About an hour ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB


以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。




[root@xxx ~]# docker rm container_name/container_id
[root@xxx ~]# docker rmi image_name/image_id


镜像其他操作指令:



点击了解更多,查看剩余部分



了解更多



关键字:Docker  云计算  开发运维  编码  程序


最为详细的Docker入门吐血总结

Docker有只黑白猫 发表了文章 • 0 个评论 • 28 次浏览 • 2020-01-21 15:52 • 来自相关话题

简介: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker ...查看全部

简介: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker是什么?

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图。

image.png

这是我在某招聘网站上看到的招聘 Java开发工程师 的招聘要求,其中有一条熟悉 docker 成为了你快速入职的加分项,由此可见熟悉 docker 在互联网公司的地位之重要。



当然对于我们 CTF选手 而言,熟悉 docker 可以快速搭建 CTF环境 ,完美地还原比赛真实漏洞的场景,帮助我们快速提升自己。



市面上已经有很多优秀的教程,但是很多原理性的东西,笔者认为那些教程对初学者而言还是很难理解,感觉没有说清楚(笔者自己都觉得挺懵逼的),为了让初学者少走弯路,我将以我的学习经历以及作为一个 CTF选手 的角度,编写此套教程,来带大家去了解并熟练运用 docker ,祝愿各位读者朋友们学完此套教程后,在未来企业面试中能够多一项加分的筹码,能够帮助到大家,我觉得就很值了。



既然说了这么多, docker 到底是个什么东西呢?

我们在理解 docker 之前,首先我们得先区分清楚两个概念,容器和虚拟机。



可能很多读者朋友都用过虚拟机,而对容器这个概念比较的陌生。



我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。



而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。



容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。通过下面这幅图我们可以很直观的反映出这两者的区别所在。

image.png

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。



而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。



Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。



总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。



Docker的优势



了解更多



点击了解更多,查看剩余部分


cobbler部署好后,客户端安装报错。求指点

回复

cobblerlei2747 回复了问题 • 1 人关注 • 2 个回复 • 163 次浏览 • 2020-01-21 15:51 • 来自相关话题

【新加坡】知名电商平台招聘运维开发工程师

回复

DevOpsechodada 发起了问题 • 1 人关注 • 0 个回复 • 41 次浏览 • 2020-01-21 15:51 • 来自相关话题

其他主机如何通过xshell远程连接宿主机下的NAT虚拟机

回复

系统管理freedom 发起了问题 • 1 人关注 • 0 个回复 • 33 次浏览 • 2020-01-21 15:51 • 来自相关话题

其他主机连接宿主机下的NAT模式虚拟机

回复

系统管理freedom 发起了问题 • 1 人关注 • 0 个回复 • 32 次浏览 • 2020-01-21 15:51 • 来自相关话题

saltstack执行命令后,返回结果特别慢

回复

SaltStack哈哈哈 发起了问题 • 1 人关注 • 0 个回复 • 291 次浏览 • 2019-12-01 23:44 • 来自相关话题

求一个awk分隔的算法

脚本编程qxy123456 回复了问题 • 3 人关注 • 2 个回复 • 610 次浏览 • 2019-11-25 12:51 • 来自相关话题

老大让用saltstack管理windows部署软件,一直搞不定,希望赵班长可以指点迷津,谢谢了。

SaltStack小马过河 回复了问题 • 2 人关注 • 1 个回复 • 2204 次浏览 • 2019-11-25 12:51 • 来自相关话题

谁知道我的Poller Processes 为什么一直居高不下

回复

ZabbixDUFANFAN 发起了问题 • 1 人关注 • 0 个回复 • 239 次浏览 • 2019-11-25 12:50 • 来自相关话题