加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

如何利用Linux容器实现可移植的应用部署

发布时间:2016-01-20 05:07:55 所属栏目:Linux 来源:网络整理
导读:Docker是一种在Linux容器里运行应用的开源工具,一种轻量级的虚拟机。除了运行应用,Docker还提供了 一些工具,借助Docker Index或自己托管的Docker注册表对进

Dockerfile是个简单的文本文件,介绍了如何从基础镜像构建镜像。我在Github上提供了几个Dockerfile 。下面的文件用来运行、安装SSH服务器:

FROM ubuntu
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo "root:root" | chpasswd
EXPOSE 22

上面的内容一目了然。FROM命令定义了基础镜像,基础镜像可以是官方的,也可以是我们刚刚创建的 zefhemel/ubuntu。RUN命令用来配置镜像。在这里,我们更新了APT包仓库,安装了openssh-server,创建了 一个目录,然后给我们的root账户设置了一个再简单不过的密码。EXPOSE命令会向外暴露22端口(SSH端口) 。接下来看看如何构建并实例化这个Dockerfile。

第一步是构建一个镜像。在包含Dockerfile的目录下运行:

$ docker bui ld -t zefhemel/ssh .

这会创建一个zefhemel/ssh仓库,包含我们新的SSH镜像。如果创建成功,就能进行实例化了:

$ docker run -d zefhemel/ssh /usr/sbin/sshd -D

和前面的命令不一样。-d表示会在后台运行容器,而不是运行bash,所以我们用前台模式(用-D参数指定 )运行了sshd守护进程。

让我们检查运行中的容器,看看命令做了些什么:

$ docker ps
ID                  IMAGE                   COMMAND                CREATED             STATUS    

          PORTS
23ee5acf5c91        zefhemel/ssh:latest     /usr/sbin/sshd -D      3 seconds ago       Up 2 

seconds        49154->22
  

可以看到我们的容器启动着。PORTS头下的内容比较有意思。由于我们EXPOSE了22端口,这个端口现在映射 到了主机系统的一个端口(这里是49154)。让我们看看它能否运行。

$ ssh root@localhost -p 49154
The authenticity of host '[localhost]:49154 ([127.0.0.1]:49154)' can't be established.
ECDSA key fingerprint is f3:cc:c1:0b:e9:e4:49:f2:98:9a:af:3b:30:59:77:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:49154' (ECDSA) to the list of known hosts.
root@localhost's password: <I typed in 'root' here>
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.8.0-27-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@23ee5acf5c91:~#

再次成功了!现在有了一个运行的SSH服务器,我们能登录它。在有人猜出密码并攻击容器之前,让我们先 从SSH退出,杀掉容器。

$ docker kill 23ee5acf5c91

如你所见,容器的22端口映射到了49154端口,但这是完全随机的。要把它映射到特定端口,运行命令时传 入-p参数:

docker run -p 2222:22 -d zefhemel/ssh /usr/sbin/sshd -D

现在,如果2222端口可用,我们的端口就会映射到2222上。我们在Dockerfile的结尾再添加一行内容,以 便我们的镜像对用户更加友好:

CMD /usr/sbin/sshd -D

CMD表示构建镜像时并不会运行命令,实例化时才运行。所以不传递其它参数时就会执行/usr/sbin/sshd -D。然后我们可以直接运行:

docker run -p 2222:22 -d zefhemel/ssh

得到的结果和前面一样。要发布新创建的镜像,只要运行docker push就可以了:

docker push zefhemel/ssh

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!