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