您的位置:首页 > 运维架构 > Docker

Docker学习一(安装docker并构建一个可ssh登录的镜像)

2016-05-15 15:38 861 查看
为什么使用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

如果是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调出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: