Ⅰ dockerfile中指定镜像源的参数是
from。
这一镜像参数是dockerfile中的第一指令,这也相当于一个临纤茄时容器,当其中指定参数改变时,复制文件就会乎竖仔发生一定的改变。
Dockerfile是一个镜像构建命令集合的文本文件,可以使用在命令行岁汪中调用任何命令。
Ⅱ Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同
运行时机不太一样。RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。ENTRYPOINT和CMD的不同点在于执行dockerrun时参数传递方式,CMD指定的命令可以被dockerrun传递的命令覆盖,例如,如果用CMD指定:CMD["echo"]然后运行dockerrunCONTAINER_NAMEechofoo那么CMD里唯袜租指定的echo会被新指定的echo覆盖,所以最终相当于运行echofoo,所以最终打印出的结果就是:foo而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:ENTRYPOINT["echo"]然后运行dockerrunCONTAINER_NAMEechofoo则CONTAINER_NAME后面的echofoo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了echo"echofoo"最终打印出的结果就是:echofoo另外,在Dockerfile中,ENTRYPOINT指定的参数比运行dockerrun时指定的参数更靠前,比如:ENTRYPOINT["echo","foo"]执行dockerrunCONTAINER_NAMEbar相当于执行了:echofoobar打印出的结果就是:foobarDockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后指兆一个有效。执行dockerrun命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,好圆例如:ENTRYPOINT["echo","foo"]然后执行:dockerrunCONTAINER_NAMEbar#注意没有echo那么,就相当于执行了echofoobar,最终结果就是foobar
Ⅲ 详解Docker——你需要知道的Docker进阶知识二
Docker镜像
镜像仓库(Repository)用于存放镜像,每个仓库都有唯一的地址,和网址类似。镜像仓库托管在某个 Registry,Registry 和GitHub类似。Docker 提供了一个官方的 Registry,官方 Registry 里的镜像仓库地址可以省去前面的域名前缀,其它 Registry 里的镜像仓库地址必须要指定域名前缀,以保证唯一性。
镜像仓库地址后面可以跟一个 TAG。比如一个镜像名称 ubuntu:14.04 ,冒号前面的 ubuntu 是镜像仓库地址(由于是官方 Registry 里的,可以省略域名前缀),后面的 14.04 是 TAG,TAG 通常设置为镜像的版本号。
Docker 镜像是分层存储的,每一个镜像都由多层组成。镜像之间会森察世共享一些相同的层,从而减小镜像占用的存储空间。
也可以查看指定的镜像:
查看镜像的详细信息
比较常用的配置参数为 -a ,代表下载仓库中所有 TAG 的镜像,默认只下载 latest TAG 的镜像。
如果要下载 ubuntu:14.04 镜像没没,可使用如下命令:
对于我们 pull 的新镜像 ubuntu:14.04 来说,如果我们需要对其进行更新,可以创建一个容器,在容器中进行修改,然后将修改提交到一个新的镜像中。
提交修改使用如下命令:
该命令从一个修改过的容器创建一个新的镜像。例如,我们运行一个容器,然后在其中创建一个文件,最后使用 commit 命令:
通过上述操作我们创建了一个新的镜像,但是本方法不推荐在生产环境使用,因为这种方式的可维护性很差。推荐的创建镜像的方法是使用 Dockerfile ,修改镜像可通过修改 Dockerfile ,然后使用新的 Dockerfile 来构建新的镜像。
docker 可以从一个 Dockerfile 文件中读取指令来构建镜像。 Dockerfile 是一个包含用户构建镜像所需命令的文本文件。在 创建好该文件后,我们此肢可以使用如下命令来构建镜像:
对于一个 Dockerfile 文件内容来说,基本语法格式如下所示:
使用 # 号作为注释,指令( INSTRUCTION )不区分大小写,但是为了可读性,一般将其大写。 Dockerfile 中的指令一般包含下面几个部分:
下面是一个最基本的 Dockerfile :
通过阅读上述内容中我们熟悉的一些 linux 指令,可以很容易的知道该 Dockerfile 将创建一个 apache 镜像。
其中 FROM 指定基础镜像。 RUN 命令默认使用 /bin/sh ,并使用 root 权限执行。 CMD 命令也是默认在 /bin/sh 中执行,但是只能有一条 CMD 指令,如果有多条则只有最后一条会被执行。
下面我们创建一个空目录,在其中编辑 Dockerfile 文件,然后基于此文件构建一个新的镜像:
在构建完成后,我们可以使用该镜像启动一个容器来运行 apache 服务,运行如下命令:
此时,容器启动成功后,并且配置了端口映射,我们就可以通过本机的 8000 端口访问容器 hellodocker3 中的 apache 服务了。我们打开浏览器,输入 localhost:8000
删除 ubuntu:latest 镜像可以使用如下命令:
删除所有的镜像
Ⅳ Docker常用命令大全
基础操作:
1 docker images 查看镜像信息列表 镜像是静态的
2 docker ps -a 查看运行中的所有容器
3 docker pull [images]:[version] 从dockerhub拉取指定镜像
4 docker run -p 8000:80 -tdi --privileged [imageID] [command] 后台启动docker,并指定宿主机端口和docker映射端口。
-i: 以交互模式运行容器,通常与 -t 同时使用;
-d: 后台运行容器,并返回容器ID;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--privileged 容器将拥有访问主机所有设备的权限
通常情况下 [command] 填下 /bin/bash 即可。
特殊情况下,如需要在centos镜像中使用 systemctl . 则应添加 --privileged 并设置[command ]为 init 。
5 当镜像通过run 启动后,便会载入到一个动态的container(容器)中运行,此时若需要进入终端交互模式:
sudo docker exec -it [containerID] /bin/bash
交互模式中,使用 ctrl+p+q退出交互 保持运行,使用 exit命令退出并停止容器。
6 在容器非交互模式下,通过docker start/stop 命令来启动/停止已部署的容器服务。
7 docker rm [containerID] 删除容器
8 docker rmi [imageID] 删除镜像
9 docker cp [YourHostFilePath] [containerID]:[DockerPath] 将宿主机内的指定文件传输至容器内部的指定地址。
镜像制作:
1 docker commit [containerID] [ImageName]:[Version] 将修改后的容器重新打包成镜像
2 docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
3 docker push [ImageID] [repertory_address] 提交镜像到云仓库
(暂时先记录这些,后续再更新)
Ⅳ dockerfile指令跟linux命令通用吗
通用。dockerfile指令跟linux命令通用,Docker程序将这些Dockerfile指令翻译成悉悉真正的Linux命令,Dockerfile有自己书写前庆格式和支持的命令,Docker程序解决这些命令间的依赖慧陆握关系。
Ⅵ 详解Docker——你需要知道的Docker进阶知识五
Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。
构建镜像时,该过程的第一件事是将 Dockerfile 文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。
使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行:
在 Dockerfile 中可以指定一个用户,后续的 RUN , CMD 以及 ENTRYPOINT 指令都会使用该用户身份去执行,该用户必须已存在。
除了指定用户之外,还可以使用 WORKDIR 指定当前工作目录(CWD), RUN , CMD , COPY , ADD 指令将在指定的工作目录中执行。
RUN 指令用于执行命令,该指令有两种形式:
例如我们执行更新命令:
CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:
可以在 docker run 时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。
CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数:
ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被 docker run 时指定的指令覆盖,如下示例:
上述文件构建出来的镜像,使用 docker run image 等同于 docker run image ls-a-l 。使用 docker run image-i-s 等同于 docker run image ls-a-i-s 。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。
COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:
`` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。
不需要预先存在,不存在时会自动创建,如果使用相对路径,则 为相对于工作目录的路径。塌陪
COPY 和 ADD 的不同之处在于,ADD 可伏衫或以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。
ENV 指令用于设置环境变量:
VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:
上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。
学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像:
构建镜像
查看镜像
启动容器
查看已经启动的容器
测试远程登录
Compose 是运行由多个容器组成的 Docker 应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。
在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存缺伍服务、消息队列服务等。
使用 Compose 的步骤如下:
目前有三种版本的 Compose 文件格式:
下载 docker-compose-Linux-x86_64
下载成功后,为了方便使用,可以将其添加到 PATH 路径下
执行完成后,就能够在终端下直接使用 docker-compose 命令了:
接下来我们将创建一个 Web 应用,该应用包含两个容器:
项目目录结构如下:
首先编辑 app/web/web.py 文件,写入下面的内容:
上述代码创建了一个简单的 Web 应用。该应用会连接 redis 服务,在访问 / 页面时,自动将变量 number 加 1。
编辑 app/web/requirements.txt 文件,输入如下内容:
requirements.txt 文件存放了 Web 应用依赖的第三方库包的名称和版本信息。
编辑 app/web/Dockerfile 文件,添加如下内容
上述 Dockerfile 定义了 Web 应用镜像,该镜像基于 python:2.7 基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD 指令指定了应用的启动命令。
编辑 app/docker-compose.yml 文件:
该 docker-compose.yml 文件定义了两个服务,分别为 web 和 redis 服务,并且配置了 web 服务的端口映射和挂载目录。 depends_on 定义了依赖关系,被依赖的服会先启动。
进入 app 目录,执行 docker-compose up 命令来启动应用:
启动成功后,就可以打开网址 127.0.0.1:8001 来访问 Web 应用了。
另外一些命令:
Ⅶ 通过查看帮助文档查看dockerbuild命令作用
通过查看帮助启知升文档查看dockerbuild命令作用是build命令用于使用Dockerfile创建镜像悄老。dockerbuild命令用于从Dockerfile构建镜像。可以在dockerbuild命令中使用-f命令也就是指定要构建的脚本,通过-t输猛毁出镜像名称还可以跟:加上版本。
Ⅷ Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同
你好,
运行时机不太一样。RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。ENTRYPOINT和CMD的不同点在于执行dockerrun时参数传递方式,CMD指定的命令可以被dockerrun传递的命令覆盖,例如,如果用CMD指定:CMD["echo"]然后运行dockerrunCONTAINER_NAMEechofoo那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echofoo,所以最终打印出的结果就是:foo而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:ENTRYPOINT["echo"]然后运行dockerrunCONTAINER_NAMEechofoo则CONTAINER_NAME后面的echofoo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了echo"echofoo"最终打印圆并出的结果就是:echofoo另外,在Dockerfile中,ENTRYPOINT指定的参数比运行dockerrun时指定的参数更靠前,比如:ENTRYPOINT["echo","foo"]执行dockerrunCONTAINER_NAMEbar相当于执行了:echofoobar打印出的结果就是:foobarDockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。执行dockerrun命令时,也可以睁兆添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:ENTRYPOINT["echo","foo"]然后执行:dockerrunCONTAINER_NAMEbar#注意没有echo那么,就相当于执行悉腔租了echofoobar,最终结果就是foobar
Ⅸ dockerfile指令跟linux命令通用,可以在linu
你好,你是问dockerfile指令跟linux命令通用吗?dockerfile指令跟linux命令通用搭磨。每条命令对应linux下面的一条命令,运尺docker程序将这些dockerfile指令在翻译成真正的linux命令,dockerfile中每条指定对应linux中旁枝高的一条命令,docker程序将读取dockerfile中的指令生成指定镜像。所以dockerfile指令跟linux命令通用。
Ⅹ Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
摘要: Docker
容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等
容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下
在实际使用中启动一个镜像,例如
-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些做带-e参数,在Dockerfile指定环境变量
直接构建成容器
开启一个终端启动容器内部,打告御印指定的环境变量a
此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量
因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构
其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本
Dockerfile中启动run.sh脚本作为容器执行命令
在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下
-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如
如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下
同目录下start.sh内容是打印1
构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2
docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出
对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是
测试一个Dockerfile输出1
在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT
容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如
显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机->容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如
除了docker stop命令还有一种停止容器纯友芦的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如
在容器停止之后可以使用 docker start 再启动一个停止的容器,例如
除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如
查看容器详情使用 docker inspect ,比如
在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令
容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如
除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况
当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台
创建Dockerfile以及构建镜像,启动容器
启动一个脚本不断请求api接口
进入容器内部查看日志
另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出
此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式
此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致
如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包
此时退出容器,并且删除容器,最后从镜像重新生成容器
此时进入容器检查,并不存在pymongo包
如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下
以新安装pymongo的容器为例,对新容器使用docker commmit
新生成的镜像叫做xiaogp/my_image_test:v2
从新镜像启动容器并进入容器查看存在新安装的pymongo