1. 程式人生 > 其它 >docker篇之docker命令

docker篇之docker命令

一、docker基礎命令

1、其他指令
docker啟/停/重啟/檢視狀態
sudo systemctl start/stop/restart/status

檢視當前安裝的docker有關資訊
docker info

2、映象相關指令
檢視已有映象
docker images

在docker官網搜尋指定映象
docker search 映象

下載映象(不加標籤預設下載最新版本的映象)
docker pull 映象名字:tag(即標籤)

儲存已有映象
docker save -o name.tar 映象name:tag

載入映象
docker load -i name.tar

映象的刪除(刪除映象前請刪除所有與該映象有關的容器)
docker rmi 映象ID(或name:tag)

修改映象name和tag
docker tag 映象name 新映象name:新tag

3、容器相關指令
啟動容器(-d:後臺執行;--name:指定容器名字;-p:對映容器埠到本機埠;-v:容器目錄檔案掛載至本機目錄)
docker run -d --name 自定義容器name -p 本機埠:容器埠 -v 本機目錄:容器目錄 映象ID(或name:tag)

進入正在執行的容器內部(-i:以互動模式執行容器;-t:為容器重新分配一個偽輸入終端.通常it一起使用)
docker exec -it 容器name(或ID) /bin/bash

容器的啟/停/重啟/刪除
docker start/stop/restart/rm 容器name(或ID)

檢視容器埠對映
docker port 容器name(或ID)

檢視容器資訊
docker inspect 容器name(或ID)

檢視正在執行的容器
docker ps

檢視所有容器(包括正在執行的、停止的,不包括刪除的)
docker ps -a

檢視容器內的程序
docker top 容器name(或ID)

監控並顯示最新100行的容器日誌(可以直接使用docker logs容器name(或ID),但是日誌容量大的最好加上條件)
docker logs -f --tail=100 容器name(或ID)

二、Dockerfile常用命令
FROM
指定基礎映象,Dockerfiel的第一條命令

格式:
  FROM <images>
  FROM <images>:<tag>

若使用第一種格式,則基礎映象的tag為latest

MAINTAINER
映象維護者資訊

格式:
MAINTAINER <name>

RUN
構建映象時在映象中執行的shell命令

格式:
RUN <command>
RUN ["executable", "param1", "param2"]

第一種格式(shell形式)預設使用/bin/sh -c 執行命令,推薦使用第一種格式
第二種格式(exec形式)使用exec執行命令

若想使用其他shell型別執行命令,請使用第二種格式即 RUN ["/bin/bash","-c","command"]

多條RUN命令可以合併,如:
RUN command1 \
&& command2 \
&& command3

ENV
設定映象的環境變數

格式:
ENV <key> <value>
ENV <key>=<value> ...

第一種格式一次只能設定一個環境變數
第二種可以設定多個環境變數,若需換行使用反斜槓(\)

EXPOSE
設定啟動映象時要暴露的埠,用於與外界互動

格式:
EXPOSE <port> [<port1>...]


VOLUME
申明容器掛載點

格式:
VOLUME ["/path1/to/dir1","/path2/to/dir2"]

USER
指定啟動映象時執行使用者

格式:
  USER <user>[:<usergroup>]
  USER <uid>[:<gid>]

使用使用者之前請確保映象中有該使用者,建立使用者可以 RUN groupadd -r 使用者 && useradd -u uid -r -g 使用者組 使用者
使用USER指定使用者後,通過docker run執行容器時,可以通過-u引數來覆蓋所指定的使用者

WORKDIR 
設定進入容器的預設目錄

格式:
WORKDIR </path/to/workdir>

ADD 
拷貝本地檔案或目錄到映象中

格式:
ADD <src> <dest>
  ADD ["<src>", "<dest>"] 用於支援包含空格的路徑

src是Dockerfile檔案所在的同一級目錄或者同級目錄的子目錄路徑
tar型別的檔案會自動解壓到dest目錄下

注意:
1.src是個檔案,且dest以 / 結尾, 則docker會把dest當作目錄,會把src檔案拷貝到dest目錄下。
如果dest不存在,則會自動建立
2.src是個檔案,且dest不以 / 結尾,則docker會把dest當作檔案,會把dest檔案替換為src檔案。
如果dest不存在,則建立名為src的檔案
3.src是個目錄,且dest不存在,則docker會自動以dest建立一個目錄,把src目錄下的檔案拷貝進來。
如果dest是個已經存在的目錄,則docker會把src目錄下的檔案拷貝到dest下

COPY
拷貝本地檔案或目錄到映象中

格式:
  COPY <src> <dest>

與ADD功能相似,但是不能解壓tar型別的檔案

CMD
啟動容器時執行的shell命令

格式:
CMD ["executable","param1","param2"] (exec形式執行可執行檔案,優先)
CMD command param1 param2 (shell形式執行命令)

Dockerfile中只能有一條CMD命令,如果指定多條,只有最後一條生效,推薦使用第一種格式
第二種格式預設使用/bin/sh -c 執行命令
若要改變shell型別,請使用第一種格式即 CMD ["/bin/bash","-c","command","param1","param2"]
CMD會被docker run命令列指定的引數所覆蓋 


ENTRYPOINT 
啟動容器時執行的shell命令

格式:
ENTRYPOINT ["executable","param1","param2"] (exec形式執行可執行檔案,優先)
ENTRYPOINT command param1 param2 (shell形式執行命令)

第二種格式預設使用/bin/sh -c 執行命令
Dockerfile檔案中也可以存在多個ENTRYPOINT指令,但僅有最後一個會生效
同CMD類似,但是不會被docker run命令列指定的引數所覆蓋,可以被docker run --entrypoint 覆蓋
若Dockerfile中既有CMD(通常位置會在ENTRYPOINT之後)又有ENTRYPOINT,則CMD會被當做引數傳遞給ENTRYPOINT

 
ARG
構建映象時,指定變數 

格式:
  ARG <name>
  ARG <name>=<default value>

第一種格式:變數值可以在docker build --build-arg name=value時指定 

二、製作映象

1 製作映象的基礎命令:
  Dockerfile在當前目錄下:
  docker build -t 映象名:tag .

  Dockerfile不在當前目錄下(-f 指定Dockerfile檔案路徑,xxx/為構建docker映象時的上下文路徑,即該目錄下的檔案可以在Dockerfile中COPY/ADD):
  docker build -t 映象名:tag -f xx/Dockerfile xxx/


2 基於centos:7的tomcat8.5.53映象製作

Dockerfile檔案內容

#指定基礎映象
FROM centos:7

#指定執行的使用者
USER root

#拷貝包到映象指定目錄
ADD jdk-8u241-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.53.tar.gz /app

#設定工作目錄
WORKDIR /app/apache-tomcat-8.5.53

#設定環境變數
ENV JAVA_HOME=/usr/local/jdk1.8.0_241 \
JRE_HOME=/usr/local/jdk1.8.0_241/jre \
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
ENV PATH=${JAVA_HOME}/bin:${PATH}

#申明掛載點
VOLUME ["/app/apache-tomcat-8.5.53/log","/app/apache-tomcat-8.5.53/conf","/app/apache-tomcat-8.5.53/webapps"]

#暴露容器埠
EXPOSE 8080

#進入容器時啟動tomcat
ENTRYPOINT ["bin/catalina.sh","run"]