由于docker有很好的隔离性,所以开发使用最适合不过。windows下配合**boot2docker**轻松击败重量级虚拟机。

由于是开发环境,我们首先需要将docker container开启ssh服务,以便随时登录到上面查看修改配置,之后再去搭建真正的开发环境。所以我们可以先创建一个开启了ssh服务的image来作为base image,然后在它的基础之上搭建不通的开发环境。

创建镜像需要使用到Dockerfile,Dockerfile的具体语法可以到官网去查看,这里不详细介绍。

先上Dockerfile内容:

# sshd
# VERSION 1.0.0

FROM ubuntu:14.04
MAINTAINER yaxin <yaxin.me@gmail.com>

# make sure the package repository is up to date
RUN sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y openssh-server
# Config ssh server
RUN mkdir -p /var/run/sshd
RUN sed -i "s/^PermitRootLogin without-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
RUN sed -i "s/^#GSSAPIAuthentication no/GSSAPIAuthentication no/g" /etc/ssh/sshd_config
RUN echo "UseDNS no" >> /etc/ssh/sshd_config
RUN echo 'root:root' | chpasswd

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

新建文件夹并将上面的代码保存为以Dockerfile命名的文本文件。

然后执行

[yaxin@ubox sshd]$ls
Dockerfile
[yaxin@ubox sshd]$docker build -t ubuntu:base .

来创建镜像。下面来稍微解释一下Dockerfile的内容

FROM

必须是Dockerfile的第一句,之后的操作都是在这个镜像之上进行的。如果你没有,那要先下载,docker pull ubuntu,如果无法下载,翻墙吧。如果你有国外vps,那么你可以在vps上docker pull ubuntu下载该镜像然后docker save ubuntu:14.04 | bzip2 -9 -c > ubuntu_14.04.tar.bz2,然后下载ubuntu_14.04.tar.bz2到本机,运行bzip2 -d -c < ubuntu_14.04.tar.bz2 | docker load导入镜像,我就是这么干的。

RUN

执行shell命令。

ADD

将外部文件导入到镜像中。

EXPOSE

将22端口‘暴漏’出来,以便在外部访问该端口。没有的话,将无法从外部(非运行docker的主机)ssh。

CMD

RUN一样,也是执行shell命令,不同的是RUN是在创建镜像的时候执行,而CMD是在每次执行docker run image的时候执行。

build完镜像后,我们执行docker images会发现多了一个镜像

[yaxin@ubox sshd]$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              base                615ea4d4c1e0        2 weeks ago         396.4 MB
ubuntu              14.04               ad892dd21d60        4 weeks ago         275.5 MB

然后启动镜像

[yaxin@ubox sshd]$docker run -d -P --name="sshd" ubuntu:base
c2518b7cf9289567c258171e93462bdb7fffe873bf2251d7086cd97e03e3ee57
[yaxin@ubox sshd]$docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES
c2518b7cf928        ubuntu:base         /usr/sbin/sshd -D      4 seconds ago       Up 3 seconds        0.0.0.0:49153->22/tcp   sshd

然后ssh 49153端口

[yaxin@ubox sshd]$ssh root@localhost -p 49153
The authenticity of host '[localhost]:49153 ([::1]:49153)' can't be established.
ECDSA key fingerprint is c4:a5:26:07:8b:72:97:40:f2:42:fa:35:9a:7c:d0:79.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:49153' (ECDSA) to the list of known hosts.
root@localhost's password: 
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.2.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@c2518b7cf928:~# 

自此,一个装有ssh服务的可以运行的base image就创建成功了。