博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自顾不暇的系统管理员如何面对开发人员的“Challenge”?|航海日志 Vol.20
阅读量:7060 次
发布时间:2019-06-28

本文共 3574 字,大约阅读时间需要 11 分钟。

➤ 自顾不暇的系统管理员如何面对开发人员的“Challenge”?

6 月 27 日,开展了一个关于“系统管理员 Docker ”的网络研讨会。这个研讨会基于日常生活中的常见场景:系统管理员坐在桌旁忙自己的事情的时候,开发人员走了进来,说:“这是新的应用程序,它被打包在 Docker 镜像里了,请尽快部署。”因此,该会议旨在为系统管理员提供管理容器化应用程序的一些指导。(视频地址(需翻墙):https://www.youtube.com/watch?v=kT76aLugp48)

➤ 北美 Moby 峰会与开源峰会

下一届 Moby 峰会将于 2017 年 9 月 14 日在洛杉矶举行,作为北美开源峰会的一部分。继以前版本的成功之后,我们将保持同样的会议形式,其中包括早上的短暂的技术讲座/演示,下午的一些非正式的交流会议。于此同时,我们正在寻找可以谈论他们的 Moby 项目的使用情况的人。

使用 Docker Secrets 保护 Atsea App

将应用程序配置信息作为环境变量传递曾经被认为是 12 因素应用程序中的最佳实践。虽然这种做法可以在日志中显示信息,但是它难以追踪信息暴露的方式和时间。与使用环境变量不同的是,Docker 使用 secrets 来管理系统配置和机密信息。

➤ 使用 Pod 安全策略保护 Kubernetes 群集

随着容器技术的逐渐成型和越来越多的应用程序向着集群环境转型,明确和实施集群安全策略变得越来越重要。集群安全策略提供了一个框架,来确保 pod 和容器仅仅只能使用适当的权限和访问有限的资源集。安全策略还为集群管理者提供了一种方法,以通过限制特定成员、组或命名空间的可用功能,来控制资源的创造。

本文将向您介绍 Kubernetes 中的 pod 安全策略。由于 pod 安全策略可能特定于组织的规则和特定应用程序的要求,所以没有一个适合所有情况的方法 -我们将讨论三种常见情况,并引导您针对个人的实际情况来创建 pod 安全策略。

情况1:防止 Pod 以 Root 权限运行

限制 pod 中的容器以 root 用户身份运行,从而创建更安全的群集环境是 pod 安全策略最常见的用途之一。

情况2:阻止 Pod 访问某些卷类型

作为集群管理者,您可能希望限制容器的可用存储选择,以最小化成本或阻止信息访问。这可以通过在 pod 安全策略的卷密钥中指定可用卷类型来实现。

情况3:防止 Pod 访问主机端口

另一个常见的安全问题是容器可以访问主机资源,如主机端口或网络接口。 Pod 安全策略允许集群管理员实施深入的安全规则来限制此类访问。

将您的第一个镜像发布到 Docker Hub

感谢各位关注我们之前关于 Docker 的推文,让我们潜入探索更多吧。你们已经明白了如何运行一个容器并且拉取镜像,现在我们要为别人发布我们的镜像。我们需要一些什么东西呢?

  • Docker文件

  • 你的应用程序

为什么我们需要Docker文件呢?

按以往的传统,我们有一个应用程序(假设是 Python 应用),那么我就需要在计算机中安装一个 Python 的运行环境(或者所有的依赖)。这也产生了一个问题:当你在本地,或者是在服务器上运行该应用程序时,运行环境必须与我们的相同。当基于 Docker 运行时,你不再需要任何东西(不需要环境)。你可以将可移植的 Python 环境作为镜像,不再需要安装。然后,你的构建可以将应用程序代码和基本 Python 镜像包含在一起,确保应用程序,其依赖关系和环境都一起运行。这些可移植的镜像被称为 Docker 文件。

Docker 文件是容器中的环境文件,它有助于为你的容器创建一个隔离的环境。比如哪些端口将暴露于外部,哪些文件你想要“复制”到环境中。之后,你在这个 Docker 文件中定义的应用程序的构建将在任何地方都正常运行。

让我们创建一个新目录并建立一个 Docker 文件。

FROM python:3.6WORKDIR /appADD . /appRUN pip install -r requirements.txtEXPOSE 80ENV NAME worldCMD [“python”, “app.py”]复制代码

现在你已经创建好了 Docker 文件。你可以看到它的语法非常简单易懂。

下一步是创建一个 python 应用。

from flask import Flaskimport osimport socketapp = Flask(__name__)@app.route("/")def hello():html = "

Hello {name}!

" \"Hostname: {hostname}
"return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname())if __name__ == "__main__":app.run(host='0.0.0.0', port=80)复制代码

OK ! 你已经创建完了所有的必要文件,现在开始构建你的应用吧。

使用ls指令查看所有文件:

$ lsapp.py requirements.txt Dockerfile复制代码

创建镜像:

docker build -t imagebuildinginprocess .复制代码

新建的镜像在哪呢?它在本地的镜像注册表中。

$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEimagebuildinginprocess latest 4728a04a9d39 14 minutes ago 694MB复制代码

运行它们。

docker run -p 4000:80 imagebuildinginprocess复制代码

我们在这里所做的是将端口 4000 映射到容器暴露的 80 端口。你应该可以看到 Python 提示我们的应用被部署在端口 http://0.0.0.0:80 。但是事实上,信息来源于内部的容器。它并不知道我们将 80 端口映射到了4000,使得服务的地址变成了 http://localhost:4000 。在浏览器中输入该地址,我们就会在网页上看到" Hellow World "和容器的编号。

我们将把我们的镜像推向注册表,这样我们就可以在任何地方使用它。Docker CLI 默认使用公共注册表。

用你的本地计算机登陆到 Docker 公共注册表。(如果你没有账号的话,去 cloud.docker.com 上注册吧)

docker login复制代码

给镜像打标签:命名镜像的版本号。这不是必须的步骤,但是推荐你们这么做。因为这可以很好的帮助我们进行版本管理。(就像 ubuntu:16.04 和 ubuntu:17.04 那样)

docker tag imagebuildinginprocess rusrushal13/get-started:part1复制代码

发布镜像:将你打过标签的镜像上传到仓库中。该操作完成后,你就可以在Docker Hub中看到你的新镜像和拉取指令。

docker push rusrushal13/get-started:part1复制代码

OK,大功告成,你已经成功的发布了第一个镜像!赶紧去 Docker Hub 中查看一下吧。

这个 GitHub 上的仓库有很大的参考价值,建议各位前去查看。( https://github.com/jessfraz/dockerfiles)

这一期的『航海日志』就到这里,下期再浪~

参考链接

  • https://blog.docker.com/2017/07/docker-sysadmin-webinar-qa/

  • https://blog.docker.com/2017/07/title-moby-summit-alongside-open-source-summit-north-america/

  • https://blog.docker.com/2017/07/securing-atsea-app-docker-secrets/

  • https://docs.bitnami.com/kubernetes/how-to/secure-kubernetes-cluster-psp/#assumptions-and-prerequisites

  • https://dev.to/rusrushal13/publish-your-first-image-to-docker-hub

转载地址:http://ddfll.baihongyu.com/

你可能感兴趣的文章
$('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法
查看>>
jquery 新建的元素事件绑定问题
查看>>
最新版的Android4.4.2 SDK无法下载解决
查看>>
c fopen
查看>>
Linux 小知识翻译 - 「Linux」和「发行版」之间的关系
查看>>
FBX导入错误 :ImportFBX Errors:
查看>>
《设计模式》工厂家族
查看>>
自定义View,随着手指运动的小球
查看>>
Activity生命周期函数、onSaveInstanceState()和onRestoreInstanceState()的介绍
查看>>
分表处理设计思想和实现[转载]
查看>>
iOS开发UI篇—popoverController简单介绍
查看>>
Transform 1
查看>>
Odoo 外协加工产品的实现
查看>>
android WebView总结
查看>>
HTTP协议详解
查看>>
hibernate不调用save也保存上了
查看>>
netty 粘包的解决策略
查看>>
10 Things Every Java Programmer Should Know about String
查看>>
C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用...
查看>>
C语言的左位移能不能超过8位?
查看>>