系列文章:html
PS: 如下是我的做爲新手小白學習docker的筆記總結linux
百科上的解釋是這樣的:git
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。docker
知乎上的不少理解是將其理解成集裝箱,彼此之間互相不影響,各自運行在各自的環境中。能夠看這裏的解釋:https://www.zhihu.com/question/28300645shell
win10 環境(其餘環境自行搜索安裝):數據庫
在電腦上打開「控制面板」->「程序」-> 「啓動或關閉Windows功能」, 勾選Hyper-V選項:ubuntu
而後重啓電腦vim
咱們下載穩定版,安裝文件保存位置能夠根據本身喜愛選擇windows
下載完成後的安裝文件:centos
雙擊安裝文件安裝,彈出:
勾選接受協議點擊 install ,接下來會自動進行安裝,安裝完成後:
完成後桌面會出現 Docker 圖標 ,而且 Docker 會自動啓動
如今 Docker 就已經安裝好了。
參考電腦型號搜索 cpu 開啓虛擬化,下面是常見開啓方法,僅供參考:
https://jingyan.baidu.com/article/91f5db1b3002831c7f05e3b0.html
https://jingyan.baidu.com/article/335530daa55d7e19cb41c3c2.html
使用docker run
在容器內運行 Hello world
在最開始時,因爲本地不存在ubuntu:15.10
的鏡像,Docker就會從鏡像倉庫 Docker Hub 下載這個鏡像,這裏暫時不須要管,下載完成後,就會自動執行這個echo命令。
ubuntu:15.10:指定要運行的鏡像
/bin/echo "Hello world":在啓動的容器裏執行的命令
PS: 在windows上的git Bash中,會出現以下錯誤:
$ docker run ubuntu:15.10 /bin/echo "Hello world" C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"D:/develop/Git/usr/bin/echo\": stat D:/develop/Git/usr/bin/echo: no such file or directory": unknown. // 本身意會 `git Bash`並非一個終端設備,只是一個解釋Shell命令的軟件 換成windows自帶的CMD,或者PowerShell運行命令便可 參看:https://www.zhihu.com/question/21711307
經過如下命令在容器內打開一個僞終端,而後運行命令
docker run -i -t ubuntu:15.10 /bin/bash
-t:在新容器內指定一個僞終端或終端。
-i:容許你對容器內的標準輸入 (STDIN) 進行交互。
使用exit
或者ctrl + d
來退出容器
使用docker run -d
的方式來在後臺運行容器
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 339394e15bd25bcd3791ba1ae6d3f107fa49584acc55081a45e70d9719448c8e
339394e15bd25bcd3791ba1ae6d3f107fa49584acc55081a45e70d9719448c8e
這個長字符串叫作容器ID,對每一個容器來講都是惟一的,咱們能夠經過容器ID來查看對應的容器發生了什麼。
首先,咱們須要確認容器有在運行,能夠經過 docker ps 來查看
docker ps
使用docker logs <container id>
來查看容器內的日誌
docker logs 339394e15bd2 // or docker logs amazing_cori
使用docker stop <container id>
來查看容器內的日誌
docker stop 339394e15bd2 // or docker stop amazing_cori
當本地機器上使用一個不存在的鏡像時,Docker就會下載這個鏡像,例如:
咱們也可使用docker pull
命令下載
docker pull ubuntu:15.10
使用docker search xxx
從Docker Hub
中發佈的鏡像,地址是:Docker Hub,例如咱們搜索ubuntu
的鏡像爲:
其中OFFICIAL
表明的是不是官方發佈
當咱們從docker
中下載的鏡像不能知足咱們的要求的時候,咱們能夠對這個鏡像進行更改或者建立一個新的鏡像。
拉取learn/tutorial
鏡像,在此鏡像上安裝ping
命令,以後使用commit
進行提交
docker commit <image id> <new image name>
使用docker images
查看更改以後的鏡像
1.中止全部的container,這樣纔可以刪除其中的images:
docker stop $(docker ps -a -q)
若是想要刪除全部container的話再加一個指令:
docker rm $(docker ps -a -q)
2.查看當前有些什麼images
docker images
3.刪除images,經過image的id來指定刪除誰
docker rmi <image id>
想要刪除untagged images,也就是那些id爲
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要刪除所有image的話
docker rmi $(docker images -q)
> cd docker > touch Dockerfile > vim Dockerfile
關於Dockerfile
裏面的各個指令,解釋以下:
在Dockerfile中用到的命令有 FROM FROM指定一個基礎鏡像, 通常狀況下一個可用的 Dockerfile必定是 FROM 爲第一個指令。至於image則能夠是任何合理存在的image鏡像。 FROM 必定是首個非註釋指令 Dockerfile. FROM 能夠在一個 Dockerfile 中出現屢次,以便於建立混合的images。 若是沒有指定 tag ,latest 將會被指定爲要使用的基礎鏡像版本。 MAINTAINER 這裏是用於指定鏡像製做者的信息 RUN RUN命令將在當前image中執行任意合法命令並提交執行結果。命令執行提交後,就會自動執行Dockerfile中的下一個指令。 層級 RUN 指令和生成提交是符合Docker核心理念的作法。它容許像版本控制那樣,在任意一個點,對image 鏡像進行定製化構建。 RUN 指令緩存不會在下個命令執行時自動失效。好比 RUN apt-get dist-upgrade -y 的緩存就可能被用於下一個指令. --no-cache 標誌能夠被用於強制取消緩存使用。 ENV ENV指令能夠用於爲docker容器設置環境變量 ENV設置的環境變量,可使用 docker inspect命令來查看。同時還可使用docker run --env <key>=<value>來修改環境變量。 USER USER 用來切換運行屬主身份的。Docker 默認是使用 root,但若不須要,建議切換使用者身分,畢竟 root 權限太大了,使用上有安全的風險。 WORKDIR WORKDIR 用來切換工做目錄的。Docker 默認的工做目錄是/,只有 RUN 能執行 cd 命令切換目錄,並且還只做用在當下下的 RUN,也就是說每個 RUN 都是獨立進行的。若是想讓其餘指令在指定的目錄下執行,就得靠 WORKDIR。WORKDIR 動做的目錄改變是持久的,不用每一個指令前都使用一次 WORKDIR。 COPY COPY 將文件從路徑 <src> 複製添加到容器內部路徑 <dest>。 <src> 必須是想對於源文件夾的一個文件或目錄,也能夠是一個遠程的url,<dest> 是目標容器中的絕對路徑。 全部的新文件和文件夾都會建立UID 和 GID 。事實上若是 <src> 是一個遠程文件URL,那麼目標文件的權限將會是600。 ADD ADD 將文件從路徑 <src> 複製添加到容器內部路徑 <dest>。 <src> 必須是想對於源文件夾的一個文件或目錄,也能夠是一個遠程的url。<dest> 是目標容器中的絕對路徑。 全部的新文件和文件夾都會建立UID 和 GID。事實上若是 <src> 是一個遠程文件URL,那麼目標文件的權限將會是600。 VOLUME 建立一個能夠從本地主機或其餘容器掛載的掛載點,通常用來存放數據庫和須要保持的數據等。 EXPOSE EXPOSE 指令指定在docker容許時指定的端口進行轉發。 CMD Dockerfile.中只能有一個CMD指令。 若是你指定了多個,那麼最後個CMD指令是生效的。 CMD指令的主要做用是提供默認的執行容器。這些默認值能夠包括可執行文件,也能夠省略可執行文件。 當你使用shell或exec格式時, CMD 會自動執行這個命令。 ONBUILD ONBUILD 的做用就是讓指令延遲執行,延遲到下一個使用 FROM 的 Dockerfile 在創建 image 時執行,只限延遲一次。 ONBUILD 的使用情景是在創建鏡像時取得最新的源碼 (搭配 RUN) 與限定系統框架。 ARG ARG是Docker1.9 版本才新加入的指令。 ARG 定義的變量只在創建 image 時有效,創建完成後變量就失效消失 LABEL 定義一個 image 標籤 Owner,並賦值,其值爲變量 Name 的值。(LABEL Owner=$Name ) ENTRYPOINT 是指定 Docker image 運行成 instance (也就是 Docker container) 時,要執行的命令或者文件。
更加詳細的解釋請參看這裏:http://www.docker.org.cn/dockerppt/114.html
Dockerfile裏面的內容:
FROM docker.io/centos MAINTAINER The CentOS Test Images - test RUN mkdir -p /usr/app RUN ls RUN pwd ENV JAVA_HOME /usr/app/jdk ENV PATH $JAVA_HOME/bin:$PATH
在這裏只是拉取了一個centos
鏡像,而後添加了JAVA的環境變量,這裏僅僅做爲測試
使用docker build
來生成鏡像,關於這個命令的詳細用法,可使用docker build --help
> cd docker > docker build -t centos:test -f ./Dockerfile .
過程以下:
建立以後的鏡像:
查看Path: