Docker之進入容器(三)


1、簡介

  經過前面兩篇博客的掃盲,大家多多少少對docker有了一個基本的了解,也接觸了docker的常用命令。在這篇博客中,我將介紹進入docker容器的幾種方式。

 

2、進入docker中的幾種方式

  2.1、使用docker attach命令進入docker

  Docker提供了attach命令來進入Docker容器

docker run -itd nginx-name mynginx
docker attach mynginx
# 或者
docker attach mynginx

 

優缺點:
  當多個窗口使用該命令進入該容器時,所有窗口都會顯示同步。如果一個窗口阻塞了,其他窗口無法再進行操作;。
  因此docker attach命令不太適合於生產環境。且該命令有點古老,不太建議使用

PS:

  最近在家里的windows系統中使用docker attach mynginx命令進入docker容器卡死窗口。可能該命令太古老了,高版本用有點問題。

  2.2、使用ssh進入docker容器

  dockerc之初識這一篇博客文章中,我們就了解到docker就是一個隔離的盒子,最原始初始化的盒子我們可以將它當做一個mini型的linux虛擬機,我們在該盒子中安裝我們需要的服務(例如:nginx、mysql、redis等),打包之后就形成了目前最為流行的docker應用容器。既然是一個linux虛擬主機,那么我們就可以在該主機上面安裝一個ssh server就可以通過ssh協議來連接該容器了。

  不過這種方式也基本沒什么人用,出力不討好。哈哈,那是因為后面有一種既安全又便捷的命令用啦。

  可以去看一下這個老外寫的原因:為什么不需要在 Docker 容器中運行 sshd

  2.3、使用nsenter進入docker容器

  對於nsenter網上有比較多且詳細的介紹,這里我就說一下我自己理解。

  個人理解nsenter:通過容器在宿主機中的pid進行通訊
  因此:nsenter需要在宿主機安裝而非容器或者鏡像

# 安裝nsenter
$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
$ tar -xzvf util-linux-2.24.tar.gz  
$ cd util-linux-2.24/  
$ ./configure --without-ncurses  
$ make nsenter  
$ sudo cp nsenter /usr/local/bin  

$ nsenter --help

# nsenter可以訪問另一個進程名稱空間。因此我們需要獲取容器的PID
sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9  // 假設進程號為 4426
$ sudo nsenter --target 4426 --mount --uts --ipc --net --pid  
# --target 4426 目標pid

  2.4、使用docker exec命令進入docker容器

  docker在1.3.x版本之后提供了一個新命令exec用戶進入容器。  

  該命令是本篇博客中的主角,是個大boss。上面的三種方式都是為了襯托它的存在,郁悶臉。。。

  該方法是最常用的方法,沒有之一!!!!!

$ docker ps
$ docker exec -it mynginx /bin/bash        

  對,你沒看錯,這個命令就是這么簡單。

  

 

(以上是自己的一些見解,若有不足或者錯誤的地方請各位指出)

 作者:那一葉隨風   http://www.cnblogs.com/phpstudy2015-6/

 原文地址:  https://www.cnblogs.com/phpstudy2015-6/p/9961231.html 

 聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM