須要提早下載好官方的ubuntu鏡像,我這裏使用的是ubuntu:14.04版本,這裏安裝了一些基礎的工具ssh,curl,wget,vim等等,包括後續的Docker鏡像須要啓動多個服務,因此提早先裝好supervisor。html
Dockerfile文件git
############################################ # version : birdben/tools:v1 # desc : 當前版本安裝的ssh,wget,curl,supervisor ############################################ # 設置繼承自ubuntu官方鏡像 FROM ubuntu:14.04 # 下面是一些建立者的基本信息 MAINTAINER birdben (191654006@163.com) # 注意這裏要更改系統的時區設置,由於在 web 應用中常常會用到時區這個系統變量,默認的 ubuntu 會讓你的應用程序發生難以想象的效果哦 ENV DEBIAN_FRONTEND noninteractive # 清空ubuntu更新包 RUN sudo rm -rf /var/lib/apt/lists/* # 一次性安裝vim,wget,curl,ssh server等必備軟件 # RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list RUN sudo apt-get update RUN sudo apt-get install -y vim wget curl openssh-server sudo RUN sudo mkdir -p /var/run/sshd # 將sshd的UsePAM參數設置成no RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config # 添加測試用戶admin,密碼admin,而且將此用戶添加到sudoers裏 RUN useradd admin RUN echo "admin:admin" | chpasswd RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers # 把admin用戶的shell改爲bash,不然SSH登陸Ubuntu服務器,命令行不顯示用戶名和目錄 RUN usermod -s /bin/bash admin # 安裝supervisor工具 RUN sudo apt-get install -y supervisor RUN sudo mkdir -p /var/log/supervisor # 添加 supervisord 的配置文件,並複製配置文件到對應目錄下面。(supervisord.conf文件和Dockerfile文件在同一路徑) COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 容器須要開放SSH 22端口 EXPOSE 22 # 執行supervisord來同時執行多個命令,使用 supervisord 的可執行路徑啓動服務。 CMD ["/usr/bin/supervisord"]
Dockerfile源文件連接:github
supervisor配置文件內容web
# 配置文件包含目錄和進程 # 第一段 supervsord 配置軟件自己,使用 nodaemon 參數來運行。 # 第二段包含要控制的 2 個服務。每一段包含一個服務的目錄和啓動這個服務的命令。 [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D
supervisor源文件連接:docker
控制檯終端shell
# 構建鏡像 $ docker build -t="birdben/tools:v1" . # 運行已經構件好的鏡像,由於我使用的ubuntu虛擬機安裝的Docker,而個人虛擬機也安裝了ssh服務,因此這裏指定了宿主機的端口爲9999對應Docker容器的22端口 $ docker run -p 9999:22 -t -i "birdben/tools:v1" # 此時查看宿主機的9999端口,已經處於監聽狀態: $ netstat -aunpt (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN - tcp6 0 0 :::9999 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN - # 再查看一下宿主機的IP地址,我這裏的IP地址是10.211.55.4 $ ifconfig # 此時能夠經過ssh遠程鏈接Docker容器了 $ ssh root@10.211.55.4 -p 9999 # 輸入密碼應該就能夠鏈接到Docker容器了 # 若是遇到下面的問題,這是Linux重裝或則openssh-server重裝引發的,執行如下命令便可 $ ssh-keygen -R 10.211.55.4 # 若是上述方式很差用,進入此目錄,刪除的10.211.55.4相關rsa的信息便可 $ vi ~/.ssh/known_hosts @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is 8c:4b:88:88:53:4a:b1:f0:e2:da:9a:dc:aa:67:46:df. Please contact your system administrator. Add correct host key in /Users/ben/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/ben/.ssh/known_hosts:18 RSA host key for [10.211.55.4]:9999 has changed and you have requested strict checking. Host key verification failed.
遇到的問題和解決辦法ubuntu
Q:ssh登陸後,命令行不顯示用戶名和目錄 A:把用戶的shell改爲bash,不然SSH登陸Ubuntu服務器,命令行不顯示用戶名和目錄 RUN usermod -s /bin/bash admin 參考: http://bbs.csdn.net/topics/390188284 Q:ssh建立admin登陸用戶,不使用root登陸 A:這裏使用ssh不建議直接使用root用戶登陸,建議建立一個新的用戶例如admin登陸 RUN useradd admin RUN echo "admin:admin" | chpasswd RUN echo "admin ALL=(ALL) ALL" >> /etc/sudoers 參考: http://blog.csdn.net/kongxx/article/details/38395305 http://blog.csdn.net/kongxx/article/details/38412119 Q:如何修改ssh服務相關配置 A:能夠直接修改sshd_config配置文件 vi /etc/ssh/sshd_config 須要修改以下 # 設置不容許root用戶登陸 PermitRootLogin yes # 利用 PAM 管理使用者認證有不少好處,能夠記錄與管理。 # 因此這裏咱們建議你使用 UsePAM 且 ChallengeResponseAuthentication 設定爲 no,可是咱們這裏爲了簡單設置爲密碼認證,ChallengeResponseAuthentication設定爲yes,UsePAM設置爲no ChallengeResponseAuthentication yes UsePAM no 參考: http://my.oschina.net/fsmwhx/blog/143354 http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646032.html