1、docker build
命令构建镜像的格式:
docker build [选项] <上下文路径/URL/->
指定了构建上下文的路径。docker build
命令会将上下文目录下的内容打包交给 Docker 引擎以帮助构建镜像。docker build命令可以使用-f 参数来指定dockerfile,默认是 ‘PATH/Dockerfile’ (PATH是构建上下文)
在dockerfile中的copy指令,例如:
COPY ./package.json /app/
指的是复制 上下文(context) 目录下的 package.json
到镜像的app目录下。
2、CMD 和 ENTRYPOINT 命令
CMD是容器启动以后,默认执行的命令。ENTRYPOINT是容器启动以后要执行命令。如果docker run指定执行命令(docker run跟在镜像名后面的是 command
,运行时会替换 CMD
的默认值。)或者dockerfile里面中有entrypoint命令(当存在 ENTRYPOINT
后,CMD
的内容将会作为参数传给 ENTRYPOINT
),CMD指令会被覆盖。
3、RUN
指令是用来执行命令行命令的。Dockerfile 中每一个指令都会建立一层,RUN
也不例外。每一个 RUN
的行为都会新建立一层,在其上执行这些命令,执行结束后,commit
这一层的修改,构成新的镜像。
镜像是多层存储,每一层的东西并不会在下一层被删除,会一直跟随着镜像。因此镜像构建时,一定要确保每一层只添加真正需要添加的东西,任何无关的东西都应该清理掉。
4、docker exec :在运行的容器中执行命令或者进入容器。
在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
http://www.runoob.com/
docker exec -it helk-elasticsearch /bin/bash 表示在容器 helk-elasticsearch中开启一个交互模式的终端(进入容器)。
5、VOLUME
定义匿名卷, 并且我们以这个镜像run了一个容器的时候,docker会在安装目录下的指定目录下面生成一个目录来绑定容器的匿名卷。可以在dockers run时候使用 -v将当前主机的某个目录绑定匿名卷, 来作为挂载点。例如:
docker run -itd -name redis1 -v /data:/share/data image-redis //运行一个容器并且将当前机器的/data目录绑定到容器的匿名卷中
容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile
中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
dockerfile中有VOLUME
指令,但是它只能定义目标
,不能定义源
主机目录在容器运行时声明:主机目录(挂载点)从本质上说是依赖于主机的。 这是为了保留image的可移植性,因为不能保证给定的主机目录在所有主机上都可用。 因此,您无法从Dockerfile中挂载主机目录。 VOLUME指令不支持指定host-dir参数。 创建或运行容器时,必须指定挂载点。