1. 程式人生 > >Docker學習之SSH連線docker容器

Docker學習之SSH連線docker容器

前言

不論是開發者是運維人員,都經常有需要進入容器的訴求,目前看,主要的方法不外乎以下幾種:

  • 使用ssh登陸進容器,需要在容器中安裝啟動sshd,存在開銷和攻擊面增大的問題,同時也違反了Docker所倡導 的一個容器一個程序的原則。容器本身是一個無狀態,用後即焚的東西。為了儘量的輕量快捷建議一個容器儘量只有一個程序,否則你的容器會越來越大,越來越像一個虛擬機器一樣笨重不宜維護。
  • 使用nsenter、nsinit等第三方工具,需要額外學習(暫不考慮)。
  • 使用docker本身提供的工具,大多數情況最好還是使用Docker原生方法,Docker目前主要提供了Docker exec和 Docker attach兩個命令。

SSH連線

檢視映象:

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos-java         latest              feb3ca30b34b        6 weeks ago         755.2 MB
docker.io/centos    centos              3fa822599e10        12 weeks ago        203.5 MB

建立並執行容器:

docker run -tid --name app_learn -p 5001:22 -p 5000:8080 -v /home/app_learn/:/mnt/app/ 3fa822599e10 /usr/sbin/init

進入容器:

docker exec -it app_learn /bin/bash

安裝依賴:

yum install passwd openssl openssh-server openssh-clients -y

安裝service命令:

yum install initscripts -y

修改密碼:

[[email protected] mnt]# passwd
Changing password for user root.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

修改配置:

vi /etc/ssh/sshd_config

PubkeyAuthentication yes #啟用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys #公鑰檔案路徑
PermitRootLogin yes #root能使用ssh登入

重啟ssh服務,並設定開機啟動:

service sshd restart
chkconfig sshd on

如果無法執行,可試著執行:

systemctl start sshd.service
systemctl enable sshd.service

遠端連線:

通過物理機IP以及5001埠就可以遠端連線Docker容器了。

4.png

4.png

原生連線

docker ps

docker attach app_learn

ls

exit

執行以上命令可以看到attach可以進入到一個已經執行的容器,進行命令操作,但是從容器中退出之後容器也停止了,所以在生產環境中很少使用。

docker exec

docker exec -it app_learn /bin/bash

使用docker exec -it進入容器和我們平常操作console介面類似。而且不像attach方式退出,導致整個容器退出,生產環境中用的比較多。比使用ssh 、nsenter、nsinit方式更方便,生產中常用的方式。