雖然CentOS 7 也有官方版的docker image,但內容還是最原始的狀態,要正常使用還需要一些加工。所以這次就來記錄一下由CentOS 7.9官方版的原本docker image作為基底來製作合用的docker image所需要的步驟及最後的Docker File版本。
預計需要的功能
先來預想一下如有你需要一組可以執行且合用的CentOS 7的docker image,你會想要有什麼功能:
- 最新的套件 yum -y update
- 有基本編輯器 vim
- 能取得網路上的檔案 wget
- 能使用版本控管 git
- 能用ssh登入 openssh-server
- 能查看網路狀態 net-tools : netstat
- 有正確的時區
就我而言我的最基本要求就是上述這些需求,所以基於這些需求目前整理後可用的Dockerfile就是:
FROM centos:centos7.9.2009
MAINTAINER Justin your-email@mail.server
RUN yum -y update
RUN TZ=Asia/Taipei \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone
RUN yum -y install vim wget git
RUN yum -y install openssh-server net-tools
RUN mkdir -p /var/run/sshd
RUN ssh-keygen -A
COPY run.sh /home
RUN chmod a+x /home/run.sh
SSH設定
其中要特別說明的是ssh-keygen -A,一般來說安裝好openssh-server後它就會自動產生sshd啟動時所需的一些加密金鑰,但很特別的是在Centos7.9.2009這個版本中安裝完openssh-server套件,要用/usr/sbin/sshd -D啟動時就會出現以下的錯誤:
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
查了一些文章,有人說就要一項項地用ssh-keygen的方式來產生,但後來看到有人提供-A的方式可一次全部產生,果然就比較方便了。
run.sh的內容其實就只是用非daemon方式啟動sshd,以避免docker image執行後就終止:
#!/bin/bash
/usr/sbin/sshd -D