文章目录
- **为什么使用Docker**
- **Docker应用简介**
- **Docker安装**
- **Docker Hello World**
- **使用SSH连接Container**
- **保存自己的镜像**
- 总结
为什么使用Docker
因为公司的服务将要部署到基于Docker的应用上。
.
.
.
当然不是这样咯, Docker的好处可以多多通过搜索引擎查询得到, 用过的人都说好。
- Docker的镜像可以随意拷贝分发, 需要做的仅仅是可以连接的网络,或者可以拷贝的U盘
- 物理机上运行十位数的虚拟机将导致性能亏空,而运行百位数的Docker也没有什么大碍
- 各个系统之间隔离严谨
Docker应用简介
- Docker可以简单的理解为一个轻量级虚拟机
- 有别遇传统VirtualBox或者vmware, Docker程序可直接与硬件交互
- Docker的运行依赖于镜像
可见下图:
一个Image可以理解为一个操作系统,系统上面肯可能只有用户所关心的一个或者几个功能(App)。
其中image作为docker 启动的基础镜像,可以启动多个Container。 而Container的修改又可以提交到Image上。
可见下图:
Docker安装
Docker的安装可以通过如下地址学习得到:
http://docker.widuu.com/installation/mac.html 早期版本的Docker YUM包:
wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm
如果是Mac用户推荐换用其它Linux系统安装而不是通过Boot2docker安装。
如下为通过daocloud安装Docker
curl -sSL https://get.daocloud.io/docker | sh
需要注意的是:高版本的Docker对Linux内核有要求。
# cat /proc/version
Linux version 3.10.0-123.9.3.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Thu Nov 6 15:06:03 UTC 2014
# docker version
Client:
Version: 1.11.1
API version: 1.23
Go version: go1.5.4
Git commit: 5604cbe
Built: Wed Apr 27 00:34:42 2016
OS/Arch: linux/amd64
Server:
Version: 1.11.1
API version: 1.23
Go version: go1.5.4
Git commit: 5604cbe
Built: Wed Apr 27 00:34:42 2016
OS/Arch: linux/amd64
Docker Hello World
通过pull的方式:
docker pull ubuntu // 从docker.io下载(墙)
docker pull daocloud.io/library/ubuntu // 从daocloud下载
下载完毕之后可查看本地镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 2d809b0b71cc 38 minutes ago 295.4 MB
nginx latest 9a96d9ef7daf 48 minutes ago 201.3 MB
如果觉得下载下来的 /daocloud.io/ubuntu 不好看。 还可以通过如下命令重命名:
# docker run -it -d daocloud.io/ubuntu:latest /bin/bash
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19818cef5f63 daocloud.io/ubuntu:latest "/bin/bash" 4 seconds ago Up 3 seconds 22/tcp clever_swanson
# docker export 19818cef5f63 > ubuntu_rename.tar
# ls
ubuntu_rename.tar
# docker rmi daocloud.io/ubuntu:latest
# cat ubuntu_rename.tar | docker import - ubuntu:rename
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu rename 62f59d366fa8 7 seconds ago 254.1 MB
如上, 通过导出Container, 删除老旧Image, 导入镜像实现了image的重命名
至于Hello World:
# docker run -it ubuntu:rename /bin/echo "Hello World"
Hello World
使用SSH连接Container
注意:boot2docker会有多重问题, 不建议初学者使用
通过命令
docker run -it -d -p 22 ubuntu:rename /bin/bash
启动docker的时候会发现无论如何Container也没有绑定22端口并跟主机建立联系。 这是因为这条命令仅仅在于启动了一个镜像生成Container, 并没有模拟一个操作系统的启动。 因此chkconfig
命令或者是在/etc/init.d/rc.local
添加启动项也是没有用处的。
进入Container:
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82a40248ef4a ubuntu:rename "/bin/bash" 3 minutes ago Up 3 minutes 0.0.0.0:32768->22/tcp berserk_heyrovsky
# docker attach 82a40248ef4a // 访问Container
安装OpenSSH服务。
安装Supervisor并加载ssh服务.
# apt-get install supervisor
# cd /etc/supervisor/conf.d/
# echo '[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D ' > ssh.conf
保存退出并将修改提交到image:
# docker ps -aq // 单人操作,选最上面这个就行。 此处为了页面美观
82a40248ef4a
# docker commit 82a40248ef4a ubuntu:rename // 提交变更
# docker rm 82a40248ef4a // 清除多余Container
使用ssh连接Container:
# docker run -d -p 10000:22 ubuntu:rename /usr/bin/supervisord
# ssh root@127.0.0.1 -p 10000
保存自己的镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu rename 580188896211 7 minutes ago 254.1 MB
# docker save 580188896211 > docker_rename_save.tar
# ls
docker_rename_save.tar ubuntu_rename.tar
再通过如下命令导入
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# docker load < docker_rename_save.tar
d920f62504fb: Loading layer [==================================================>] 267.6 MB/267.6 MB
af7dc432d6f1: Loading layer [==================================================>] 6.144 kB/6.144 kB
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 580188896211 13 minutes ago 254.1 MB
可以看出save/load将之前docker的所有操作快照都保存了下来,可以回滚。
而export/import只是将这个镜像给保存了起来,不可回滚。
总结
Docker 有着一个爆发式的增长。 开发人员需要只要其基本原理以及基本用法。
方便的应用拷贝以及强大的系统隔离,无不处处彰显着Docker强劲的魅力。
Dokcer 命令小示例:
见博客:
http://blog.chinaunix.net/uid-10915175-id-4443127.html
Docker 命令参数以及解释可通过 docker [command] --help调出。