初識docker命令及Dockerfile書寫
查詢全部命令
查詢全部命令
docker
結果如圖:
##檢視docker命令用法
docker command --help
執行docker run
這個命令比較重要,也比較複雜,放在第一個講.
建立一個新的容器並執行一個命令
語法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
簡單例子,使用docker映象nginx:latest以後臺模式啟動一個容器,並將容器命名為mynginx(預設隨機建立容器name)。
docker run -d -P --name mynginx -d nginx:latest
解釋
- -d: 後臺執行容器,並返回容器ID;
- -P :是容器內部埠隨機對映到主機的高階口。
- -p : 是容器內部埠繫結到指定的主機埠。
- -i: 以互動模式執行容器,通常與 -t 同時使用;即
-it
:容器的 Shell 對映到當前的 Shell,然後你在本機視窗輸入的命令,就會傳入容器。 - -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;即
-it
:容器的 Shell 對映到當前的 Shell,然後你在本機視窗輸入的命令,就會傳入容器。
例如:使用docker映象nginx:latest以後臺模式啟動一個容器,容器命名為mynginx,指定容器埠5000對映到8080,容器內執行/bin/bash命令,容器的 Shell 對映到當前的 Shell,然後你在本機視窗輸入的命令,就會傳入容器。
docker run -d -p 8080:5000 -it --name mynginx -d nginx:latest /bin/bash
參考run語法docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
,只有docker run 和執行的Image映象是必需引數
,其它可選
檢視正在執行的容器docker ps
docker ps
顯示最後一次建立的container,包括未執行的
docker ps -l
顯示所有的container,包括未執行的
docker ps -a
檢視埠對映情況docker port
docker port 容器ID或容器name
檢視WEB應用程式日誌docker logs
docker logs [容器ID或容器name]
檢視容器內執行的程序docker top
docker top [容器ID或容器name]
檢視docker容器底層資訊 docker inspect
docker inspect [容器ID或容器name]
停止docker執行docker stop/docker kill
docker stop [容器ID或容器name]
或
docker kill[容器ID或容器name]
docker kill
命令:終止容器執行,相當於向容器裡面的主程序發出 SIGKILL 訊號。
docker stop
命令:也是用來終止容器執行,相當於向容器裡面的主程序發出 SIGTERM 訊號,然後過一段時間再發出 SIGKILL 訊號。
區別是:應用程式收到 SIGTERM 訊號以後,可以自行進行收尾清理工作,但也可以不理會這個訊號。如果收到 SIGKILL 訊號,就會強行立即終止,那些正在進行中的操作會全部丟失。
##重啟停止的容器或正在執行的容器docker start
重啟一個或多個已經停止的容器
docker start [容器name]
重啟一個或多個正在執行的容器
docker restart [容器name]
刪除容器docker rm
image 檔案生成的容器例項,本身也是一個檔案,稱為容器檔案。也就是說,一旦容器生成,就會同時存在兩個檔案: image 檔案和容器檔案。而且關閉容器並不會刪除容器檔案,只是容器停止執行而已。
docker rm 容器ID或容器name
搜尋docker search
docker search 映象名
或者訪問官方映象地址,瀏覽映象選擇您需要的映象檔案,然後使用命令docker pull 映象名
下載映象。
##列出映象列表docker images
docker images
列說明:
REPOSITORY:表示映象的倉庫源
TAG:映象的標籤,TAG,代表這個倉庫源的不同個版本,最新的TAG叫做latest
IMAGE ID:映象ID
CREATED:映象建立時間
SIZE:映象大小
拉取映象docker pull
docker pull 映象的倉庫源/映象的標籤
pull後面的值由上面的映象的倉庫源和映象的標籤拼接得來
,如果不加映象的標籤則預設是latest
docker container start 與docker start區別
由圖中可知,docker container start與docker start
是一樣的意思,docker container是對容器的操作,container可以省略變成docker start
Dockerfile檔案
注意點:
- 檔案沒有後綴,名字就是Dockerfile
- 命令約定全部使用大寫,如
RUN,ADD,FROM
- 第一條命令必需是FROM,作用是指定在哪個基礎映象上建立映象。
- 註釋以
“#”
形狀
下面是常用命令:
##FROM
語法
FROM 映象名
最簡單的命令,指定在哪個基礎映象上建立映象
FROM livingobjects/jre8
在jre8映象基礎上建立自己映象。
RUN
它接受命令作為引數並用於建立映象,RUN命令用於建立映象。
在映象構建的過程中執行
。
CMD
語法
CMD ["executable", "param1", "param2"?]
1.在映象構建容器後執行
2.只能存在一條CMD命令
例如CMD exec java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
##ENTRYPOINT
語法
ENTRYPOINT ["executable", "param1", "param2"?]
這個命令和CMD功能一樣。
區別在於ENTRYPOINT後面攜帶的引數不會被docker run 提供的引數覆蓋,而CMD會被覆蓋。
例如ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
##ADD
語法
ADD [source directory or URL] [destination directory]
它的基本作用是從源系統的檔案系統上覆制檔案到目標容器的檔案系統。
- 如果源是一個URL,那該URL的內容將被下載並複製到容器中。
- 如果如果檔案是可識別的壓縮格式,則docker會幫忙解壓縮
- 如果要ADD本地檔案,則本地檔案必須在
docker build <PATH>
,指定的path
目錄下 - ADD只有在build映象的時候執行一次,後面執行container的時候不會再重新載入了
EXPOSE
語法
EXPOSE [port]
暴露容器內部埠的
例如EXPOSE 5000
暴露的是容器內部埠,不是主機埠,如果外部想使用這個埠需要在執行時對映,如下:
docker run -d -p 127.0.0.1:8080:5000 hello-world
MAINTAINER
語法
MAINTAINER 作者名
申明作者,輔助使用,放豐FROM命令後面
##WORKDIR
語法
WORKDIR /path
指定容器工作目錄
##VOLUME
語法
VOLUME ["/dir_1", "/dir_2" ..]
可以將本地資料夾或者其他container的資料夾掛載到container中,容器即可以訪問該目錄
ENV
語法
ENV key value
設定變數,可能在容器和腳本里直接使用