天天看點

【系列1】使用Dockerfile建立帶sshd服務的Centos Docker鏡像

       使用Dockerfile建立

  在第一部分中曾介紹過Dockerfile的基礎知識,下面将介紹如何使用Dockerfile來建立一個支援SSH服務的鏡像。 

 ① 建立工作目錄

 首先應建立一個sshd_centos工作目錄:

[root@docker1 ~]# mkdir sshd_centos

[root@docker1 ~]# cd sshd_centos/

[root@docker1 sshd_centos]# touch Dockerfile run.sh

[root@docker1 sshd_centos]# ls

Dockerfile  run.sh   

 ② 編寫run.sh腳本和authorized_keys檔案

[root@docker1 sshd_centos]# vim run.sh 

#!/bin/bash

/usr/sbin/sshd -D  

在宿主主機上生成SSH密鑰對,并建立authorized_keys檔案:

# ssh-keygen -t rsa

....

# cat ~/.ssh/id_rsa.pub >authorized_keys  

    或[root@docker1 ~]# cp /root/.ssh/id_rsa.pub /root/sshd_centos/authorized_keys 

 ③ 編寫Dockerfile

 下面是Dockerfile的内容及各部分的注釋:

[root@docker1 sshd_centos]# cat Dockerfile 

#設定繼承鏡像

FROM docker.io/centos:latest

#提供一些作者的資訊

#設定環境變量,所有操作都是非互動式的

ENV DEBIAN_FRONTEND noninteractive

RUN echo "Asia/Shanghai" > /etc/timezone #&& \

        # dpkg-reconfigure -f noninteractive tzdata      #這也是設定時區的

#注意這裡要更改系統的時區設定,因為在Web應用中經常會用到時區這個系統變量,預設的centos會讓你的應用此程式發生不可思議的效果哦

#下面開始運作指令,此處更改Centos的源為國内阿裡的源

RUN yum update

RUN yum install wget -y

RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

RUN yum repolist

#安裝ssh服務

RUN yum install -y openssh-server

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key 

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key

RUN mkdir -p /var/run/sshd

RUN mkdir -p /root/.ssh

#取消pam限制

RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd  

#複制配置檔案到相應位置,并賦予腳本可執行權限

ADD authorized_keys /root/.ssh/authorized_keys

ADD run.sh /run.sh

RUN chmod 755 /run.sh

#開放端口

EXPOSE 22

#設定自啟動指令

CMD ["/run.sh"]

④ 建立鏡像

在sshd_centos目錄下,使用docker build

[root@docker1 sshd_centos]# docker build -t sshd:centos .

如果使用Dockerfile建立自定義鏡像,那麼需要注意的是Docker會自動删除中間臨時建立的層,還需要注意每一步的操作和編寫的Dockerfile中指令的對應關系。

指令執行完畢後,如果可見"Successfully built XXX"字樣,則說明鏡像建立成功。可以看到,

[root@docker1 ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

sshd                 centos              fbbedf7fb2a1        16 hours ago        301.9 MB

......

⑤ 測試鏡像,運作容器

 使用剛才建立的sshd:centos鏡像來運作一個容器。直接啟動鏡像,映射容器的22端口到本地的10122端口:

[root@docker1 ~]# docker run -d -p 10122:22 sshd:centos

c72fecc1e7c62a4113a1ff6673b55f43e24cac66ad29ad2d339df0ee793e4928

[root@docker1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES

c72fecc1e7c6        sshd:centos         "/run.sh"                10 seconds ago      Up 8 seconds        0.0.0.0:10122->22/tcp                      hopeful_goldwasser    

在宿主主機新打開一個終端,連接配接到建立的容器:

Last login: Tue Nov 14 09:51:22 2017 from 10.0.0.1

[root@docker1 ~]# ssh 10.0.0.10 -p 10122

The authenticity of host '[10.0.0.10]:10122 ([10.0.0.10]:10122)' can't be established.

RSA key fingerprint is SHA256:X3Rf7GKXCkxhFYpc5SkiKScYHq7tuVidbbc3YaJk/yg.

RSA key fingerprint is MD5:de:7b:00:00:90:ec:f0:51:35:4a:66:60:49:a2:42:f2.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '[10.0.0.10]:10122' (RSA) to the list of known hosts.

[root@c72fecc1e7c6 ~]# exit

logout

Connection to 10.0.0.10 closed.

Last login: Tue Nov 14 02:07:17 2017 from 10.0.0.10

本文轉自 Mr_sheng 51CTO部落格,原文連結:http://blog.51cto.com/sf1314/1981499