Dockerfile制作容器--ssh容器,详细步骤与指令介绍
目錄
Dockerfile介紹
什么是Dockerfile
dockerfile的基本結(jié)構(gòu)
格式
dockerfile指令
FROM指令
MAINTAINER指令
COPY指令
ADD指令
WORKDIR指令
VOLUME指令
EXPOSE指令
ENV指令
RUN指令
CMD指令
ENTRYPOINT指令
使用Dockerfile創(chuàng)建一個(gè)支持SSH服務(wù)的鏡像
測(cè)試
Dockerfile介紹
什么是Dockerfile
????????Dockerfile 是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說(shuō)明。一臺(tái)主機(jī)上可以有多個(gè)Dockerfile,可以在不同目錄編寫Dockerfile,然后再Dockerfile所在的目錄下構(gòu)建新的鏡像。
dockerfile的基本結(jié)構(gòu)
一般分為四個(gè)部分:
- 基礎(chǔ)鏡像信息
- 維護(hù)者信息
- 鏡像操作指令
- 容器啟動(dòng)時(shí)執(zhí)行指令????????
格式
docker build [options] PATH | URL |
1.選項(xiàng)-options
??
-
-t:指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
-
-c:CPU份額(相對(duì)權(quán)限)
-
-m:內(nèi)存限制
-
--build-arg:設(shè)置構(gòu)建時(shí)變量,就是構(gòu)建的時(shí)候修改ARG指令的參數(shù)
2.PATH
一般用.(即當(dāng)前工作目錄)作為上下文路徑
3.URL
docker build 還支持從URL構(gòu)建,docker buildhttp://server/context.tar.gz ,如果所給出的URL是個(gè)tar壓縮包,那么docker引擎會(huì)下載這個(gè)包,并自動(dòng)解壓縮,以其作為上下文,開始構(gòu)建
4.-
docker build還支持從標(biāo)準(zhǔn)輸入中讀取Dockerfile進(jìn)行構(gòu)建
?docker build - < Dockerfile 或者cat Dockerfile | docker build -如果標(biāo)準(zhǔn)輸入傳入的是文本文件,則將其視為Dockerfile,并開始構(gòu)建。這種形式由于直接從標(biāo)準(zhǔn)輸入中讀取Dockerfile的內(nèi)容,它沒(méi)有上下文,因此不可以像其他方法那樣可以將本地文件COPY進(jìn)鏡像之類的事情
?docker build - < context.tar.gz如果發(fā)現(xiàn)標(biāo)準(zhǔn)輸入的文件格式是 gzip 、 bzip2 以及 xz 的話, 將會(huì)使其為上下文壓縮包,直接將其展開, 將里面視為上下文, 并開始構(gòu)建
dockerfile指令
FROM指令
1.介紹
- FROM 指令必須是 Dockerfile 中非注釋行的第一個(gè)指令,即一個(gè) Dockerfile 從FROM語(yǔ)句開始;
- FROM 指令用于為鏡像文件構(gòu)建過(guò)程指定基礎(chǔ)鏡像,后續(xù)的指令運(yùn)行于此基礎(chǔ)鏡像所提供的運(yùn)行環(huán)境;
- 基礎(chǔ)鏡像可以是一個(gè)任何可用鏡像文件,默認(rèn)情況下,docker build會(huì)在docker主機(jī)上查找指
定的鏡像文件,在其不存在時(shí),則會(huì)自動(dòng)從 Docker 的公共庫(kù) pull 鏡像下來(lái),果找不到指定的鏡像文件,docker build 會(huì)返回一個(gè)錯(cuò)誤信息; - FROM可以在一個(gè) Dockerfile 中出現(xiàn)多次,如果有需求在一個(gè) Dockerfile 中創(chuàng)建多個(gè)鏡像
? - 如果FROM語(yǔ)句沒(méi)有指定鏡像標(biāo)簽,則默認(rèn)使用latest標(biāo)簽
2.示例
FROM busybox:latestMAINTAINER指令
1.介紹
- 用于讓dockerfile制作者提供本人的詳細(xì)信息
- dockerfile 并不限制MAINTAINER 指令可以出現(xiàn)的位置,但推薦將其放置于FROM指令之后
?
2.示例
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
?
COPY指令
1.介紹
- 從上下文目錄中復(fù)制文件或目錄到容器指定的路徑
2.格式
COPY <src>...<dest>
注意
- 要復(fù)制的文件或者目錄是多個(gè),支持使用通配符
- 要復(fù)制的文件必須是build上下文中的路徑,不能是其父目錄中的文件
? - 如果是目錄,則其內(nèi)部文件或子目錄會(huì)被遞歸復(fù)制,但目錄自身不會(huì)被復(fù)制;
? - 使用 COPY 指令, 源文件的各種元數(shù)據(jù)都會(huì)保留。 比如讀、 寫、 執(zhí)行權(quán)限、 文件變更時(shí)間等
? - 目標(biāo)路徑,即正在創(chuàng)建的image的文件系統(tǒng)路徑;建議使用絕對(duì)路徑, 也可以是相對(duì)于工作目錄的相對(duì)路徑( 工作目錄可以用 WORKDIR 指令來(lái)指定);
- 目標(biāo)路徑不需要事先創(chuàng)建, 如果目錄不存在會(huì)在復(fù)制文件前先行創(chuàng)建缺失目錄
3.示例
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
COPY index.html /data/web/html/ #要確保dockerfile 同級(jí)路徑下有index.html文件
?
ADD指令
1.介紹
- ADD 指令類似于COPY指令,ADD支持使用TAR文件和URL路徑
?
2.格式
ADD <src> .. <dest> 或
ADD ["<src>".. "<dest>"]
- 如果是一個(gè)本地系統(tǒng)上的壓縮格式的tar文件,它將被展開為一個(gè)目錄,其行為類似于"tar-x"命令;
- 然而,通過(guò)URL獲取到的tar文件將不會(huì)自動(dòng)展開
?
3.1示例--COPY網(wǎng)上路徑(URL)的tar包
編寫dockerfile文件
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
COPY index.html /data/web/html/
ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/? ? # 在鏡像中并不會(huì)解壓
注:ADD 的是網(wǎng)上的nginx下載路徑
?
使用build制作鏡像
[root@localhost test1]# docker build -t busyboxhttpd:v0.3 ./
?
基于此鏡像新建容器,進(jìn)行驗(yàn)證
[root@localhost ~]# docker run --name web1 --rm busyboxhttpd:v0.3 ls
/usr/local/src
nginx-1.15.8.tar.gz
?
3.2COPY本地的路徑tar包
編寫Dockerfile文件
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
COPY index.html /data/web/html/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
ADD nginx-1.15.8.tar.gz /usr/local/src/
?
在dockerfile同級(jí)目錄下準(zhǔn)備好yum.repos.d 目錄
[root@localhost test1]# wget http://nginx.org/download/nginx-1.15.8.tar.gz
?
使用build 制作鏡像
[root@localhost test1]# docker build -t busyboxhttpd:v0.4 ./
基于此新建鏡像運(yùn)行容器,進(jìn)行驗(yàn)證
[root@localhost ~]# docker run --name web1 --rm busyboxhttpd:v0.4 ls
/usr/local/src /usr/local/src/nginx-1.15.8
/usr/local/src:
nginx-1.15.8
/usr/local/src/nginx-1.15.8:
CHANGES
CHANGES.ru
...
WORKDIR指令
1.介紹
- 設(shè)定規(guī)則目錄,用于為Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指令
2.格式
WORKDIR <dirpath>
- 在Dockerfile文件中,WORKDIR指令可出現(xiàn)多次,其路徑也可以為相對(duì)路徑,不過(guò),其是相對(duì)此前一個(gè)WORKDIR指令指定的路徑;
- 如該目錄不存在, WORKDIR 會(huì)幫你建立目錄
- 另外,WORKDIR也可調(diào)用由ENV指令定義的變量;
?
VOLUME指令
1.介紹
- 用于在image中創(chuàng)建一個(gè)掛載點(diǎn)目錄,以掛載Docker host上的卷或其它容器上的卷。在Dockerfile 中, 我們可以事先指定某些目錄掛載為匿名卷, 這樣在運(yùn)行時(shí)如果用戶不指定掛
- 載, 其應(yīng)用也可以正常運(yùn)行, 不會(huì)向容器存儲(chǔ)層寫入大量數(shù)據(jù)
?
2.語(yǔ)法
例如:VOLUME /data
- 這里的 /data 目錄就會(huì)在運(yùn)行時(shí)自動(dòng)掛載為匿名卷, 任何向 /data 中寫入的信息都不會(huì)記錄進(jìn)容器存儲(chǔ)層, 從而保證了容器存儲(chǔ)層的無(wú)狀態(tài)化。 當(dāng)然, 運(yùn)行時(shí)可以覆蓋這個(gè)掛載設(shè)置。 比如:
????????docker run -d -v mydata:/data xxxx
- 在這行命令中, 就使用了 mydata 這個(gè)命名卷掛載到了 /data 這個(gè)位置, 替代了Dockerfile 中定義的匿名卷的掛載配置。
EXPOSE指令
1.介紹
- 聲明運(yùn)行時(shí)容器提供服務(wù)端口, 這只是一個(gè)聲明, 在運(yùn)行時(shí)并不會(huì)因?yàn)檫@個(gè)聲明應(yīng)用就會(huì)開啟這個(gè)端口的服務(wù)。
- 在 Dockerfile 中寫入這樣的聲明有兩個(gè)好處, 一個(gè)是幫助鏡像使用者理解這個(gè)鏡像服務(wù)的守護(hù)端口, 以方便配置映射; 另一個(gè)用處則是在運(yùn)行時(shí)使用隨機(jī)端口映射時(shí), 也就是 docker run -P時(shí), 會(huì)自動(dòng)隨機(jī)映射 EXPOSE 的端口
2.語(yǔ)法
EXPOSE <port>[/ <protocol>] [<port>[/ <protocol>] ....EXPOSE <port>[/ <protocol>]
[<port>[/ <protocol>] ....
?
注:
- 用于指定傳輸層協(xié)議,可為tcp或udp二者之一,默認(rèn)為TCP協(xié)議
- EXPOSE指令可一次指定多個(gè)端口,例如:EXPOSE 11211/udp 11211/tcp
?
3.示例
編寫dockerfile文件
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
COPY index.html /data/web/html/
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
WORKDIR /usr/local/
ADD nginx-1.15.8.tar.gz ./src/
EXPOSE 80/tcp
?
使用build 制作鏡像
[root@localhost test1]# docker build -t busyboxhttpd:v0.6 ./
?
基于此新建鏡像運(yùn)行容器,進(jìn)行驗(yàn)證
[root@localhost ~]# docker run --name web1 -P --rm -it busyboxhttpd:v0.6
/bin/httpd -f -h /data/web/html
------- 另打開一個(gè)終端,驗(yàn)證httpd服務(wù)的80端口
[root@localhost ~]# docker inspect -f {{.NetworkSettings.IPAddress}} web1
172.17.0.2
[root@localhost ~]# curl 172.17.0.2:80
<h1>Busybox httpd server</h1>
[root@localhost ~]# docker port web1
80/tcp -> 0.0.0.0:32769
[root@localhost ~]# curl 127.0.0.1:32769
<h1>Busybox httpd server</h1>
注:就算dockerfile 中有EXPOSE 指令暴露端口,但是不是真正的暴露;需要在啟動(dòng)容器時(shí),使用-P選項(xiàng)真正的暴露端口。
?
ENV指令
1.介紹
- 用于為鏡像定義所需的環(huán)境變量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、COPY等)所調(diào)用
- 調(diào)用格式為$variable_ name 或 ${variable_ name}
?
2.格式
ENV <key>=<value> . .
注意:可以一次設(shè)置多個(gè)變量,每個(gè)變量為一個(gè)”="的鍵值對(duì),如果包含空格,可以以反斜線
(\)進(jìn)行轉(zhuǎn)義,也可通過(guò)對(duì)其加引號(hào)進(jìn)行標(biāo)識(shí);另外,反斜線也可用于續(xù)行;
3.示例
編寫dockerfile文件
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
ENV DOC_ROOT=/data/web/html/ \
WEB_SERVER_PACKAGE="nginx-1.15.8"
COPY index.html ${DOC_ROOT}
#ADD http://nginx.org/download/nginx-1.15.8.tar.gz /usr/local/src/
WORKDIR /usr/local/
ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src/
VOLUME /data/mysql
EXPOSE 8080:80/tcp
?
使用Dockerfile制作鏡像
[root@localhost test1]# docker build -t busyboxhttpd:v0.7 ./
基于此新建鏡像運(yùn)行容器,進(jìn)行驗(yàn)證
[root@localhost test1]# docker run --name web1 --rm -it busyboxhttpd:v0.7
printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=59fa622cfa1f
TERM=xterm
DOC_ROOT=/data/web/html/
WEB_SERVER_PACKAGE=nginx-1.15.8
HOME=/root
--- 在啟動(dòng)容器時(shí),使用docker run -e 設(shè)置修改變量
[root@localhost test1]# docker run --name web1 -e WEB_SERVER_PACKAGE=nginx-1.15.7
--rm -it busyboxhttpd:v0.7 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=08778b07399c
TERM=xterm
WEB_SERVER_PACKAGE=nginx-1.15.7
DOC_ROOT=/data/web/html/
HOME=/root
?
RUN指令
1.介紹
- 用于指定docker build過(guò)程中運(yùn)行的程序,其程序可以是任何命令。
2,語(yǔ)法:
? ? ? ? RUN <command>
? ? ? ??RUN ["<executable>", "<param1>", "<param2>"]
注:
- 第一種格式中,通常是一個(gè)shell命令, 且以“/bin/sh -c”來(lái)運(yùn)行它;
- 第二種語(yǔ)法格式中的參數(shù)是一個(gè)JSON格式的數(shù)組,其中為要運(yùn)行的命令的可執(zhí)行文件,后面的為傳遞給命令的選項(xiàng)或參數(shù);然而,此種格式指定的命令不會(huì)以“/bin/sh -c”來(lái)發(fā)起,因此常見的shell操作如變量替換以及通配符(?,*等)替換將不會(huì)進(jìn)行;不過(guò),如果要運(yùn)行的命令依賴于此shell特性的話,可以將其替換為類似下面的格式:RUN ["/bin/bash", "-c", "", ""]
?
示例:
編寫dockerfile文件:使用RUN 執(zhí)行解壓命令
FROM busybox:latest
MAINTAINER "Along <along@along.com>"
ENV DOC_ROOT=/data/web/html/ \
WEB_SERVER_PACKAGE="nginx-1.15.8.tar.gz"
COPY index.html ${DOC_ROOT}
COPY yum.repos.d /etc/yum.repos.d/
WORKDIR /usr/local/
ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} ./src/
#ADD ${WEB_SERVER_PACKAGE} ./src/
VOLUME /data/mysql
EXPOSE 8080:80/tcp
RUN cd ./src && \
tar -xf ${WEB_SERVER_PACKAGE}.tar.gz
?
使用build 制作鏡像
[root@localhost test1]# docker build -t busyboxhttpd:v0.8 ./
基于此新建鏡像運(yùn)行容器,進(jìn)行驗(yàn)證:已經(jīng)執(zhí)行了解壓命令
[root@localhost test1]# docker run --name web1 -P --rm -it busyboxhttpd:v0.7 ls
/usr/local/src
nginx-1.15.8
?
CMD指令
?1.介紹
- 類似于RUN指令,CMD指令也可用于運(yùn)行任何命令或應(yīng)用程序,不過(guò),二者的運(yùn)行時(shí)間點(diǎn)不同
- RUN指令運(yùn)行于映像文件構(gòu)建過(guò)程中,而CMD指令運(yùn)行于基于Dockerfile構(gòu)建出的新映像文件啟動(dòng)一個(gè)容器時(shí)
- CMD指令的首要目的在于為啟動(dòng)的容器指定默認(rèn)要運(yùn)行的程序,且其運(yùn)行結(jié)束后,容器也將終止;不過(guò),CMD指定的命令可以被docker run的命令行選項(xiàng)所覆蓋
- 在Dockerfile中可以存在多個(gè)CMD指令,但僅最后一個(gè)會(huì)生效
?
2.語(yǔ)法
CMD <command> 或
CMD ["<executable>","<param1>","<param2>"] 或
CMD ["<param1>","<param2>"]
?
ENTRYPOINT指令
1.介紹
- 類似CMD指令的功能,用于為容器指定默認(rèn)運(yùn)行程序,從而使得容器像是一個(gè)單獨(dú)的可執(zhí)行程序
- 與CMD不同的是,由ENTRYPOINT啟動(dòng)的程序不會(huì)被docker run命令行指定的參數(shù)所覆蓋,而且,這些命令行參數(shù)會(huì)被當(dāng)作參數(shù)傳遞給ENTRYPOINT指令指定的程序
- 不過(guò),docker run命令的 --entrypoint選項(xiàng)的參數(shù)可覆蓋ENTRYPOINT指令指定的程序
- 當(dāng)指定了 ENTRYPOINT 后, CMD 的含義就發(fā)生了改變, 不再是直接的運(yùn)行其命令, 而是將CMD的內(nèi)容作為參數(shù)傳給 ENTRYPOINT 指令, 換句話說(shuō)實(shí)際執(zhí)行時(shí), 將變?yōu)?#xff1a; <ENTRYPOINT> "<CMD>"
3.語(yǔ)法
ENTRYPOINT <command>
ENTRYPOINT ["<executable>", "<param1>", "<param2>"]
注意:
- docker run命令傳入的命令參數(shù)會(huì)覆蓋CMD指令的內(nèi)容并且附加到ENTRYPOINT命令最后做為其參數(shù)使用
- Dockerfile文件中也可以存在多個(gè)ENTRYPOINT指令,但僅有最后一個(gè)會(huì)生效
?
4.示例
編寫dockerfile文件
FROM busybox
LABEL maintainer="Along <along@along.com>" app="httpd"
ENV WEB_DOC_ROOT="/data/web/html"
RUN mkdir -p ${WEB_DOC_ROOT} && \
echo "<h1>Busybox httpd server</h1>" > ${WEB_DOC_ROOT}/index.html
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
?
使用build 制作鏡像
[root@localhost test2]# docker build -t busyboxhttpd:v1.2 ./
基于此新建鏡像運(yùn)行容器,進(jìn)行驗(yàn)證
[root@localhost test2]# docker run --name web2 --rm busyboxhttpd:v1.2 ls / 發(fā)現(xiàn)不會(huì)執(zhí)行l(wèi)s / 這個(gè)命令;仍然執(zhí)行的是ENTRYPOINT中設(shè)置的命令;與上面CMD 指令對(duì)比; [root@localhost ~]# curl 172.17.0.2 #httpd服務(wù)仍然執(zhí)行,沒(méi)有被ls / 指令覆蓋 <h1>Busybox httpd server</h1>使用Dockerfile創(chuàng)建一個(gè)支持SSH服務(wù)的鏡像
1.創(chuàng)建一個(gè)存放Dockerfil文件的工作目錄:
[root@cotenos ~]# mkdir -p /root/docker/sshd
[root@cotenos ~]# cd /root/docker/sshd/? ? ? ? ? ? # 切換到工作目錄下? ?
2.在其中,創(chuàng)建Dockerfile文件與run.sh文件
[root@cotenos sshd]# touch Dockerfile run.sh
3.編輯run.sh腳本與authorized_keys文件
# run.sh腳本用于運(yùn)行容器時(shí),啟動(dòng)容器李的sshd服務(wù)
#!/bin/bash
/usr/sbin/sshd -D
# authorized_keys文件免密登錄。在宿主主機(jī)上生成公鑰,并將公鑰復(fù)制進(jìn)authorized_keys文件。
[root@cotenos sshd]# sshd-keygen -t rsa
[root@cotenos sshd]# cat ~/.ssh/id_rsa.pub?
ssh-rsa AAAAB3NzaC1yc2CyRnXHISKNC+L/YnwX+a9EPZkgJ3ypa9bPRFO2CZwCcK6OeyDH18J6nR6/a8tDBMrjot2xmFiLFvvLhMM7Ztxmj+pbMICGHPFqE63BYJcLOaPdc271oIM/5QWauaZOfmEdbQTnjsbDPhfNdiidxOfKloTsqplzUdLMWzi8ow1R92BR/p2uWyQYTpeXOA3bW+NvR/WOwPsr6JA6uORsS3YnEMFcXCX9rU2+Af4TZpNhdFbz7QKmalSA9lGvUmmxw7mzU+XCJHmO8s/kQjGpPhKlvl0sTAUk/+ke1gNXs2XhFtadFcQ3SzGoyT6YRkG/biU7/0w3F root@cotenos
[root@cotenos sshd]# cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
# 將~/.ssh/authorized_keys文件 復(fù)制到?/root/docker/sshd/下
[root@cotenos sshd]# cp /root/.ssh/authorized_keys .
4.編寫Dockerfile文件
下面是Dockerfile的內(nèi)容以及各部分的注釋,可以上文中命令解釋對(duì)比來(lái)理解創(chuàng)建鏡像過(guò)程
[root@cotenos sshd]# vim Dockerfile?
#設(shè)置繼承鏡像,下面使用的是ubuntu的18.04版本
FROM ubuntu:18.04
# 提供作者的信息
MAINTAINER docker_user<user@docker.com>
# 更改ubuntu的源為國(guó)內(nèi)的源
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list?
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" ?>> /etc/apt/sources.list
# 更新源并下載sshd服務(wù)?
RUN apt-get update && apt-get install -y openssh-server
?
# 創(chuàng)建運(yùn)行服務(wù)所需要的目錄
RUN mkdir -p /var/run/shhd
RUN mkdir -p /root/.ssh
?
# 取消遠(yuǎn)程登錄的限制
RUN sed -ri 's/session ? ?required ? ? pam_loginuid.so/#session ? ?required ? ? pam_loginuid.so/g' /etc/pam.d/sshd
# 將宿主機(jī)產(chǎn)生的authorized.keys文件復(fù)制鏡像的/root/.ssh/目錄下
COPY authorized_keys /root/.ssh/authorized_keys
# 將run.sh腳本文件復(fù)制到根目錄下,并配置執(zhí)行權(quán)限
COPY run.sh /run.sh
RUN chmod 755 /run.sh
# 開放22端口
EXPOSE 22
# 設(shè)置啟動(dòng)sshd服務(wù)命令
CMD ["/run.sh"]
5.使用docker build命令來(lái)創(chuàng)建鏡像
[root@cotenos sshd]# docker build -t sshd_v2:ubuntu .
?
#? -t, --tag list ? ? ? ? ? ? ? ?Name and optionally a tag in the 'name:tag' format
#?sshd_v2:ubuntu: 容器的名字
# .:當(dāng)前目錄
測(cè)試
后臺(tái)運(yùn)行容器
[root@cotenos sshd]# docker run -d -p 10022:22 sshd_v2:ubuntu
# -d:表示后臺(tái)運(yùn)行
# -p:表示映射端口
使用ssh遠(yuǎn)程連接容器
注意如果宿主主機(jī)中的/root/.ssh/目錄下有known_hosts文件時(shí),需要?jiǎng)h除。
[root@cotenos .ssh]# ssh 192.168.112.135 -p 10022
The authenticity of host '[192.168.112.135]:10022 ([192.168.112.135]:10022)' can't be established.
ECDSA key fingerprint is SHA256:mCPIoXyflt8hksQaGDQHuak/569Oud38H/zNepBKD1A.
ECDSA key fingerprint is MD5:59:8b:f6:23:bf:93:0e:81:52:b9:97:e4:c4:40:35:6c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.112.135]:10022' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 3.10.0-1160.el7.x86_64 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.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
root@0f20940125bc:~#?
?
總結(jié)
以上是生活随笔為你收集整理的Dockerfile制作容器--ssh容器,详细步骤与指令介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数字音视频技术是我国产业发展的重大核心技
- 下一篇: 【论文阅读】Improving Tabl