使用 Dockfile
給映象上增加 ssh
服務。
佈置環境
阿里雲輕量應用伺服器 映象資訊:Ubuntu 16.04
拉取 ubuntu:latest
映象
docker pull ubuntu:latest
完成後,檢視映象是否成功下載
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 3556258649b2 3 weeks ago 64.2MB
建立工作目錄
新建 sshd-ubuntu 資料夾
mkdir sshd_ubuntu
在其中新建 Dockerfile
和 run.sh
檔案
cd sshd_ubuntu
touch Dockerfile run.sh
編寫 run.sh 和 authorized_keys 檔案
- run.sh 此處書寫 容器執行時 執行的命令
#!/bin/bash /usr/sbin/sshd -D
- authorized_keys 此處書寫宿主機中生成的
ssh
公鑰ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub > authorized_keys
編寫 Dockerfile
#設定繼承映象
FROM ubuntu:latest
#作者資訊
MAINTAINER docker_user (user@docker.com)
#先更新快取,安裝ssh服務
RUN apt-get update \
&& apt-get install -y openssh-server \
&& mkdir -p /var/run/sshd \
&& 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"]
-
RUN 執行指定命令。格式為 RUN commend 或 RUN ["executable", ”paraml”, ”param2"]
前者是在 shell 終端執行,即 /bin/sh -c ; 後者指令會被解析為 json,所以必須為雙引號使用 exec 執行,不啟動 shell 環境。
每條 RUN 指令將在當前映象基礎上執行指定命令,並提交為新的映象層 ,所以,RUN命令能合併則合併,儘量減少映象層。 -
CMD 用來指定啟動容器時預設執行的命令 。 CMD ["executable ",”paraml ” , "param2 "]
每個
Dockerfile
中只能有一條CMD命令,多條的話,只有最後一條執行。
如果使用者啟動容器時候手動指定了執行的命令(作為 run 命令的引數),則會覆蓋掉
CMD 指定的命令 。 -
ADD 新增內容到映象 。格式 ADD ,該命令將複製指定的< src>路徑下內容到容器中的< dest>路徑下 。
其中可以是 Dockerfile所在目錄的一個相對路徑(檔案或目錄);也可以是一個URL ;還可以是一個 tar 檔案(自動解壓為目錄) 可以是映象內絕對路徑,或者相對於工作目錄( WORKDIR)的相對路徑 。 *路徑支援正則格式,例如: ADD .c /code/**
-
COPY 複製內容到映象 。格式 COPY
COPY 與 ADD 指令功能類似,當使用本地目錄為源目錄時,推薦使用 COPY。
建立映象
在 sshd_ubuntu 目錄下,使用 docker build建立映象。
docker build -t sshd:dockerfile .
注意上面命令末尾的 . 號指的是當前目錄
檢視映象是否安裝建立成功
~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd dockerfile e35f180c1e98 5 hours ago 207MB
ubuntu latest 3556258649b2 3 weeks ago 64.2MB
測試映象,執行容器
- 使用剛才建立的 sshd:dockerfile 映象來執行一個容器。
直接啟動映象,對映容器的 22 埠到本地的 10086 埠:docker run -d -p 10086:22 --name sshd-test sshd:dockerfile
2.檢視容器是否成功啟動
~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2c2e2688046 sshd:dockerfile "/run.sh" 5 hours ago Up 5 hours 0.0.0.0:10086->22/tcp sshd-test
3.檢視
docker
執行的IP地址~ ifconfig docker|grep inet inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
地址為 172.17.0.1
4.透過 ssh 連線容器
~ ssh 172.17.0.1 -p 10086
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.4.0-93-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Thu Aug 15 11:38:03 2019 from 172.17.0.1
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
root@c2c2e2688046:~#
連線成功!
本作品採用《CC 協議》,轉載必須註明作者和本文連結