Docker入门简明教程
Docker 是基于 Go 语言实现的云开源项目,是基于 Linux 的多项开源技术提供高效、敏捷和轻量级的容器方案。创建于 2013 年初,自从开源后就受到了广泛的关注,从长远的眼光来看,Docker 是未来虚拟化的一个发展的趋势。带来了更轻量快捷的的体验,一台主机可以同时运行数千个 Docker 容器,而且在性能上几乎不会损耗。
Docker简介
概念
Docker 是基于 Go 语言实现的云开源项目,是基于 Linux 的多项开源技术提供高效、敏捷和轻量级的容器方案。创建于 2013 年初。自从开源后就受到了广泛的关注,从长远的眼光来看,Docker 是未来虚拟化的一个发展的趋势。
优势
- 一次构建,处处运行,带来了更快速的交付和部署和更轻松的迁移和扩展。
- 对系统内核进行抽象,带来了更轻量快捷的的体验,一台主机可以同时运行数千个Docker容器,而且在性能上几乎不会损耗。
Docker 1.1.2 中 Ubuntu14.04 主机与 Ubuntu14.04 Docker 容器性能测试
参数 | 测试工具 | 物理主机 | Docker |
---|---|---|---|
CPU | sysbench | 1 | 0.9945 |
写内存 | sysbench | 1 | 0.9826 |
读内存 | sysbench | 1 | 1.0025 |
磁盘I O | dd | 1 | 0.9811 |
网络 | iperf | 1 | 0.9626 |
从数值上看,物理主机与 Docker 容器之间的性能差异不大,二者速度几乎一样。
基本组件
镜像:镜像是构建 Docker 世界的基石。用户的一切操作都是基于镜像来运行自己的容器的。同时镜像也是 Docke r的“构建”部分,也可以把镜像当作容器的”源代码”,镜像体积很小,便携性高,易分享、存储和更新。
容器:容器是基于镜像启动起来的,用户只需要把自己的应用程序或服务打包放进容器即可。容器中可以运行一个或多个进程,是 Docker 的启动和执行阶段。
Docker 安装
这么多年过去了,这 Docker 安装的部分仅供参考留念。
安装 Docker 的前提条件
运行 64 位 CPU 架构的计算机(这意味着一些较老的机器可能无法安装 Docker)
Linux 系统的话,得运行 Linux3.8 内核及其以上的版本,一些老版本的 2.6x 内核运行可能会出现一些无法预料的 BUG
Windows 安装 Dokcer
官网直接下载安装包,然后直接运行来安装 Docker,开启Hyper-V (这个阶段可能需要重启),有可用更新的话,就安装更新。
小提示:Windows 下的 Docker 启动貌似有点慢,不知道是不是我这龟速的机械硬盘的原因。
验证 docker 是否安装成功:在命令提示符下输入:docker
出现下面这张图即安装成功:
macOS 安装 Docker
首先安装Virtual Box,官网下载:https://www.virtualbox.org
Virtual box 安装完了再安装 Docker
Docker 官网直接下载安装包: https://download.docker.com/mac/stable/Docker.dmg
macOS 下安装启动就很快了。
然后在终端下输入:
docker
Mac 和 Linux下必须得以 root 身份才可以稳定运行 docker,
效果如下:
Ubuntu 安装 Docker
Linux 安装要简单的多,毕竟 Docker 一开始就是基于 Linux 提出来的。
首先以 root 身份终端下输入:
apt-get install docker.io
然后就没有然后了,1 条命令即可安装 :
root 身份终端下输入:docker
查看安装是否成功:
Dokcer入门
搜索镜像
Dokcer 通过Dokcer Hub搭建镜像共享生态系统,这意味着我们可以直接下载其他人已经打包好的镜像。
使用 docker search 命令在 Docker HUB 中搜索镜像
这里我们以搜索 Ubuntu 镜像为例:
docker search ubuntu
一般我们下载靠前面的镜像,OFFICIAL 标签如果是 OK 的话,这表示是官方镜像,其他的都是用户自己创建并共享的镜像。
下载镜像
下面从 Docker Hub 下载 Ubuntu 镜像,终端输入:
docker pull ubuntu
Docker 默认是下载最新版本的 Ubuntu 镜像 :
镜像一般都很小的,网速快的话可以分分钟下载完。
列出下载的镜像
下面列出本地主机中已经下载的 docker 镜像
终端输入:
docker images
或者:
docker image ls
可以看到我们刚刚下载的 Ubuntu 镜像,大小才 129MB,是 4 周前更新的版本。
创建并使用容器
使用 run 命令即可用镜像来创建一个容器
docker run -i -t --name hellodocker ubuntu /bin/bash
命令格式为:docker run <选项参数> <镜像名称> <要运行的文件>
>使用 -i、-t选项可以在运行的Bash shell中进行输入与输出
>使用—name可以指定容器的名称。如果不指定的话,docker默认会自动生成随机的名称进行指定。
再回看这行命令大概就明白了它的意思:使用 ubuntu 这个镜像来创建一个 名为 hellodocker 的容器
当我们创建容器后,默认就进入了容器,此时使用 cd、ls 等命令发现已经不是我们物理机上的 ubutu了。
退出容器
终端输入:
exit
从 Bash shell 退出,因为在 Ubuntu 镜像中直接运行 /bin/bash 可执行文件,所以退出后 容器也会终止(stop),就这样我们创建运行并退出了一个容器,现在自己再亲手创建个容器试试看吧。
查看容器列表
终端输入:
docker ps -a
查看本地的所有容器的详细信息 :
可以看到,除了我们第一个创建的名为 hellodocker 外,还发现了我后来新建的 GG 容器,他们都是 Exited(退出状态),这里还可以看到他们的 ID、所使用的镜像、创建时间、端口等信息 。
使用 start 命令来启动容器
到这里机智的小伙伴们可能产生疑问了:第一次创建容器是默认就进入了容器,那么在我们 exit 退出容器之后如何唤醒我们的容器呢? 表急,其实 docker 早已考虑到了这个,我们在终端下输入:
docker start hellodocker
来启动名为 hellodocker 的容器,所以启动 docker 容器的命令就是:
docker start 容器名
来启动名为 hellodocker 的容器,所以启动 docker 容器的命令就是:
docker start 容器名
使用 restart 命令来重启容器
与重启系统一样,也可以直接使用如下命令来重启某个容器:
docker restart hellodocker
使用 attach 命令连接容器
前面我们 start 了一个容器,但是还是默认不进入容器,我们使用:
docker ps -a
来查看容器的运行情况:
可以看到 hellodocker 这个容器已经启动了 4 秒多了,说明容器已经在运行了,那么我们怎么来连接启动的 docker容器呢?终端输入:
docker attach hellodocker
来连接已经在后台启动的 docker 容器 :
小提示:这里得 按下 回车 才进入容器,不要傻等,几分钟内都没有什么反应的(不要问我怎么知道的,心酸。。。)
Docker系统统计信息
终端下输入:
docker stats
用来显示一个或多个容器的统计信息,可以看到容器的 ID、CPU占用率、内存使用率、网速等信息 :
终止容器
要终止容器的话,首先 docker ps -a 列出后台正在运行的容器,然后终端输入:
docker stop hellodocker
终止了我们刚启动不久的 hellodocker 容器
删除容器
如果容器不再使用可以使用如下命令删除:
docker rm GG
删除了 GG 的容器(你要删除的容器必须已经停止运行了)
删除镜像
如果镜像不再使用可以使用如下命令删除:
docker rmi ubuntu
删除了本地的 ubuntu 镜像(此刻必须删除所有运行在这个镜像上的容器) :
OK Docker 的入门命令就教到这里了,下面我们来实战一把吧。
Docker 简约命令
列出下载的镜像
docker image ls
部署容器
docker run --name hellodocker -d -p 81:80 ubuntu:18.04
创建并使用容器
docker run -i -t --name hellodocker ubuntu /bin/bash
查看容器列表
docker ps -a
使用 start 命令来启动容器
docker start 容器名
使用 restart 命令来重启容器
docker restart 容器名
使用 attach 命令连接容器
docker attach 容器名
docker exec -it 容器名 /bin/bash
docker exec -it 容器名 /bin/zsh
Docker 系统统计信息
docker stats
终止容器
docker stop 容器名
删除容器
docker rm 容器名
删除镜像
docker rmi ubuntu
Dockfile
构建镜像
docker build -t test:v1 .
打造属于你自己的 Kali
一般我们搞信息安全的难免都会用到 Kali Linux,如果不想安装累赘的虚拟机或者不想折腾更新源等那么该肿么办呢?现在有了Docker,这一切的问题都不再是问题,使用 Docker 来运行 Kali,更加轻便快捷,而且可以 ping 通物理机的C段,用来实战的话再合适不过了。 秀个主题先:
安装了 macOS 的主题后,Ubuntu 也感觉不再那么难用了。(嘿嘿 不扯了 赶紧步入正题了)
首先搜索下可用的Kali镜像
docker search kali
出来了一大堆,根据名字可以大概判断出第二个镜像是带有 meatsploit 的,所以为了日后配置的方便我们这里直接来下载第二个镜像。
下载 Kali 镜像
docker pull linuxkonsult/kali-metasploit
下载带有 msf 的 kali 镜像(镜像不大,我这边下载完不到10分钟)
创建 Kali 容器
docker run -i -t --name msfkali linuxkonsult/kali-metasploit /bin/bash
用下载的kali镜像创建个名为 msfkali 的容器
进入容器查看基本信息
可以看到 kali 使用的是默认源,这里我要说一下,kali 2016.X 版本的 kali 使用这个默认官方源就好, 这个默认的官方源会自动选择速度最快的镜像站点来下载。
$ cat /etc/apt/sources.list
deb http://http.kali.org/kali kali-rolling main contrib non-free
deb-src http://http.kali.org/kali kali-rolling main contrib non-free
终端输入:
msfconsole
可以看到默认是带 metasploit 的,看来我们之前猜的没错 :
除此之外还带了nmap、wget、git等,但是这些工具还不够我们完成一次渗透测试
安装自己需要的工具
首先先刷新下更新缓存列表:
apt update
然后就可以直接安装工具了
apt install 工具名
这里你需要什么工具就安装什么工具,速度很快的,用什么就安装什么,没有什么比这个更 DIY 的了。举个例子:你想安装个aircrack 来破解WiFi密码,那么就直接:
apt-get install aircrack-ng
总之,这个 Kali Docker 就是 Kali 的命令行,和正常是 Kali一模一样,该怎么折腾就怎么折腾吧。
其他
Docker搭建 sqli-labs 环境
docker pull acgpiano/sqli-labs
docker run --name sqli-labs -d -p 8080:80 acgpiano/sqli-labs
docker exec -it ID /bin/bash
- MySQL 默认密码为 空
- 浏览器访问:127.0.0.1:8080
- 初始化数据库先
Docker 搭建 Portainer 图形管理工具
$ docker search portainer
$ docker pull portainer/portainer
$ docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer
Docker 搭建宝塔面板注意事项
centos7镜像,做好端口映射
8080:88 888:888 8888:8888 8081:80
每次重启的时候得手动启动服务:
$ /etc/init.d/bt start
$ /etc/init.d/mysqld start
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm-54 start
$ /etc/init.d/php-fpm-73 start
小结
Docker 从长远眼光来看是一个趋势,虽然起初刚刚学习需要投入些时间,但是当你熟练 Docker 的时候,才会发现它的真正强大之处,从现在来看已经可以完全替代 PentestBox了,当然 Docker 的作用不仅仅这么简单,博客以后会继续更新Docker 更加深入的文章的。
本文可能实际上也没有啥技术含量,但是写起来还是比较浪费时间的,在这个喧嚣浮躁的时代,个人博客越来越没有人看了,写博客感觉一直是用爱发电的状态。如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN费用等)
微信
|
支付宝
|
没想到文章加入打赏列表没几天 就有热心网友打赏了 于是国光我用 Bootstrap 重写了一个页面 用以感谢 支持我的朋友,详情请看 打赏列表 | 国光
点评
17 年写的这篇文章,那时候 Docker 相关的资料还不多,现在来看这方面的资料已经有一大堆了,所以本文目前参考意义不大,只能做个简单的纪念。