- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Docker SSH连接docker容器的示例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
简介 。
什么是docker 。
docker 是一个开源项目,诞生于 2013 年初,最初是 dotcloud 公司内部的一个业余项目。它基于 google 公司推出的 go 语言实现。 项目后来加入了 linux 基金会,遵从了 apache 2.0 协议,项目代码在 github 上进行维护.
docker 自开源后受到广泛的关注和讨论,以至于 dotcloud 公司后来都改名为 docker inc。redhat 已经在其 rhel6.5 中集中支持 docker;google 也在其 paas 产品中广泛应用.
docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 docker 的基础是 linux 容器(lxc)等技术.
在 lxc 的基础上 docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 docker 的容器就像操作一个快速轻量级的虚拟机一样简单.
下面的图片比较了 docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现.
为什么要用docker 。
作为一种新兴的虚拟化方式,docker 跟传统的虚拟化方式相比具有众多的优势.
首先,docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 docker 容器.
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而docker 只需要启动 10 个隔离的应用即可.
具体说来,docker 在如下几个方面具有较大的优势.
更快速的交付和部署 。
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行.
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间.
更高效的虚拟化 。
docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率.
更轻松的迁移和扩展 。
docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个.
更简单的管理 。
使用 docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理.
对比传统虚拟机总结 。
。
。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟即 |
硬盘使用 | 一般为mb | 一般为gb |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
。
安装docker 。
本来打算在centos6上安装docker,最终由于centos6上自带的kernel版本太低导致docker启动失败而放弃(kernel升级太繁琐).
下面使用centos7安装docker,本人采用虚拟机的方式来安装,安装好的虚拟机必须保证能访问外网.
centos7 系统 centos-extras 库中已带 docker,可以直接安装:
1
|
$
sudo
yum
install
docker
|
安装之后启动 docker 服务,并让它随系统启动自动加载:
1
2
|
$
sudo
service docker start
$
sudo
chkconfig docker on
|
获取镜像 。
可以使用 docker pull 命令来从仓库获取所需要的镜像.
下面的例子将从 docker hub 仓库下载一个centos6并且安装了jdk7的镜像:
1
|
$ docker pull tcbenkhard
/centos6-jdk7
|
列出本地镜像 。
使用 docker images 显示本地已有的镜像.
1
|
$ docker images
|
启动容器 。
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动.
因为 docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器.
下面的命令则启动一个 bash 终端,允许用户进行交互.
1
2
|
$ docker run -t -i docker.io
/tcbenkhard/centos6-jdk7
/bin/bash
[root@ffe81683c404 /]
#
|
其中,-t 选项让docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开.
当利用 docker run 来创建容器时,docker 在后台运行的标准操作包括:
(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载 (2)利用镜像创建并启动一个容器 (3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层 (4)从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去 (5)从地址池配置一个 ip 地址给容器 (6)执行用户指定的应用程序 (7)执行完毕后容器被终止 。
可以使用下面命令来查看centos版本信息:
1
|
$
cat
/etc/redhat-release
|
修改root密码 。
使用passwd密码来修改密码(如提示没有这个命令行使用yum install passwd安装):
1
2
3
|
$ passwd
xxx密码
xxx确认密码
|
安装openssh 。
使用下面命令安装ssh server/ssh client:
1
2
|
$
sudo
yum -y
install
openssh-server
$
sudo
yum -y
install
openssh-clients
|
修改ssh配置文件以下选项,去掉#注释,将四个选项启用:
1
2
3
4
5
|
$
vi
/etc/ssh/sshd_config
rsaauthentication
yes
#启用 rsa 认证
pubkeyauthentication
yes
#启用公钥私钥配对认证方式
authorizedkeysfile .
ssh
/authorized_keys
#公钥文件路径(和上面生成的文件同)
permitrootlogin
yes
#root能使用ssh登录
|
重启ssh服务,并设置开机启动:
1
2
|
$ service sshd restart
$ chkconfig sshd on
|
退出容器并保存更改 。
使用exit命令或者ctrl+c来退出当前运行的容器:
1
|
[root@ffe81683c404 /]
# exit
|
注意:上面ffe81683c404是容器的id,退出后用于保存的唯一id.
当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本.
1
2
|
$
sudo
docker commit -m
'install openssh'
-a
'docker newbee'
ffe81683c404 centos6-jdk7:
ssh
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
|
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的id;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 id 信息.
提交后docker中就会多出一个centos6-jdk7:ssh的一个镜像.
启动新的容器并打通22端口 。
将新的镜像启动,并将docker服务器的50001端口映射到容器的22端口上:
1
|
$ docker run -d -p 50001:22 centos6-jdk7:
ssh
/usr/sbin/sshd
-d
|
ssh连接容器:
至此ssh连接docker容器成功完成.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://blog.csdn.net/qq626387/article/details/50506636 。
最后此篇关于Docker SSH连接docker容器的示例代码的文章就讲到这里了,如果你想了解更多关于Docker SSH连接docker容器的示例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这是我想做的 1 - 点击提交 2 - 隐藏 DIV 容器 1 3 - 显示 DIV 容器 2 4 - 将“PricingDisclaimer.php”中找到的所有 DIV 加载到 Div 容器 2
我有一个 ios 应用程序,它使用 iCloudcontainer 来保存用户的一些数据,例如用户的“到期日期”。我要用不同的方式创建应用程序的副本开发者账号。我要将用户从第一个应用程序迁移到第二个应
这是场景。 我有三个容器。 Container1、container2 和 container3(基于 Ubuntu 的镜像),其中 container2 充当容器 1 和容器 2 之间的路由器。 我
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我正在改造管道以使用声明式管道方法,以便我能够 to use Docker images在每个阶段。 目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。 node {
我正在开发一个需要尽可能简单地为最终用户安装的应用程序。虽然最终用户可能是经验丰富的 Linux 用户(或销售工程师),但他们对 Tomcat、Jetty 等并不真正了解,我认为他们也不应该了解。 所
我从gvisor-containerd-shim(Shim V1)移到了containerd-shim-runsc-v1(Shim V2)。在使用gvisor-containerd-shim的情况下,
假设我们只在某些开发阶段很少需要这样做(冒烟测试几个 api 调用),让项目 Bar 中的 dockerized web 服务访问 Project Foo 中的 dockerized web 服务的最
各位,我的操作系统是 Windows 10,运行的是 Docker 版本 17.06.0-ce-win19。我在 Windows 容器中运行 SQL Server Express,并且希望将 SQL
谁能告诉我,为什么我们不能在 Azure 存储中的容器内创建容器?还有什么方法可以处理,我们需要在 azure 存储中创建目录层次结构? 最佳答案 您无法在容器中创建容器,因为 Windows Azu
#include template struct Row { Row() { puts("Row default"); } Row(const Row& other) { puts
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
RDF容器用于描述一组事物 例如,把一本书的所有作者列在一起 RDF容器有三种类型: <Bag> <Seq> <Alt> <rdf:
编辑:从到目前为止添加的答案和评论看来,我没有正确解释我想要什么。下面是一个例子: // type not supporting any type of comparison [] [] type b
我正在测试 spatie 的异步项目。我创建了一个这样的任务。 use Spatie\Async\Task; class ServiceTask extends Task { protecte
我想使用 Azure Blob 存储来上传和下载文档。有一些公司可以上传和下载他们的文档。我想保证这些文件的安全。这意味着公司只能看到他们的文件。不是别人的。 我可以在 blob 容器中创建多个文件夹
我正在尝试与 Azure 中的容器实例进行远程交互。我已执行以下步骤: 已在本地注册表中加载本地镜像 docker load -i ima.tar 登录远程 ACR docker登录--用户名--密码
我正在研究http://progrium.viewdocs.io/dokku/process-management/,并试图弄清楚如何从单个项目中运行多个服务。 我有一个Dockerfile的仓库:
我有一个想要容器化的单体应用程序。文件夹结构是这样的: --app | |-file.py <-has a variable foo that is passed in --configs
我正在学习 Docker,并且一直在为 Ubuntu 容器制作 Dockerfile。 我的问题是我不断获取不同容器之间的持久信息。我已经退出,移除了容器,然后移除了它的图像。在对 Dockerfil
我是一名优秀的程序员,十分优秀!