摘要:和區(qū)別讓用戶可以進(jìn)入查看輸出等等操作,但是并不會(huì)另外啟動(dòng)一個(gè)進(jìn)程如果你用來退出,同時(shí)這個(gè)信號(hào)會(huì)默認(rèn)情況會(huì)啟動(dòng)另外一個(gè)進(jìn)程來進(jìn)入,這里的操作是在這個(gè)進(jìn)程下的。
走在通往docker的大道上——docker基礎(chǔ)知識(shí)匯總
最后編輯時(shí)間:2017年03月09日
Docker是一種新的容器化技術(shù),為應(yīng)用開發(fā)和部署提供“一站式”容器解決方案,能幫助開發(fā)者高效快速的構(gòu)建應(yīng)用,實(shí)現(xiàn)“Build,Ship and Run Any App, Anywhere”,從而達(dá)到“一次構(gòu)建,到處運(yùn)行”的目的。
2.為什么Docker相信大家都有這樣的遭遇,每次要開發(fā)新軟件或者換環(huán)境的時(shí)候,需要安裝配置一大堆的依賴。雖然有yum或者apt這類的包管理軟件幫忙,但是如果出現(xiàn)的包沖突,或者找不到包的情況,或者需要源碼編譯卻缺失依賴,這種環(huán)境部署簡直就是噩夢。
Docker就是解決上述噩夢的利器。同時(shí),Docker也解決了跨平臺(tái)部署的問題,你可以在MacOS, Windows, Linux上安裝Docker,然后下載你所需要的Docker鏡像(image)進(jìn)行程序開發(fā)。當(dāng)你的程序需要發(fā)布的時(shí)候,僅僅需要將你的Docker鏡像打包發(fā)布,不再需要搭建新環(huán)境,讓軟件開發(fā)流程變得快速簡單。
3.Docker的特色包括但不僅限于:
物美價(jià)廉
輕量級(jí)和便攜化
低CPU 和內(nèi)存使用
啟動(dòng)、運(yùn)行、關(guān)閉速度快
可以用來作為云計(jì)算的基礎(chǔ)
對于開發(fā)和部署來說,Docker可以:
更快速的交付和部署應(yīng)用環(huán)境
更高效的資源利用率
更便捷的遷移和擴(kuò)展性
更便捷的應(yīng)用更新管理
4.Docker與虛擬機(jī)Docker和虛擬機(jī)都是基于軟件的平臺(tái)虛擬化技術(shù),其中:
虛擬機(jī)屬于完全虛擬化,即模擬完整的底層硬件環(huán)境特權(quán)指令的執(zhí)行,客戶操作系統(tǒng)無需進(jìn)行修改。比如我們常用的VirtualBox,VMWare Workstation和Parallels Desktop等虛擬化軟件。
Docker和其它容器技術(shù)便是操作系統(tǒng)級(jí)虛擬化,即直接通過內(nèi)核創(chuàng)建虛擬的操作系統(tǒng)實(shí)例(內(nèi)核和庫),來隔離不同的進(jìn)程和資源。
也就是說,Docker容器不需要額外的虛擬機(jī)管理軟件和虛擬機(jī)操作系統(tǒng)層,直接在宿主機(jī)操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,從而達(dá)到輕量級(jí),高效的目的。
5.Docker核心概念 Docker底層組成:Namespace:隔離技術(shù)的第一層,確保 Docker 容器內(nèi)的進(jìn)程看不到也影響不到 Docker 外部的進(jìn)程。
Control Groups:LXC 技術(shù)的關(guān)鍵組件,用于進(jìn)行運(yùn)行時(shí)的資源限制。
UnionFS(文件系統(tǒng)):容器的構(gòu)件塊,創(chuàng)建抽象層,從而實(shí)現(xiàn) Docker 的輕量級(jí)和運(yùn)行快速的特性。
Docker的主要構(gòu)成:Docker Client:用戶和 Docker 守護(hù)進(jìn)程進(jìn)行通信的接口,也就是 docker 命令。
Docker Daemon:宿主機(jī)上用于用戶應(yīng)答用戶請求的服務(wù)。
Registry:注冊服務(wù)器,注冊服務(wù)器是存放倉庫(Repository)的具體服務(wù)器。
Docker的三元素:Container:用于運(yùn)行應(yīng)用程序的容器,包含操作系統(tǒng)、用戶文件和元數(shù)據(jù),相當(dāng)于鏡像Images的一個(gè)運(yùn)行實(shí)例。。
Images:只讀的 Docker 容器模板,簡言之就是系統(tǒng)鏡像文件。
DockerFile:進(jìn)行鏡像創(chuàng)建的指令文件。
簡單來說,Docker 鏡像就是一個(gè)只讀的模板。例如:一個(gè)鏡像可以包含一個(gè)完整的 ubuntu 操作系統(tǒng)環(huán)境,里面僅安裝了 Apache 或用戶需要的其它應(yīng)用程序。
6.Docker安裝Docker是建立在Linux內(nèi)核基礎(chǔ)上的,在目前的主流Linux系統(tǒng)中,都已經(jīng)原生支持了Docker且使用體驗(yàn)也最好,當(dāng)然,在Windows平臺(tái)和MacOS系統(tǒng)中也支持Docker,只是需要使用類似Boot2Docker等虛擬化工具來提供Linux支持。
關(guān)于在各種平臺(tái)上安裝Docker的方法參考 官網(wǎng) 的Docker Docs,這里不再贅述。
7.Docker基礎(chǔ)命令Docker提供了很多命令來管理鏡像、容器和倉庫。包括:
從Docker Hub倉庫中查找search、上傳push、下載pull鏡像。
查看本地已有鏡像、容器信息的images、inspect和ps命令。
刪除本地鏡像和容器的rmi和rm命令。
基于已有容器創(chuàng)建鏡像的commit命令和基于Dockerfile創(chuàng)建鏡像build命令。
運(yùn)行、進(jìn)入容器的run、exec和attach命令。
鏡像的保存和導(dǎo)入命令save和load,容器的導(dǎo)出導(dǎo)入命令export和import
具體命令的使用方法使用命令docker --help查看所有命令列表,使用docker COMMAND --help查看具體命令的信息
8.基礎(chǔ)命令詳解 1.檢查安裝 docker info如果 Docker 沒有安裝,會(huì)提示command not found,如果 Docker 已經(jīng)成功安裝,則會(huì)有類似如下的提示:
輸入 docker info 輸出 Containers: 2 Images: 2 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 6 Dirperm1 Supported: false Execution Driver: native-0.2 Kernel Version: 3.13.0-24-generic Operating System: Ubuntu 14.04 LTS CPUs: 1 Total Memory: 979.6 MiB Name: ubuntu ID: PRLX:CY3O:TZ6P:4UAS:VDWM:MHWB:FB3V:TJBJ:GQ4J:Q453:GPOY:WZSI WARNING: No swap limit support2. 查看本地鏡像 docker images
鏡像是Docker生命周期中的“構(gòu)建”部分,可以用來創(chuàng)建 Docker 容器。
輸入 docker images 輸出 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 91c95931e552 5 days ago 910 B3. 下載鏡像 docker pull
輸入 docker pull busybox 輸出 latest: Pulling from busybox cf2616975b4a: Pull complete 6ce2e90b0bc7: Pull complete 8c2e06607696: Already exists busybox:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Digest: sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d Status: Downloaded newer image for busybox:latest
busybox 是一個(gè) Linux 工具集,包括各種常用命令,例如 cat、echo ,也有各種高級(jí)命令,例如 grep、mount 等。執(zhí)行完 docker pull busybox 之后,Docker 會(huì)自動(dòng)從 Docker 官方下載 busybox 的鏡像文件。
這個(gè)過程中可以執(zhí)行 Ctrl+C,docker pull 不會(huì)因?yàn)?Ctrl+C 打斷,而回轉(zhuǎn)為后臺(tái)執(zhí)行。
4. 運(yùn)行鏡像 docker run輸入 docker run busybox /bin/echo Hello Docker 輸出 Hello Docker
這條命令是運(yùn)行 busybox 鏡像中的 /bin/echo 命令,參數(shù)是 Hello Docker
其他標(biāo)志:
-i 保證容器的stdin開啟 -t 為容器生成一個(gè)tty終端 -d 表示后臺(tái)運(yùn)行 --rm=true 容器終止后刪除 --name name 表示 container 的名稱 -v 將目錄掛載到 container --privileged=true 防止沒有權(quán)限訪問掛載的目錄 -p 9998:80 指定端口映射 --link name:container 與其他 container 鏈接. --icc=true 去除 container 之間不互通. 需要放在 run 前面. 注意,--rm 和 -d 參數(shù)不能同時(shí)使用。5.刪除鏡像 docker rmi
docker rmi/
刪除所有未打 tag 的鏡像
docker rmi $(docker images -q | awk "/^/ { print $3 }")
刪除所有鏡像
docker rmi $(docker images -q)6. 查看本地容器 docker ps
docker ps 查看正在運(yùn)行的容器
輸入 docker ps 輸出 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 91c95931e552 1 days ago 910 B
docker ps -a 查看所有的容器,-q 返回 id
docker ps -a -q
docker ps -n x 該命令會(huì)顯示最后x個(gè)容器,不論這些容器是運(yùn)行還是停止的。
7. 查詢輸出docker logs查詢?nèi)萜鞯妮敵鰞?nèi)容:
例如:通過 docker logs 命令查詢 sample_job 對應(yīng)的容器的輸出內(nèi)容。
sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")
輸入 docker logs $sample_job 輸出 Docker Docker Docker Docker
只要這個(gè)容器運(yùn)行的時(shí)間足夠長,就會(huì)輸出足夠多行的 Docker。
8. 啟動(dòng)容器docker startdocker start9. 停止容器docker stop/
docker stop10. 重啟容器docker restart/
docker restart11.刪除容器 docker rm/
docker rm/
刪除所有 Docker 容器
docker rm $(docker ps -a -q)12.保存容器docker commit
docker commit -m="A new image" --author="Aomine" 614122c0aabb aoct/apache2
將當(dāng)前的 Docker 容器保存為一個(gè)名為 aoct/apache2 的鏡像。-m指定創(chuàng)建鏡像的提交信息,--author指定鏡像作者,接著是容器ID、目標(biāo)鏡像倉庫、鏡像名。
13. 鏡像上傳docker push創(chuàng)建docker hub賬戶,將本地的image push 到hub上,這樣其他人也可以使用了。首先我們先tag 一個(gè)image,然后將其push到我們的repo里。
docker tag id {username}/{images_name}:v1 docker push {username}/{images_name}14. 獲取鏡像歷史docker history
docker history
只能對本地存在的 Docker 鏡像執(zhí)行這個(gè)命令。
15.進(jìn)入容器當(dāng)我們使用 -d參數(shù)運(yùn)行了一個(gè)Container的時(shí)候,有時(shí)候我們需要進(jìn)入這個(gè)容器進(jìn)行一些操作。例如有這樣的一個(gè)情況,我們運(yùn)行了一個(gè)app在一個(gè)容器里,我們想進(jìn)入容器看看,這個(gè)app運(yùn)行的狀態(tài),查看log。那們?nèi)绾芜M(jìn)入呢?其實(shí)有很多種方法,這里介紹兩種。
$ docker run -d --name demo ubuntu /usr/bin/top -b $ docker attach demo
docker exec -i -t webapp /bin/bash
docker attach 和 docker exec區(qū)別
docker attach讓用戶可以進(jìn)入Container查看輸出等等操作,但是并不會(huì)另外啟動(dòng)一個(gè)進(jìn)程! 如果你用CTRL-c來退出,同時(shí)這個(gè)信號(hào)會(huì)kill Container(默認(rèn)情況)
docker exec 會(huì)啟動(dòng)另外一個(gè)進(jìn)程來進(jìn)入Container,這里的操作是在這個(gè)進(jìn)程下的。如果你用CTRL-c來退出,不會(huì)kill 原來的Container
16.鏡像的導(dǎo)入與導(dǎo)出load & save使用 load 從 stdin 導(dǎo)入一個(gè) tar 格式的鏡像或者倉庫,然后用 save 將 tar 鏡像輸出到 stdout。
docker save -o
這兩個(gè)命令常用于多節(jié)點(diǎn)部署。
例如:
命令 # docker save -o a.tar suse 命令 # docker load -i a.tar17.容器導(dǎo)入import
用于導(dǎo)入 URL / 文件,從本地導(dǎo)入需要 - 參數(shù)。docker import [OPTIONS] URL|- [REPOSITORY[:TAG]]、URL/-二選一。
命令# docker import http://mirrors.ustc.edu.cn/openvz/template/precreated/suse-13.1-x86-minimal.tar.gz suse:minimal #這里使用的是ustc鏡像源。 Downloading from http://mirrors.ustc.edu.cn/openvz/template/precreated/suse-13.1-x86-minimal.tar.gz 127a9e7b9f87e4fc280c96bee9fad0a19057de38d307fe7fc1f6d35c86f1aff657.89 MB/57.89 MB 命令# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE suse minimal 127a9e7b9f87 2 minutes ago 149.1 MB
導(dǎo)入本地鏡像:
cat suse-13.1-x86-minimal.tar.gz |docker import - suse:minmal18.容器導(dǎo)出export
和 import 相反,export 將容器導(dǎo)出成 tar 壓縮包。
例如
命令 # docker run -i -t -d suse:minimal /bin/bash 060f6e6c877af01313363b6506107438b9eb5ba87a7ef0625577e348a554ecca
命令 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 060f6e6c877a suse:minimal "/bin/bash" 2 seconds ago Up 2 seconds fervent_ritchie 命令 # docker export -o a.tar 060f 命令 # docker export 060f > a.tar #也可以這樣。
Dockerfile實(shí)際上是由一行行命令組成的,讓用戶可以方便的創(chuàng)建自定義鏡像。
Dockerfile大體由四部分組成:
指明基礎(chǔ)鏡像指令FROM
維護(hù)者信息指令MAINTAINER
鏡像操作指令RUN、EVN、ADD和WORKDIR等
容器啟動(dòng)時(shí)的執(zhí)行指令CMD、ENTRYPOINT和USER等
下邊就是一個(gè)Dockerfile的例子
FROM python:2.7 MAINTAINER yumengzhong <[email protected]> COPY . /app WORKDIR /app RUN pip install -r requirements.txt EXPOSE 5000 ENTRYPOINT ["python"] CMD ["app.py"]
1. 從dockerhub上pull下python 2.7的基礎(chǔ)鏡像。 2. 維護(hù)者的信息 3. copy當(dāng)前目錄到容器中的 /app目錄下 復(fù)制本地主機(jī)的(Dockerfile所在目錄的相對路徑)到容器里 4. 指定工作路徑為/app 5. 安裝依賴 6. 暴露5000端口 7. 啟動(dòng)app
這個(gè)例子是啟動(dòng)一個(gè)python flask app的Dockerfile(flask是python的一個(gè)輕量的web框架)。
下邊我就來介紹下dockerfile里常用的指令。
格式
Dockerfile 中所有的命令都是以下格式:INSTRUCTION argument
指令(INSTRUCTION)不分大小寫,但是推薦大寫。
FROM
用于指定基礎(chǔ)的images
格式為 FROM
所有的 Dockerfile 都用該以 FROM 開頭,FROM 命令指明 Dockerfile 所創(chuàng)建的鏡像文件以什么鏡像為基礎(chǔ),FROM 以后的所有指令都會(huì)在 FROM 的基礎(chǔ)上進(jìn)行創(chuàng)建鏡像;可以在同一個(gè) Dockerfile 中多次使用 FROM 命令用于創(chuàng)建多個(gè)鏡像。
MAINTAINER
格式為 MAINTAINER
MAINTAINER yumengzhong <[email protected]>
RUN
格式為 RUN
用于容器內(nèi)部執(zhí)行命令。每個(gè) RUN 命令相當(dāng)于在原有的鏡像基礎(chǔ)上添加了一個(gè)改動(dòng)層,原有的鏡像不會(huì)有變化。
ADD
格式為 ADD
該命令將復(fù)制指定的
ADD /path/to/sourcefile/in/host /path/to/targetfile/in/container
COPY
格式為 COPY
復(fù)制本地主機(jī)的
當(dāng)使用本地目錄為源目錄時(shí),推薦使用 COPY
CMD
CMD 命令有三種格式:
CMD ["executable","param1","param2"]:推薦使用的 exec 形式。
CMD ["param1","param2"]:無可執(zhí)行程序形式
CMD command param1 param2:shell 形式。
CMD 命令用于啟動(dòng)容器時(shí)默認(rèn)執(zhí)行的命令,CMD 命令可以包含可執(zhí)行文件,也可以不包含可執(zhí)行文件:不包含可執(zhí)行文件的情況下就要用 ENTRYPOINT 指定一個(gè),然后 CMD 命令的參數(shù)就會(huì)作為ENTRYPOINT的參數(shù)。
一個(gè) Dockerfile 中只能有一個(gè)CMD,如果有多個(gè),則最后一個(gè)生效。
CMD 的 shell 形式默認(rèn)調(diào)用 /bin/sh -c 執(zhí)行命令。
CMD 命令會(huì)被 Docker 命令行傳入的參數(shù)覆蓋:docker run busybox /bin/echo Hello Docker 會(huì)把 CMD 里的命令覆蓋。
ENTRYPOINT
ENTRYPOINT 命令也有兩種格式:
ENTRYPOINT ["executable", "param1", "param2"] :推薦使用的 exec 形式
ENTRYPOINT command param1 param2 :shell 形式
ENTRYPOINT 命令的字面意思是進(jìn)入點(diǎn),而功能也恰如其意:他可以讓你的容器表現(xiàn)得像一個(gè)可執(zhí)行程序一樣。
一個(gè) Dockerfile 中只能有一個(gè) ENTRYPOINT,如果有多個(gè),則最后一個(gè)生效。
關(guān)于 CMD 和 ENTRYPOINT 的聯(lián)系請看下面的例子
僅僅使用 ENTRYPOINT:
FROM ubuntu ENTRYPOINT ls -l
docker build -t yumengzhong/lstest .
執(zhí)行 docker run 306cd7e8408b /etc/fstab 和 docker run 306cd7e8408b 結(jié)果并不會(huì)有什么差別:
命令 # docker run 306cd7e8408b /etc/fstab total 64 drwxr-xr-x 2 root root 4096 Mar 20 05:22 bin drwxr-xr-x 2 root root 4096 Apr 10 2014 boot drwxr-xr-x 5 root root 360 Apr 24 02:52 dev drwxr-xr-x 64 root root 4096 Apr 24 02:52 etc drwxr-xr-x 2 root root 4096 Apr 10 2014 home ……
但是我們通常使用 ENTRYPOINT 作為容器的入口,使用 CMD 給 ENTRYPOINT 增加默認(rèn)選項(xiàng):
FROM ubuntu CMD ["-l"] ENTRYPOINT ["ls"]
然后執(zhí)行這個(gè)容器:
不加參數(shù)便會(huì)默認(rèn)有 -l參數(shù):
命令 # docker run 89dc7e6d0ac1 total 64 drwxr-xr-x 2 root root 4096 Mar 20 05:22 bin drwxr-xr-x 2 root root 4096 Apr 10 2014 boot drwxr-xr-x 5 root root 360 Apr 24 02:47 dev drwxr-xr-x 64 root root 4096 Apr 24 02:47 etc drwxr-xr-x 2 root root 4096 Apr 10 2014 home drwxr-xr-x 12 root root 4096 Mar 20 05:21 lib drwxr-xr-x 2 root root 4096 Mar 20 05:20 lib64 drwxr-xr-x 2 root root 4096 Mar 20 05:19 media drwxr-xr-x 2 root root 4096 Apr 10 2014 mnt drwxr-xr-x 2 root root 4096 Mar 20 05:19 opt dr-xr-xr-x 386 root root 0 Apr 24 02:47 proc drwx------ 2 root root 4096 Mar 20 05:22 root drwxr-xr-x 7 root root 4096 Mar 20 05:21 run drwxr-xr-x 2 root root 4096 Apr 21 22:18 sbin drwxr-xr-x 2 root root 4096 Mar 20 05:19 srv dr-xr-xr-x 13 root root 0 Apr 24 02:47 sys drwxrwxrwt 2 root root 4096 Mar 20 05:22 tmp drwxr-xr-x 11 root root 4096 Apr 21 22:18 usr drwxr-xr-x 12 root root 4096 Apr 21 22:18 var
加了 /etc/fstab 參數(shù)便會(huì)覆蓋原有的 -l 參數(shù):
命令 # docker run 89dc7e6d0ac1 /etc/fstab /etc/fstab
EXPOSE
EXPOSE
例如 EXPOSE 80 3306,開放 80 和 3306 端口。
WORKDIR
WORKDIR /path/to/work/dir 配合 RUN,CMD,ENTRYPOINT 命令設(shè)置當(dāng)前工作路徑。
可以設(shè)置多次,如果是相對路徑,則相對前一個(gè) WORKDIR 命令。默認(rèn)路徑為/。
例如:
FROM ubuntu WORKDIR /etc WORKDIR .. WORKDIR usr WORKDIR lib ENTRYPOINT pwd
docker run ID 得到的結(jié)果為:/usr/lib
USER
USER
VLOUME
VOLUME ["/data"] 允許容器訪問容器的目錄、允許容器之間互相訪問目錄。
VOLUME 僅僅是允許將某一個(gè)目錄暴露在外面,更多的操作還需要依賴 Docker 命令實(shí)現(xiàn)。
ENV
參考 export 的用法咧:
ENV LC_ALL en_US.UTF-8
Dockerfile 的寫法已經(jīng)講述完畢,來看示例:
實(shí)例一
mkdir static_web cd static_web touch Dockerfile 然后 vi Dockerfile 開始編輯該文件 輸入 i 開始編輯 FROM nginx MAINTAINER yumengzhong "[email protected]" ENV REFRESHED_AT 2017-03-03 RUN echo "hello, /usr/share/nginx/html/index.html 編輯完后 按 esc 退出編輯 然后 :wq 寫入 退出
補(bǔ)充
:q! 強(qiáng)行退出(不存盤)
:wq 強(qiáng)制性寫入文件并退出。即使文件沒有被修改也強(qiáng)制寫入,并更新文件的修改時(shí)間。
:x 寫入文件并退出。僅當(dāng)文件被修改時(shí)才寫入,并更新文件修改時(shí)間,否則不會(huì)更新文件修改時(shí)間。
用ESC鍵只能切換到命令狀態(tài)
:x 和 :wq 的真正區(qū)別
:wq 強(qiáng)制性寫入文件并退出。即使文件沒有被修改也強(qiáng)制寫入,并更新文件的修改時(shí)間。
:x 寫入文件并退出。僅當(dāng)文件被修改時(shí)才寫入,并更新文件修改時(shí)間,否則不會(huì)更新文件修改時(shí)間。
這兩者一般情況下沒什么不一樣,但是在編程方面,對編輯源文件可能會(huì)產(chǎn)生重要影響。因?yàn)槲募词箾]有修改,:wq 強(qiáng)制更新文件的修改時(shí)間,這樣會(huì)讓 make 編譯整個(gè)項(xiàng)目時(shí)以為文件被修改過了,然后就得重新編譯鏈接生成可執(zhí)行文件。這可能會(huì)產(chǎn)生讓人誤解的后果,當(dāng)然也產(chǎn)生了不必要的系統(tǒng)資源花銷。
docker build -t yumengzhong/nginx_web:v1 .
-t是為新鏡像設(shè)置倉庫和名稱,其中yumengzhong為倉庫名,nginx_web為鏡像名,:v1為標(biāo)簽(不添加為默認(rèn)latest)
docker run --name nginx_web -d -p 82:80 yumengzhong/nginx_web:v1
游覽器 192.168.99.100:82或localhost:82
實(shí)例二
#Dockerfile FROM centos6-base #指定centos6系統(tǒng) MAINTAINER zhou_mfk11.升級(jí)Docker#我抄的他的 Dockerfile RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key #創(chuàng)建私鑰 RUN sed "s@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g" -i /etc/pam.d/sshd #修復(fù)SSH登錄,否則登陸后的用戶會(huì)被秒退。 RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh #創(chuàng)建root用戶的ssh文件夾 EXPOSE 22 #開放端口 RUN echo "root:redhat" | chpasswd #root用戶改密碼為redhat RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 RUN yum install tar gzip gcc vim wget screen -y #安裝epel和安裝一些軟件 ENV LANG en_US.UTF-8 ENV LC_ALL en_US.UTF-8 #系統(tǒng)環(huán)境變量 CMD ["/usr/sbin/sshd", "-D"] #啟動(dòng)sshd #End
如果想升級(jí)到最新版的Docker,就用 apt-get:
$ apt-get upgrade docker-engine12.卸載Docker
$ apt-get purge docker-engine $ apt-get autoremove # 自動(dòng)刪除依賴 $ rm -rf /var/lib/docker參考&引用
1.Docker學(xué)習(xí)與和應(yīng)用系列
2.Flux7 Docker 系列教程
3.Docker 實(shí)踐系列
4.我的Docker筆記(補(bǔ)全ing)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26796.html
摘要:本文從定義,作用,技術(shù)架構(gòu),安裝和使用等全方位帶你看懂。最后,于開發(fā)者而言提供了一種開發(fā)環(huán)境的管理辦法,與測試人員而言保證了環(huán)境的同步,于運(yùn)維人員提供了可移植的標(biāo)準(zhǔn)化部署流程。顯示上圖內(nèi)容就表明安裝完成。 作者丨唐文廣:騰訊工程師,負(fù)責(zé)無線研發(fā)部地圖測試。 導(dǎo)語:Docker,近兩年才流行起來的超輕量級(jí)虛擬機(jī),它可以讓你輕松完成持續(xù)集成、自動(dòng)交付、自動(dòng)部署,并且實(shí)現(xiàn)開發(fā)環(huán)境、測試環(huán)...
摘要:的核心是以容器為中心的管理環(huán)境。命名空間提供了名稱范圍。換句話說,確保或同類組始終可用。用于管理有狀態(tài)應(yīng)用程序,它管理一組的部署和擴(kuò)展,并提供有關(guān)這些的排序和唯一性的保證。 條分縷析帶你充分理解Kubernetes的各個(gè)細(xì)節(jié)與部分:它是什么,它如何解決容器編排問題,它包含哪些你必須掌握的關(guān)鍵對象,以及如何快速上手部署使用Kubernetes。 showImg(https://segme...
摘要:導(dǎo)讀本文由及聯(lián)合創(chuàng)始人梁勝博士寫于前往參加之前。從各家容器編排方案均很不成熟的初期,到三足鼎立的編排之戰(zhàn),到如今似已全面勝利,作為整個(gè)發(fā)展歷程的參與者與見證者,回顧這幾年容器領(lǐng)域發(fā)展和的發(fā)展與選擇,梁勝博士分享了他的一些看法。 導(dǎo)讀 本文由Rancher Labs CEO及聯(lián)合創(chuàng)始人梁勝博士寫于前往參加DockerCon之前。從各家容器編排方案均很不成熟的初期,到三足鼎立的編排之戰(zhàn),到...
閱讀 3205·2021-09-06 15:02
閱讀 2250·2019-08-30 15:48
閱讀 3448·2019-08-29 11:08
閱讀 3291·2019-08-26 13:55
閱讀 2453·2019-08-26 13:35
閱讀 3168·2019-08-26 12:11
閱讀 2607·2019-08-26 11:48
閱讀 891·2019-08-26 11:42