=Start=
# 在 Mac OS X 上安装 Docker
## 通过 homebrew 进行安装
brew search docker brew info docker brew cask info docker brew cask install docker docker-toolbox
然后通过快捷键’F4’,输入关键字’docker’,点击出现的’Docker应用’即可启动Docker后台进程。之后可以通过命令查看Docker的一些信息:
docker info docker version ... docker help
## 通过 dmg/pkg 进行安装
https://download.docker.com/mac/stable/Docker.dmg
https://docs.docker.com/docker-for-mac/#/step-1-install-and-run-docker-for-mac
https://docs.docker.com/v1.10/mac/step_one/
https://www.docker.com/products/docker-toolbox
# 在 CentOS 上安装 Docker
## CentOS 7
$ sudo yum install docker
## CentOS 6.x (kernel must be 3.10 at minimum)
$ sudo yum -y remove docker $ sudo yum install docker-io #不一定是最新版Docker
$ sudo yum update $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF $ sudo yum install docker-engine $ sudo service docker start $ sudo docker run hello-world 或 $ sudo yum update $ curl -fsSL https://get.docker.com/ | sh $ sudo service docker start $ sudo docker run hello-world
- https://docs.docker.com/engine/installation/linux/centos/
- https://docs.docker.com/engine/installation/linux/archlinux/
- https://docs.docker.com/engine/installation/mac/
# 一些 Docker 相关的概念
Docker有三个组件和三个基本元素。
三个组件分别是:
- Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
- Docker Daemon运行于主机上,处理服务请求。
- Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。
三个基本要素分别是:
- Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。
- Docker Images是一个只读模板,用来运行Docker容器。
- DockerFile是文件指令集,用来说明如何自动创建Docker镜像。
使用 Docker 运行任何应用程序,都需要有两个基本步骤:
- 构建一个镜像。[每个镜像都源于一个基本的镜像,然后根据Dockerfile中的指令创建模板。对于每个指令,在镜像上创建一个新的层面。]
- 运行容器。[运行容器源于我们在第一步中创建的镜像。当容器被启动后,一个读写层会被添加到镜像的顶层。当分配到合适的网络和IP地址后,需要的应用程序就可以在容器中运行了。]
# 制作 Docker 镜像
# 使用预先构建的镜像来创建来一个镜像并运行该容器
sudo docker images sudo docker pull busybox docker run busybox /bin/echo Hello Docker
# 以后台进程的方式运行 Docker sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done") # 运行`docker logs`命令来查看job的当前状态 docker logs $sample_job # 停止指定容器 docker stop $sample_job # 重启指定容器 docker restart $sample_job # 完全移除容器(先停止再删除) docker stop $sample_job docker rm $sample_job # 将容器的状态保存为镜像 docker commit $sample_job job1 # 查看本地的所有镜像 docker images # 在Docker registry中搜索镜像 docker search (image-name) # 查看镜像的历史版本 docker history (image_name) # 将镜像推送到registry docker push (image_name)
- http://dockone.io/article/101
- http://dockone.io/article/102
- https://ixyzero.com/blog/archives/2438.html
=END=
《 “Docker的安装和简单使用” 》 有 29 条评论
使用docker搭建开发环境
https://segmentfault.com/a/1190000007875949
用Docker搭建的全功能邮件服务器(A fullstack but simple mailserver (smtp, imap, antispam, antivirus, ssl…) using Docker.)
https://github.com/tomav/docker-mailserver
Mac OS 平台使用 Python 和 Docker 创建测试用 Https Server
http://xhrwang.me/2015/08/29/create-https-test-server-with-python-and-docker.html
docker 镜像介绍
http://cizixs.com/2016/04/06/docker-images
编写 Dockerfile 的最佳实践
http://cizixs.com/2017/03/28/dockerfile-best-practice
`
1. 使用统一的 base 镜像
2. 动静分离
3. 最小原则:只安装必需的东西
4. 一个原则:每个镜像只有一个功能
5. 使用更少的层
6. 减少每层的内容
7. 不要在 Dockerfile 中修改文件的权限
8. 利用 cache 来加快构建速度
9. 版本控制和自动构建
`
在 Docker 里跑 Java,趟坑总结
http://www.toutiao.com/i6403109459287081474/
`
精简阅读版:
a.JVM 做不了内存限制,一旦超出资源限制,容器就会出错
b.即使你多给些内存资源,也没什么卵用,只会错上加错
c.解决方案:用 Dockfile 中的环境变量来定义 JVM 的额外参数
d.更进一步:使用由 Fabric8 社区提供的基础 Docker 镜像来定义 Java 应用程序,将始终根据容器调整堆大小
`
[译] 如何编写最佳的 Dockerfile
https://blog.fundebug.com/2017/05/15/write-excellent-dockerfile/
https://rock-it.pl/how-to-write-excellent-dockerfiles/
技术分享|攻击容器集群管理平台
https://mp.weixin.qq.com/s?__biz=MzIxNDI0MDAxNg==&mid=2247483860&idx=1&sn=e1593b50741e5071182d5a9886348c1a
https://0x0d.im/archives/attack-container-management-platform.html
`
文中主要介绍了 Kubernetes 和 Mesos 未授权漏洞的利用方式和获得宿主机权限的攻击方式。容器管理平台未授权访问不仅会泄露容器中的代码、数据库等敏感文件,还有可能导致宿主机被控制进入内网,产生更大的危害。
参考「Security Best Practices for Kubernetes Deployment」,在安装和运行容器管理平台时,遵循以下几点可提高安全性:
· 配置防火墙,禁止敏感端口对外开放
· 对管理端口加上认证
· 使用安全的镜像(私有镜像仓库)
· 设置容器资源限额
· 容器以非 root 用户运行
`
http://blog.kubernetes.io/2016/08/security-best-practices-kubernetes-deployment.html
绝不避谈 Docker 安全
https://mp.weixin.qq.com/s/IN_JJhg_oG7ILVjNj-UexA
`
Docker Daemon安全
Docker 容器的安全
Docker 镜像安全
`
Docker 安全杂谈
https://0x0d.im/archives/docker-security.html
https://docs.docker.com/engine/security/non-events/
https://github.com/gebl/dirtycow-docker-vdso
https://blog.paranoidsoftware.com/dirty-cow-cve-2016-5195-docker-container-escape/
用于为容器构建安全、便携和干净操作系统的工具包(A toolkit for building secure, portable and clean operating systems for containers)
https://github.com/linuxkit/linuxkit #可以参考学习一下里面对于很多软件的配置是什么样的
USENIX LISA17 会议关于容器性能分析的一个演讲《Container Performance Analysis》
https://www.slideshare.net/brendangregg/lisa17-container-performance-analysis
docker-cuckoo – 将 Cuckoo Sandbox 封装进 Docker
https://github.com/blacktop/docker-cuckoo
Docker,请做好自己的清理工作
https://cloud.tencent.com/developer/article/1019249
DockerAttack – 渗透测试用的 Docker 镜像
https://github.com/ZephrFish/DockerAttack
DOCKER 从入门到实践
https://imnerd.org/docker-in-action.html
容器管理利器:Web Terminal 简介
https://mp.weixin.qq.com/s/zlHJTxDeHgjn9A9XuYp9fQ
一种新的进入容器的方式: WebSocket + Docker Remote API
http://www.yunweipai.com/archives/10449.html
https://github.com/laincloud/entry
Docker 最佳实践:构建最小镜像
https://mp.weixin.qq.com/s/4hGUhEc5XrEg2SSD2mcVrg
https://toutiao.io/posts/l3lmag/preview
https://paper.tuisec.win/detail/8a27a68dfe0369d
`
镜像大小其实是衡量我们容器打包技术的重要指标,我们应该在不影响应用正常运行的情况下,尽量让我们的容器镜像变得更小,这样,不管是从安全还是维护效率角度来讲,都是最佳实践。
本文我们从两种情况阐述我们的问题和解决方案,我们从实现我们的application的编程语言角度,按照语言是解释型还是编译型语言来演示如何解决容器镜像体积大的问题。
所以,我们每次build自己的docker image的时候,一定要思考一下,怎么才能让我们的docker image变得更加小巧,更小的image其实也是更安全的,因为冗余的软件包少,那么漏洞就相应的少,另外小的docker image方便移动,不管是docker push还是pull,速度都很快。
`
使用 Linux 容器快速搭建测试实验环境
https://www.trustedsec.com/2018/07/building-a-quick-lab-environment-with-linux-containers/
如何Docker化任意一个应用?你需要参照这10步
https://mp.weixin.qq.com/s/bJX6DVEhM7Ti11tIgjUSsQ
`
这是一篇关于如何 Docker 化任何应用程序的十步清单。
网上有很多关于如何将应用 Docker 化的教程,为什么我还要再写一个呢?
我见过的大部分教程都是限定在某种特定技术(例如 Java 或者 Python),可能无法满足读者的需求。同时,这些教程也没有说清楚关于 Dev 和 Ops 团队之间建立明确约定所涉及到的所有相关方面(这正是容器化的精髓所在)。
我根据最近的经验总结了以下一些步骤。它是一份细节清单,包含了其他指南中忽略的内容。
1.选择基础镜像
2.安装必要软件包
3.添加自定义文件
4.定义容器运行时的用户权限
5.定义暴露的端口
6.定义入口点(entrypoint)
7.定义一种配置方式
8.外部化数据
9.确保处理好日志
10.轮转日志和其他仅追加文件
`
Docker 容器在生产环境中的安全性分析
https://brage.bibsys.no/xmlui/bitstream/handle/11250/2451326/17303_FULLTEXT.pdf
Docker 异常总结
https://wilhelmguo.tk/blog/post/william/Docker%E5%BC%82%E5%B8%B8%E5%A4%A7%E6%8E%92%E6%9F%A5
`
异常一
运行信息
启用 Docker Debug 模式
打印堆栈信息
查看dmesg
模拟OOM
原因分析
解决方案:
小结
异常二
根本原因
解决方案
Docker自动direct-lvm模式配置
总结
`
Shifting Docker security left
https://paper.tuisec.win/detail/dd707748a60b13f
https://snyk.io/blog/shifting-docker-security-left/
https://res.cloudinary.com/snyk/image/upload/v1555510939/shifting_docker_security_left_2019.pdf
为什么说容器是单进程模型
https://zhuanlan.zhihu.com/p/83482791
[译] 十大 Docker 反模式
https://mp.weixin.qq.com/s/K68G-AbNbHceD8MWmBjtvw
https://codefresh.io/containers/docker-anti-patterns/
`
要考察的不良实践的完整清单:
试图将 VM 实践用于容器
创建不透明的 Dockerfile
创建有副作用的 Dockerfile
混淆了用于开发的镜像和用于部署的镜像
为每个环境创建一个不同的镜像
在生产服务器上拉取 git 代码并在线构建镜像
基于 git 源码而非 Docker 镜像进行团队协作
在容器镜像中硬编码密钥和配置
大而全-把 Docker 用作穷人的 CI/CD
小而不美-把容器只当成打包工具用
反模式 1 – 把 Docker 容器视为虚拟机
反模式 2 – 创建不透明的 Docker 镜像
反模式 3 – 创建有副作用的 Dockerfile
反模式 4 – 混淆了用于开发的镜像和用于部署的镜像
反模式 5 – 为每个环境创建一个不同的镜像 (QA、stage、production)
反模式 6 – 在生产服务器上创建 Docker 镜像
反模式 7 – 基于 git 源码而非 Docker 镜像进行团队协作
反模式 8 – 在容器镜像中硬编码密钥和配置
反模式 9 – 创建大而全的 Dockerfile
反模式 10 – 创建小得可怜的 Dockerfile
`
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
容器简史:从1979到现在
https://mp.weixin.qq.com/s/VcGSlFcVHiSXl_sJDzu7QQ
Install Docker Engine on CentOS
https://docs.docker.com/engine/install/centos/
`
# 1. Set up the repository
sudo yum install -y yum-utils
sudo yum-config-manager \
–add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 2. Install Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
# 3. Start Docker Engine
sudo systemctl start docker
sudo docker run hello-world
`
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
CentOS Docker 安装 (使用官方源/阿里云/清华大学源)
https://www.runoob.com/docker/centos-docker-install.html
https://mirrors.aliyun.com/docker-ce/linux/centos/
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/
docker:centos7.8 离线安装docker20
https://blog.csdn.net/shunzi2016/article/details/111502110
`
# yum install –downloadonly –downloaddir=/opt/rpm_cache /opt/docker_rpm/*.rpm
# rpm -ivh /opt/rpm_cache/*.rpm
`
How to use yum to download a package without installing it
https://access.redhat.com/solutions/10154
Error: Permission denied @ apply2files – /usr/local/lib/docker/cli-plugins
How to fix the Homebrew error `Permission denied @ apply2files`
https://flaviocopes.com/homebrew-fix-permission-denied-apply2files/
`
Turns out I had deleted Docker recently and this was causing an error. What I did to fix was to recreate a folder of the Docker app:
$ mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins
and running
$ brew cleanup
Again. The issue was fixed.
`
Homebrew – Error: Permission denied @ apply2files – /usr/local/lib/docker/cli-plugins
https://stackoverflow.com/questions/72784094/homebrew-error-permission-denied-apply2files-usr-local-lib-docker-cli-pl