1、 創建鏡像(使用Dockerfile文件生成鏡像)
$ docker build -t registrcsphere/centos:7.1 ./path
OPTIONS說明:
-
- -t 鏡像名字
- ./path: Dockerfile 文件所在的目錄
2、搜索鏡像
$ docker search [OPTIONS] TERM
OPTIONS說明:
-
- --automated : 只列出 automated build類型的鏡像;
- --no-trunc : 顯示完整的鏡像描述;
- -s : 列出收藏數不小於指定值的鏡像。
例: docker search -s 20 tomcat
STARTS:鏡像倉庫收藏數
AUTOMATED:表示是否是自動構建的鏡像倉庫
3、下載鏡像
$ docker pull [OPTIONS] NAME[:TAG]
OPTIONS說明:
-
- -a :拉取所有 tagged 鏡像
- --disable-content-trust :忽略鏡像的校驗,默認開啟
#從Docker Hub中下載最新版本的Java鏡像 docker pull reg.itmuch.com/java:8 #從指定Registry中下載標簽為8的Java鏡像
$ docker pull java
4、查看鏡像
$ docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS說明:
-
- -a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
- --digests :顯示鏡像的摘要信息
- -f :顯示滿足條件的鏡像;
- --format :指定返回值的模板文件;
- --no-trunc :顯示完整的鏡像信息;
- -q :只顯示鏡像ID。
# 列出本地鏡像中REPOSITORY為ubuntu的鏡像列表$ docker images ubuntu
5、刪除本地鏡像
$ docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS說明:
-
- -f :強制刪除;
- --no-prune :不移除該鏡像的過程鏡像,默認移除;
# 刪除鏡像$ docker rmi hello-world# 強制刪除鏡像$ docker rmi –f hello-world
6、鏡像tag
$ docker tag 鏡像名稱 ip:port/目錄$ docker tag csphere/csphere:0.11.2 10.225.43.181:5000/csphere/csphere:0.11.2
7、.Dockerfile講解
# 指定基礎鏡像FROM Registry:8500/devops/openjdk:1.8# 維護者信息LABEL maintainer="example@163.com"# 定義未來Jar所存放目錄ENV INSTALL_DIR=/root# 定義Jar的全名.后綴ENV APP_PACKAGE=mdc-service-APP_VERSION.jar# 定義應用啟動的最小 最大堆內存ENV JAVA_OPTS=-Xmx512m# SERVICE_PORT替換為實際的${SERVICE_PORT}服務端口sh "sed -i 's/SERVICE_PORT/${SERVICE_PORT}/g' kubernetes.yaml"# 定義容器所暴露的端口EXPOSE 80# 將項目build的jar包復制至INSTALL_DIR目錄下COPY mdc-service/target/${APP_PACKAGE} ${INSTALL_DIR}/AND mdc-service/target/${APP_PACKAGE} ${INSTALL_DIR}/# 構建鏡像時執行更新apt源命令RUN apt-get update# cd /opt/webapp 目錄WORKDIR /opt/webapp# 構建容器后調用,也就是在容器啟動時才進行調用CMD java -jar -DJAVA_OPTS=${JAVA_OPTS} ${INSTALL_DIR}/${APP_PACKAGE} --spring.profiles.active=SPRING_PROFILES_ACTIVE --port=80CMD ["python", "app.py"]# 一個Dockerfile中只有最后一條ENTRYPOINT生效,並且每次啟動docker容器,都會執行ENTRYPOINT
# CMD 與ENTRYPOINT的區別
CMD: 命令會被覆蓋掉
ENTRYPOINT:命令不會被覆蓋掉,需要通過 -ENTRYPOINT=params覆蓋
命令說明:
Dockerfile有十幾條命令可用於構建鏡像,下文將簡略介紹這些命令。
1)FROM
FROM命令可能是最重要的Dockerfile命令。改命令定義了使用哪個基礎鏡像啟動構建流程。基礎鏡像可以為任意鏡 像。如果基礎鏡像沒有被發現,Docker將試圖從Docker image index來查找該鏡像。FROM命令必須是Dockerfile的首個命令。
- # Usage: FROM [image name]
- FROM ubuntu
2)MAINTAINER
我建議這個命令放在Dockerfile的起始部分,雖然理論上它可以放置於Dockerfile的任意位置。這個命令用於聲明作者,並應該放在FROM的后面。
- # Usage: MAINTAINER [name]
- MAINTAINER authors_name
3)ADD
ADD命令有兩個參數,源和目標。它的基本作用是從源系統的文件系統上復制文件到目標容器的文件系統。如果源是一個URL,那該URL的內容將被下載並復制到容器中。
- # Usage: ADD [source directory or URL] [destination directory]
- ADD /my_app_folder /my_app_folder
4)ENV
ENV命令用於設置環境變量。這些變量以”key=value”的形式存在,並可以在容器內被腳本或者程序調用。這個機制給在容器中運行應用帶來了極大的便利。
- # Usage: ENV key value
- ENV SERVER_WORKS 4
5)EXPOSE
EXPOSE用來指定端口,使容器內的應用可以通過端口和外界交互。
- # Usage: EXPOSE [port]
- EXPOSE 8080
6)RUN
RUN命令是Dockerfile執行命令的核心部分。它接受命令作為參數並用於創建鏡像。不像CMD命令,RUN命令用於創建鏡像(在之前commit的層之上形成新的層)。
- # Usage: RUN [command]
- RUN aptitude install -y riak
7)USER
USER命令用於設置運行容器的UID。
- # Usage: USER [UID]
- USER 751
8)VOLUME
VOLUME命令用於讓你的容器訪問宿主機上的目錄。
- # Usage: VOLUME ["/dir_1", "/dir_2" ..]
- VOLUME ["/my_files"]
9)WORKDIR
WORKDIR命令用於設置CMD指明的命令的運行目錄。
- # Usage: WORKDIR /path
- WORKDIR ~/
10)CMD
和RUN命令相似,CMD可以用於執行特定的命令。和RUN不同的是,這些命令不是在鏡像構建的過程中執行的,而是在用鏡像構建容器后被調用。
- # Usage 1: CMD application "argument", "argument", ..
- CMD "echo" "Hello docker!"
11)ENTRYPOINT
配置容器啟動后執行的命令,並且不可被 docker run 提供的參數覆蓋。
每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最后一個起效。
ENTRYPOINT 幫助你配置一個容器使之可執行化,如果你結合CMD命令和ENTRYPOINT命令,你可以從CMD命令中移除“application”而僅僅保留參數,參數將傳遞給ENTRYPOINT命令。
- # Usage: ENTRYPOINT application "argument", "argument", ..
- # Remember: arguments are optional. They can be provided by CMD
- # or during the creation of a container.
- ENTRYPOINT echo
- # Usage example with CMD:
- # Arguments set with CMD can be overridden during *run*
- CMD "Hello docker!"
- ENTRYPOINT echo