镜像(Image)
容器(Container)
仓库(Repository)
Docker的启动过程
镜像构建:
容器启动:
镜像:
镜像仓库
官方镜像仓库:

Dockerfile关键字:
FROM:基于哪个镜像;
MAINTAINER:镜像创建者;
ADD:将文件拷贝到container的文件系统对应的路径;
EXPOSE:container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射;
CMD:容器启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD。CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令;
ENTRYPOINT:container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条。ENTRYPOINT没有CMD的可替换特性;
ENV:用来设置环境变量;
VOLUME:可以将本地文件夹或者container的文件挂载到container中;
RUN:安装软件用;
WORKDIR:切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效;
ONBUILD:ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行;
例子
docker images

第一步:将Java代码打包成jar包(这里的jar包是XNExporter.jar)
vim dockerfile

FROM:这个镜像是基于哪个镜像做的。这里是基于java.latest;
MAINTAINER:发布者,这里是xiangni;
ADD:将文件拷贝到container的文件系统对应的路径。这里是将jar包拷贝到容器的文件系统里;
EXPOSE:暴露的端口。这里暴露的端口是8989;
CMD:容器启动时执行的命令,这里是运行jar包。
第三步:生成镜像
docker build ~/Desktop/XNExporter/target

然后验证一下:
docker images

这时,这个镜像的repository和TAG已经有了名字。
第四步:运行生成的本地镜像

第五步:上传到Docker Hub
1. 登录
docker login

同时,在Docker Hub上新建一个仓库,我这里的新建的仓库名为repository。注意,如果之前设置的镜像的repository(这里是xiangni/xnexporter)和Docker Hub(xiangniangel/repository)上的不一致是传不上去的:

2.改一下tag:
docker tag 3540a7fd59c3 xiangniangel/repository:latest
3.push
docker push xiangniangel/repository:latest











