在ArchLinux中安装/测试/保存Docker
##安装Docker并查看版本信息##
# pacman -S docker # systemctl start docker # systemctl enable docker # docker version # docker info # docker images
##编辑Docker数据的存储路径##
# vim /lib/systemd/system/docker.service # 或 # vim /lib64/systemd/system/docker.service [Service] Type=notify EnvironmentFile=-/etc/sysconfig/docker ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS LimitNOFILE=1048576 LimitNPROC=1048576
上面的 $OPTIONS 可以用来修改 docker 的家路径[默认是/var/lib/docker]
OPTIONS="--graph /mnt/docker-data --storage-driver btrfs"
##启动##
# systemctl start docker
##把指定(当前)用户加入docker组##
# gpasswd -a $USER docker # newgrp docker #使上面的修改立即生效
##搜索/下载镜像##
# docker search ubuntu # docker search ubuntu -s 10 # docker pull ubuntu # docker pull ubuntu:14.04 # docker pull ubuntu:latest # docker pull dl.dockerpool.com:5000/ubuntu # docker pull busybox # docker pull centos # docker pull base/archlinux
##查看已有镜像##
# docker images # docker inspect container_id/image_id
##运行命令##
# docker run -it ubuntu:14.04 /bin/bash # docker run ubuntu:14.04 /bin/echo 'Hello world'
##连接容器/管理容器数据##
# docker run -d -P training/webapp python app.py # docker run -d -p 5000:5000 training/webapp python app.py # docker run -d -P --name web -v /webapp training/webapp python app.py # docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py # docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
##查看docker进程相关信息##
# docker ps #查看所有容器 # docker top container_id #查看指定容器的进程 # docker logs container_id #显示指定容器的标准输出 # docker stop container_id #停止正在运行的指定容器
##保存修改过的镜像/推送镜像到指定源##
# docker commit [OPTIONS] container_id [REPOSITORY[:TAG]] # docker push 192.168.0.100:5000/ubuntu # 推送镜像库到私有源 # docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定镜像到私有源
##删除容器/镜像##
# docker rm CONTAINER # docker rmi IMAGE # docker rmi ubuntu # docker rmi dl.dockerpool.com:5000/ubuntu
##在Docker中运行SSH进程服务##
以下是用Dockerfile设置sshd服务容器,您可以使用连接并检查其他容器的卷,或者可以快速访问测试容器。
$ sudo cat Dockerfile FROM ubuntu:12.04 MAINTAINER ixyzero.com "[email protected]" RUN apt-get update RUN apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:screencast' | chpasswd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
使用如下命令构建镜像:
$ sudo docker build --rm -t example_sshd .
然后运行它,并使用docker port命令将容器的22端口映射到主机的某一端口
$ sudo docker run -d -P --name test_sshd example_sshd $ sudo docker port test_sshd 22 0.0.0.0:49154
现在你可以使用ssh登陆Docker进程的主机IP地址,端口是49154(IP地址可以使用ifconfig命令获取):
$ ssh [email protected] -p 49154 # The password is ``screencast``. ...
最后在测试完成时,停掉容器,并且删除容器,然后删除镜像:
$ sudo docker stop test_sshd $ sudo docker rm test_sshd $ sudo docker rmi example_sshd
==
Docker的一些参考资料
- http://dockerpool.com/static/books/docker_practice/index.html
- https://docs.docker.com/reference/commandline/cli/
- http://www.widuu.com/chinese_docker/
- http://www.open-open.com/lib/view/open1423703640748.html
- http://edu.csdn.net/course/detail/211
- =
- https://github.com/docker
- https://docs.docker.com/installation/archlinux/
- https://wiki.archlinux.org/index.php/Docker
更多参考链接:
- Docker终极指南 #Nice
- docker使用总结 #Nice
- 8 个你可能不知道的 Docker 知识
- Docker 个人用例
==
在使用docker pull命令安装的镜像/容器存在哪个地方(ArchLinux环境中)?
搜索关键字:
- linux where docker file save
- linux /lib/systemd/system/docker.service
参考链接:
- http://stackoverflow.com/questions/19234831/where-are-docker-images-stored-on-the-host-machine
- http://serverfault.com/questions/664979/docker-systemd-ignores-change-of-default-directory-docker-service
- https://docs.docker.com/articles/systemd/
- https://wiki.archlinux.org/index.php/Docker#Configuration
- http://magicwall.cn/?p=50
《 “Docker相关知识学习” 》 有 31 条评论
Docker官方的安装文档:
https://docs.docker.com/engine/installation/linux/archlinux/
https://docs.docker.com/engine/installation/linux/centos/
https://docs.docker.com/engine/installation/mac/
在Docker中构建一个生产环境可用的Flask应用(既可以学习编写规范的Flask应用,又可以实践Docker的使用,一举多得)
http://nickjanetakis.com/courses/build-a-saas-app-with-flask
https://github.com/nickjj/build-a-saas-app-with-flask
Docker速查表
http://www.wansir.com/archives/244.html
https://github.com/wsargent/docker-cheat-sheet/tree/master/zh-cn
Docker Remote api在安全中的应用杂谈
https://www.secpulse.com/archives/55928.html
科普|云计算的四种服务模式介绍
http://answerywj.com/2017/03/23/Introduction-to-four-service-of-cloud-computing/
`
本文将介绍:
SaaS(Software as a Service):软件即服务;
BaaS(Backend as a Service):后端即服务;
PaaS(Platform as a Service):平台即服务,也被叫做中间件;
IaaS(Infrastructure as a Service):基础设施即服务;
这四种云计算服务模式,并分析之间的联系和区别。
`
用于安全部署Docker的部署清单
https://github.com/GDSSecurity/Docker-Secure-Deployment-Guidelines
一款Docker攻击工具dockerscan
http://blackwolfsec.cc/2017/05/27/docker-security/
https://github.com/cr0hn/dockerscan
`
原理小结
1.修改镜像内容copy reverse_shell.so文件到/usr/share/lib/reverse_shell.so,
2.添加环境变量REMOTE_ADDR=192.168.1.100,REMOTE_PORT=8888,LD_PRELOAD=/usr/share/lib/reverse_shell.so
3.利用LD_PRELOAD预先加载在每次允许docker镜像时反弹shell回来。
`
细数你不得不知的容器安全工具
http://www.cnrancher.com/container-security-tools-need-know/
http://dockone.io/article/2589
https://github.com/docker/docker-bench-security
https://github.com/coreos/clair
https://github.com/kost/dockscan
https://github.com/zuBux/drydock
NIST 发布的应用容器安全指南
http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-190.pdf
Docker 容器构建过程的安全性分析
https://blog.heroku.com/exploration-of-security-when-building-docker-containers
为容器安全苦恼?这份清单整理了27种容器安全工具
https://mp.weixin.qq.com/s/LdXRLftjeh2UgKxncKzCaw
`
Docker 的安全工具可以分为以下几类:
· 内核安全工具:
这些工具源于Linux开源社区,它们已经被docker等容器系统吸纳成为内核级别的基础安全工具。
· 镜像扫描工具:
Docker Hub是最受欢迎的容器镜像仓库,但除Docker Hub之外也有很多其他镜像仓库可供选择。大多数镜像仓库现在都有针对已知漏洞扫描容器镜像的解决方案。
· 编排安全工具:
Kubernetes和Docker Swarm 是两个被普遍使用的编排工具。并且它们的安全功能在过去一年已经得到加强。
· 网络安全工具:
在容器驱动的分布式系统中,网络比以往更为重要。基于策略的网络安全在基于外围的防火墙上的重要性越来越突出。
· 安全基准测试工具:
互联网安全中心(CIS)为容器安全提供了指导方针,这一方针已被Docker Bench和类似的安全基准工具所采用。
· CaaS平台的安全性:
AWS ECS,、GKE和其他CaaS平台通常是基于其母公司的laaS平台来构建其安全功能。然后添加容器专用功能或者借用Docker、Kubernetes的安全功能。
· 容器专用安全工具:
对于容器安全来说,这是一个最优选择。其中,机器学习是中心阶段,因为这类工具能够为容器安全构建智能的解决方案。
`
容器镜像安全概述
http://blog.nsfocus.net/docker-mirror-security/
docker 安全基线规范
https://github.com/Kutim/docker-security
可能是把Docker的概念讲的最清楚的一篇文章
https://mp.weixin.qq.com/s/xSbYTJmLuqsyYEDEIsndZw
`
阅读本文大概需要15分钟,通过阅读本文你将知道一下概念:
· 容器
· 什么是Docker?
· Docker思想、特点
· Docker容器主要解决什么问题
· 容器 VS 虚拟机
· Docker基本概念: 镜像(Image),容器(Container),仓库(Repository)
`
kubernetes从入门到放弃5–(存储原理)
https://jiayi.space/post/kubernetescong-ru-men-dao-fang-qi-5-cun-chu-yuan-li
kubernetes从入门到放弃4–(安全机制)
https://jiayi.space/post/kubernetescong-ru-men-dao-fang-qi-4-an-quan-ji-zhi
kubernetes从入门到放弃3–(网络原理)
https://jiayi.space/post/kubernetescong-ru-men-dao-fang-qi-3-wang-luo-yuan-li
kubernetes从入门到放弃2–(组件架构)
https://jiayi.space/post/kubernetescong-ru-men-dao-fang-qi-2-zu-jian-jia-gou
kubernetes从入门到放弃1–(墙内安装+资源概念)
https://jiayi.space/post/kubernetescong-ru-men-dao-fang-qi-1-qiang-nei-an-zhuang-zi-yuan-gai-nian
Docker Swarm容器集群管理工具
https://jiayi.space/post/docker-swarmrong-qi-ji-qun-guan-li-gong-ju
DockerXScan——Docker镜像漏洞扫描器
https://github.com/MXi4oyu/DockerXScan
Dockerfile 最佳实践
https://blog.qikqiak.com/post/dockerfile-best-practice/
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
`
一般准则和建议
容器应该是短暂的
建立上下文
使用.dockerignore文件
使用多阶段构建
避免安装不必要的包
一个容器只专注做一件事情
最小化镜像层数
对多行参数排序
构建缓存
Dockerfile 指令
FROM
LABEL
RUN
CMD
EXPOSE
ENV
ADD 和 COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
官方仓库示例
推荐
`
gVisor是什么?可以解决什么问题?
https://mp.weixin.qq.com/s/tsG-opTRZCCnykb0z68XJA
`
传统的Container由于隔离性差而不适合作为Sandbox运行不受信工作负载,VM可以提供很好隔离但却额外消耗较多的内存。Google开源的gVisor为我们提供另外一种选择:在牺牲掉一定性能的情况下,它只额外消耗非常少量的内存,却可以提供了类似等级的隔离性。在本文里我们深入gVisor,最后了解一下我们增强gVisor以支持资源控制的方案。
`
谷歌新作gVisor:VM容器融合技术已经到来
https://mp.weixin.qq.com/s/nm3nDMEnF7LaMtZv01LAvw
Google 发布 gVisor – 容器沙箱运行时
https://mp.weixin.qq.com/s/b8KFCv4jwdzcq4T44566HA
http://liubin.org/blog/2018/05/02/gvisor/
https://cloudplatform.googleblog.com/2018/05/Open-sourcing-gVisor-a-sandboxed-container-runtime.html
https://news.ycombinator.com/item?id=16975706
google gvisor开源了
https://github.com/google/gvisor
【报告解读系列一】容器镜像的脆弱性分析
http://blog.nsfocus.net/vulnerability-analysis-container-mirroring/
《2018绿盟科技容器安全技术报告》
http://blog.nsfocus.net/global-threat-analysis-container-safety
容器进化史
http://www.cnblogs.com/bakari/p/8868850.html
容器生态系统
http://www.cnblogs.com/bakari/p/8970553.html
Docker容器时代安全实践
https://mp.weixin.qq.com/s/dgnoD2LG0kxKW-HkBYVuoQ
`
(1)Docker自身安全问题
no.1 Docker容器相关概念
no.2 Daemon安全问题
no.3 镜像安全问题
no.4 运行时安全问题
no.5 生态安全问题
(2)给安全防御体系带来的挑战
no.1 安全策略的精细化管理
no.2 内核安全机制的深入理解
(3)安全防御体系的应对
no.1 主机入侵检测系统
no.2 安全态势感知
no.3 DDoS防御系统
no.4 防火墙管理
(4)Docker安全生态发展方向
Docker 和容器技术的发展可谓是日新月异,对传统的安全方案带来很多挑战。当下的安全方案也都是处于萌芽状态,基本都是靠外部辅助工具(方案)做为安全手段,而docker本身对安全的支持会比较薄弱,这种做法只能暂时把一些安全漏洞从外部补上,而无法从根本上解决。
后续Docker安全可以从下面几块内容开展:
1. 沿着Docker本身,在Docker内部提供原生态的安全机制,让Docker发展和成长都是直接在自身的安全体系下成长;
2. 对于相关生态圈内(例如kubernetes),直接集成安全方案;
3. 在Docker的libnetwork层定制安全专用的安全通信机制。
`
详细介绍进程、容器和VM,以及三者之间的区别
https://medium.com/@jessgreb01/what-is-the-difference-between-a-process-a-container-and-a-vm-f36ba0f8a8f7
29 Docker security tools compared
https://sysdig.com/blog/20-docker-security-tools/
`
Anchore Engine
Aporeto
AppArmor
AquaSec
BlackDuck Docker security
Calico
Capsule 8
Cavirin
Cilium
CoreOS Clair
Docker capabilities and resource quotas
Docker-bench security
Dockscan
Falco
Google Cloud Security Command Center
HashiCorp Vault
Layered Insight
NeuVector
Notary
OpenSCAP
Open Policy agent
REMnux
SELinux
Seccomp
StackRox
Sysdig Secure
Sysdig
Tenable Flawcheck
Twistlock
`
CVE-2019-5736:runc容器逃逸漏洞预警
https://mp.weixin.qq.com/s/b7mJ2ysTREgmWsZeJo3kBA
新近爆出的runc容器逃逸漏洞,用户如何面对?
https://mp.weixin.qq.com/s/fJyrLxR4EtPuqOt18LAINA
`
runc是一个根据OCI(Open Container Initiative)标准创建并运行容器的CLI工具,目前Docker引擎内部也是基于runc构建的。 2019年2月11日,研究人员通过oss-security邮件列表(https://www.openwall.com/lists/oss-security/2019/02/11/2)披露了runc容器逃逸漏洞的详情,根据OpenWall的规定EXP会在7天后也就是2019年2月18日公开。
此漏洞允许以root身份运行的容器以特权用户身份在主机上执行任意代码。实际上,这意味着容器可能会破坏Docker主机(覆盖Runc CLI),而所需要的只是能够使用root来运行容器。攻击者可以使用受感染的Docker镜像或对未受感染的正在运行的容器运行exec命令。针对此问题的已知缓解措施包括:
使用只读主机文件系统运行
运行用户命名空间
不在容器中运行root
正确配置的AppArmor / SELinux策略(当前的默认策略不够)
漏洞披露后,Docker在第一时间发布了18.09.2,用户可升级到此版本以修复该漏洞。但是,通常由于各种因素,很多用户的生产环境并不容易升级太新的Docker版本……
`
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
https://mp.weixin.qq.com/s/MhKQJCgdWg_NcxgpCfTviA
runc 容器逃逸漏洞(CVE-2019-5736)及利用介绍
https://www.exploit-db.com/exploits/463592
https://github.com/feexd/pocs3
https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html
Docker容器安全性分析
https://www.freebuf.com/articles/system/221319.html
`
Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响。本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进行分析。
一、从虚拟化安全到容器安全
1、传统虚拟化技术
2、容器技术
3、安全性
二、Docker容器安全风险分析
1、镜像安全风险
2、容器虚拟化安全风险
3、网络安全风险
三、Docker容器安全机制与解决方案
1、容器虚拟化安全
2、容器安全管理
3、容器网络安全
四、总结
与虚拟化技术相比,Docker容器技术具有敏捷化、轻量化等特点,在推进云原生应用方面具有不可替代性。与此同时,容器技术对于高效性的追求也牺牲了隔离性等安全要求,在安全性方面与虚拟化技术相比还存在较大差距,且所涉及的面较广,涉及到容器的镜像安全、内核安全、网络安全、虚拟化安全、运行时安全等各个层面。
在应用容器技术进行系统部署时,应充分评估安全风险,根据应用场景制定相应安全需求,并整合相关安全解决方案,形成容器安全应用最佳实践。
`
seccomp学习笔记
https://veritas501.space/2018/05/05/seccomp%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
`
seccomp (short for secure computing mode) is a computer security facility in the Linux kernel. It was merged into the Linux kernel mainline in kernel version 2.6.12, which was released on March 8, 2005. seccomp allows a process to make a one-way transition into a “secure” state where it cannot make any system calls except exit(), sigreturn(), read() and write() to already-open file descriptors. Should it attempt any other system calls, the kernel will terminate the process with SIGKILL or SIGSYS. In this sense, it does not virtualize the system’s resources but isolates the process from them entirely.
seccomp 是一种内核中的安全机制,正常情况下,程序可以使用所有的syscall,这是不安全的,比如劫持程序流后通过execve的syscall来getshell。通过seccomp我们可以在程序中禁用掉某些syscall,这样就算劫持了程序流也只能调用部分的syscall了。
`
https://outflux.net/teach-seccomp/
https://github.com/gebi/teach-seccomp
seccomp介绍
https://blog.csdn.net/mashimiao/article/details/73607485
https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt
http://man7.org/linux/man-pages/man2/prctl.2.html
http://man7.org/linux/man-pages/man2/seccomp.2.html
Introduction to seccomp: BPF linux syscall filter
https://blog.yadutaf.fr/2014/05/29/introduction-to-seccomp-bpf-linux-syscall-filter/
`
Seccomp是Secure computing mode的缩写,Linux kernel 所支持的一种安全机制,用于限制系统调用的使用范围。当然,需要有一个配置文件来指明进程是否有权使用当前系统调用(system call)。如果在容器中使用该特性,可以限制容器内进程能使用的系统调用范围。
在Linux系统里,大量的系统调用直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。通过Seccomp特性限制系统调用的使用范围,使程序进入一种『安全』的状态。当进程使用系统调用时,kernel都会检查对应白名单以确认该进程是否有权使用当前系统调用。如果黑客获得系统的访问权限,seccomp将阻止他们使用任何未允许的系统调用。
`
浅谈如何打造对容器友好的应用
https://blog.dteam.top/posts/2019-11/%E6%B5%85%E8%B0%88%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E5%AF%B9%E5%AE%B9%E5%99%A8%E5%8F%8B%E5%A5%BD%E7%9A%84%E5%BA%94%E7%94%A8.html
`
# 前言
容器化是一种全新的产品交付方式,几乎是颠覆了传统的软件交付方式和交付流程,并且在各大公司都已经有了成熟的应用,自从k8s问世之后,容器化的交付方式得到了前所未有的高速发展。k8s的资源调度有效提高了资源率利用率,充分利用每台Node节点的计算能力,大大降低了运维压力,以及降低了基础设施的总体成本。
本文就来谈谈如何打造对容器友好的应用,以便现有的应用可以很容易逐步迁移到容器中,实现容器化的交付,方便未来逐步向k8s迁移。
# 如何让应用程序对容器友好
* 依赖轻量化
* 独立运行
* 支持环境变量注入
* 状态分离
* 处理多时区问题
本篇文章浅谈了如何打造对容器友好的应用需要注意的一些地方。只是想将应用迁移到容器运行的话还是比较容易的,差不多以上几点注意到之后就可以简单在容器环境启动一个单实例容器镜像跑起来了。如果想做到更加适配容器集群环境的话,通常还需要考虑到以下一些问题:
* 日志打印到终端,而不是存储日志文件
* 多实例如何协调一致。如接口幂等,防止用户请求分配到不同实例造成数据处理异常,多实例负载均衡,而不是互相冲突等等
* 容器探针。需要应用程序自己实现一个活性探测接口(如http, tcp, 脚本探测等)
* ……
容器的出现带来了一种全新的交付方式,k8s的出现将容器的热度大幅度拉升,基于容器和k8s的交付方案层出不穷。为了赶上这波热度,我本人也做了很多实际的体验与调研,特此总结此篇文章,以供其他对容器化有兴趣的技术人员参阅。
`
一文搞懂 Docker、Containerd、RunC 间的联系和区别
https://mp.weixin.qq.com/s/kVh_EXGeMy_UI6qIgbmsGQ
`
现在创建一个docker容器的时候,Docker Daemon 并不能直接帮我们创建了,而是请求 containerd 来创建一个容器。当containerd 收到请求后,也不会直接去操作容器,而是创建一个叫做 containerd-shim 的进程。让这个进程去操作容器,我们指定容器进程是需要一个父进程来做状态收集、维持 stdin 等 fd 打开等工作的,假如这个父进程就是 containerd,那如果 containerd 挂掉的话,整个宿主机上所有的容器都得退出了,而引入 containerd-shim 这个垫片就可以来规避这个问题了,就是提供的live-restore的功能。这里需要注意systemd的 MountFlags=slave。
然后创建容器需要做一些 namespaces 和 cgroups 的配置,以及挂载 root 文件系统等操作。runc 就可以按照这个 OCI 文档来创建一个符合规范的容器。
真正启动容器是通过 containerd-shim 去调用 runc 来启动容器的,runc 启动完容器后本身会直接退出,containerd-shim 则会成为容器进程的父进程, 负责收集容器进程的状态, 上报给 containerd, 并在容器中 pid 为 1 的进程退出后接管容器中的子进程进行清理, 确保不会出现僵尸进程。containerd,containerd-shim和容器进程(即容器主进程)三个进程,是有依赖关系的。
`
Docker、Containerd、RunC分别是什么
https://mp.weixin.qq.com/s/sfOXxBoppV6QZSpblMsMJQ