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

来源:互联网 发布:java删除压缩文件 编辑:程序博客网 时间:2024/06/04 01:05

  • 为什么使用Docker
  • Docker应用简介
  • Docker安装
  • Docker Hello World
  • 使用SSH连接Container
  • 保存自己的镜像
  • 总结

为什么使用Docker

因为公司的服务将要部署到基于Docker的应用上。
.
.
.
当然不是这样咯, Docker的好处可以多多通过搜索引擎查询得到, 用过的人都说好。

  • Docker的镜像可以随意拷贝分发, 需要做的仅仅是可以连接的网络,或者可以拷贝的U盘

  • 物理机上运行十位数的虚拟机将导致性能亏空,而运行百位数的Docker也没有什么大碍

  • 各个系统之间隔离严谨

Docker应用简介

  • Docker可以简单的理解为一个轻量级虚拟机
  • 有别遇传统VirtualBox或者vmware, Docker程序可直接与硬件交互
  • Docker的运行依赖于镜像

可见下图:
图片地址
来自CSDN:cbl709的图片

一个Image可以理解为一个操作系统,系统上面肯可能只有用户所关心的一个或者几个功能(App)。
其中image作为docker 启动的基础镜像,可以启动多个Container。 而Container的修改又可以提交到Image上。
可见下图:
图片地址
来自Server110的图片


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 versionClient: 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/amd64Server: 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 imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              2d809b0b71cc        38 minutes ago      295.4 MBnginx               latest              9a96d9ef7daf        48 minutes ago      201.3 MB

如果觉得下载下来的 /daocloud.io/ubuntu 不好看。 还可以通过如下命令重命名:

# docker run -it -d daocloud.io/ubuntu:latest /bin/bash# docker ps -aCONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                     NAMES19818cef5f63        daocloud.io/ubuntu:latest       "/bin/bash"              4 seconds ago       Up 3 seconds        22/tcp                    clever_swanson# docker export 19818cef5f63 > ubuntu_rename.tar# lsubuntu_rename.tar# docker rmi daocloud.io/ubuntu:latest# cat ubuntu_rename.tar | docker import - ubuntu:rename# docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              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 -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                     NAMES82a40248ef4a        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             SIZEubuntu              rename              580188896211        7 minutes ago       254.1 MB# docker save 580188896211 > docker_rename_save.tar# lsdocker_rename_save.tar  ubuntu_rename.tar

再通过如下命令导入

# docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE# docker load < docker_rename_save.tard920f62504fb: Loading layer [==================================================>] 267.6 MB/267.6 MBaf7dc432d6f1: Loading layer [==================================================>] 6.144 kB/6.144 kB# docker imagesREPOSITORY          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调出。

0 0
原创粉丝点击