文章目录

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


为什么使用Docker

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

  • Docker的镜像可以随意拷贝分发, 需要做的仅仅是可以连接的网络,或者可以拷贝的U盘
  • 物理机上运行十位数的虚拟机将导致性能亏空,而运行百位数的Docker也没有什么大碍
  • 各个系统之间隔离严谨

Docker应用简介

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

可见下图:

docker 搭建思源 docker搭建ssr_Container

一个Image可以理解为一个操作系统,系统上面肯可能只有用户所关心的一个或者几个功能(App)。

其中image作为docker 启动的基础镜像,可以启动多个Container。 而Container的修改又可以提交到Image上。

可见下图:

图片地址

docker 搭建思源 docker搭建ssr_Container_02


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调出。