Docker SSH連接docker容器的示例代碼
簡介
什么是Docker
Docker 是一個開源項目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個業(yè)余項目。它基于 Google 公司推出的 Go 語言實現(xiàn)。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協(xié)議,項目代碼在 GitHub 上進行維護。
Docker 自開源后受到廣泛的關注和討論,以至于 dotCloud 公司后來都改名為 Docker Inc。Redhat 已經(jīng)在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產(chǎn)品中廣泛應用。
Docker 項目的目標是實現(xiàn)輕量級的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。
在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復用本地主機的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實現(xiàn)。


為什么要用Docker
作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢。
首先,Docker 容器的啟動可以在秒級實現(xiàn),這相比傳統(tǒng)的虛擬機方式要快得多。 其次,Docker 對系統(tǒng)資源的利用率很高,一臺主機上可以同時運行數(shù)千個 Docker 容器。
容器除了運行其中應用外,基本不消耗額外的系統(tǒng)資源,使得應用的性能很高,同時系統(tǒng)的開銷盡量小。傳統(tǒng)虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。
具體說來,Docker 在如下幾個方面具有較大的優(yōu)勢。
更快速的交付和部署
對開發(fā)和運維(devop)人員來說,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運行。
開發(fā)者可以使用一個標準的鏡像來構(gòu)建一套開發(fā)容器,開發(fā)完成之后,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創(chuàng)建容器,快速迭代應用程序,并讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創(chuàng)建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節(jié)約開發(fā)、測試、部署的時間。
更高效的虛擬化
Docker 容器的運行不需要額外的 hypervisor 支持,它是內(nèi)核級的虛擬化,因此可以實現(xiàn)更高的性能和效率。
更輕松的遷移和擴展
Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。
更簡單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發(fā)和更新,從而實現(xiàn)自動化并且高效的管理。
對比傳統(tǒng)虛擬機總結(jié)
| 特性 | 容器 | 虛擬機 |
|---|---|---|
| 啟動 | 秒級 | 分鐘即 |
| 硬盤使用 | 一般為MB | 一般為GB |
| 性能 | 接近原生 | 弱于 |
| 系統(tǒng)支持量 | 單機支持上千個容器 | 一般幾十個 |
安裝Docker
本來打算在CentOS6上安裝Docker,最終由于CentOS6上自帶的kernel版本太低導致Docker啟動失敗而放棄(kernel升級太繁瑣)。

下面使用CentOS7安裝Docker,本人采用虛擬機的方式來安裝,安裝好的虛擬機必須保證能訪問外網(wǎng)。
CentOS7 系統(tǒng) CentOS-Extras 庫中已帶 Docker,可以直接安裝:
$ sudo yum install docker
安裝之后啟動 Docker 服務,并讓它隨系統(tǒng)啟動自動加載:
$ sudo service docker start $ sudo chkconfig docker on
獲取鏡像
可以使用 docker pull 命令來從倉庫獲取所需要的鏡像。
下面的例子將從 Docker Hub 倉庫下載一個Centos6并且安裝了jdk7的鏡像:
$ docker pull tcbenkhard/centos6-jdk7

列出本地鏡像
使用 docker images 顯示本地已有的鏡像。
$ docker images

啟動容器
啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止狀態(tài)(stopped)的容器重新啟動。
因為 Docker 的容器實在太輕量級了,很多時候用戶都是隨時刪除和新創(chuàng)建容器。
下面的命令則啟動一個 bash 終端,允許用戶進行交互。
$ docker run -t -i docker.io/tcbenkhard/centos6-jdk7 /bin/bash [root@ffe81683c404 /]#

其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上,-i 則讓容器的標準輸入保持打開。
當利用 docker run 來創(chuàng)建容器時,Docker 在后臺運行的標準操作包括:
(1)檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
(2)利用鏡像創(chuàng)建并啟動一個容器
(3)分配一個文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層
(4)從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去
(5)從地址池配置一個 ip 地址給容器
(6)執(zhí)行用戶指定的應用程序
(7)執(zhí)行完畢后容器被終止
可以使用下面命令來查看CentOS版本信息:
$ cat /etc/redhat-release
修改root密碼
使用passwd密碼來修改密碼(如提示沒有這個命令行使用yum install passwd安裝):
$ passwd xxx密碼 xxx確認密碼
安裝Openssh
使用下面命令安裝ssh server/ssh client:
$ sudo yum -y install openssh-server $ sudo yum -y install openssh-clients
修改SSH配置文件以下選項,去掉#注釋,將四個選項啟用:
$ vi /etc/ssh/sshd_config RSAAuthentication yes #啟用 RSA 認證 PubkeyAuthentication yes #啟用公鑰私鑰配對認證方式 AuthorizedKeysFile .ssh/authorized_keys #公鑰文件路徑(和上面生成的文件同) PermitRootLogin yes #root能使用ssh登錄

重啟ssh服務,并設置開機啟動:
$ service sshd restart $ chkconfig sshd on
退出容器并保存更改
使用exit命令或者ctrl+C來退出當前運行的容器:
[root@ffe81683c404 /]# exit
注意:上面ffe81683c404是容器的ID,退出后用于保存的唯一ID。
當結(jié)束后,我們使用 exit 來退出,現(xiàn)在我們的容器已經(jīng)被我們改變了,使用 docker commit 命令來提交更新后的副本。
$ sudo docker commit -m 'install openssh' -a 'Docker Newbee' ffe81683c404 centos6-jdk7:ssh 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
其中,-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來創(chuàng)建鏡像的容器的ID;最后指定目標鏡像的倉庫名和 tag 信息。創(chuàng)建成功后會返回這個鏡像的 ID 信息。
提交后docker中就會多出一個centos6-jdk7:ssh的一個鏡像。

啟動新的容器并打通22端口
將新的鏡像啟動,并將docker服務器的50001端口映射到容器的22端口上:
$ docker run -d -p 50001:22 centos6-jdk7:ssh /usr/sbin/sshd -D
ssh連接容器:

至此SSH連接docker容器成功完成。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用Docker構(gòu)建開發(fā)環(huán)境的方法步驟(?Windows和mac)
利用Docker,我們可以做很多事情。所以本文就詳細介紹了使用Docker構(gòu)建開發(fā)環(huán)境的方法步驟,分為?Windows和mac版本,具有一定的參考價值,感興趣的可以了解一下2021-12-12
docker安裝Elasticsearch7.6集群并設置密碼的方法步驟
本文主要介紹了docker安裝Elasticsearch7.6集群并設置密碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
docker-compose 部署 Apollo 自定義環(huán)境的詳細教程
本篇文章給大家介紹docker-compose 部署 Apollo 自定義環(huán)境的詳細教程,而其中Config Service提供配置的讀取、推送等功能,服務對象是Apollo客戶端,對docker部署Apollo環(huán)境相關知識感興趣的朋友一起看看吧2021-06-06

