Docker 操作指北 一)常用命令
拉取 Docker
镜像
我们通过最简单的 image
文件 “hello world”,感受一下 Docker
。
因为国内连接 Docker
的官方仓库很慢,因此我们在日常使用中会使用 Docker
中国加速器。通过 Docker
官方镜像加速,中国区用户能够快速访问最流行的 Docker
镜像。该镜像托管于中国大陆,我们配置国内镜像可以享受到更快的下载速度和更强的稳定性,从而能够更敏捷的开发和交付 Docker
化应用。
Docker
中国官方镜像加速可通过 registry.docker-cn.com
访问。该镜像只包含流行的公有镜像,私有镜像仍需要从美国镜像中拉去。
修改系统中 Docker
对应的配置文件即可,如下包含了公司仓库和一些其他国内镜像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "debug" : true , "experimental" : false , "insecure-registries" : [ "registry.becypress.com" ], "registry-mirrors" : [ "https://mirror.ccs.tencentyun.com" , "https://hub-mirror.c.163.com" , "https://reg-mirror.qiniu.com" , "http://f1361db2.m.daocloud.io" , "https://docker.mirrors.ustc.edu.cn" , "https://registry.docker-cn.com" ] }
win10配置方式: 右键电脑右下角的Docker 图标–>Settings–>Docker Engine—> 将加速器地址复制到该页面上的文本框中,点击Apply 然后等待Docker重启,重启完毕就可以使用新的Docker镜像源了!!!
其他 windows 配置方式: 1 2 3 4 5 6 7 8 # 进入 Docker 虚拟机 docker-machine.exe ssh default # 编辑 Docker 配置文件 sudo vi /etc/docker/daemon.json # 按下 i 进入编辑模式添加以上配置 # 按下 : 退出编辑模式 # 按下 wq 保存并退出 # 退出虚拟机按下 exit
linux 系统配置方式:
配置好后运行如下命令,将 image (镜像) 文件从仓库抓去到本地:
1 docker image pull library/hello-world
上面的代码中,docker image pull
是抓取 image
文件的命令。library/hello-world
是 image
文件在仓库里面的位置,其中 library
是 image
文件所在的组,hello-world
是 image
文件的名字。
查看宿主机上的镜像,Docker
镜像保存在 /var/lib/docker
目录下 1 docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS
说明:
-a:列出本地所有的镜像(含中间映像蹭,默认情况下,过滤调中间映像层);
–digests:显示镜像的摘要信息;
-f:显示满足条件的镜像;
–format:指定返回值的模版文件;
–no-trunc:显示完整的镜像信息;
-q:只显示镜像ID;
hello-world
镜像抓取成功后,就可以在本机看到这个 image
文件了。
运行镜像:会创建一个新的容器并运行 1 docker run [OPTIONS] image_name/image_id [COMMAND] [ARGS...]
OPTIONS
说明:
-a stdin:指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d:后台运行容器,并返回容器ID;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P:随机端口映射,容器内部端口随机映射到主机的高端口;
-p:指定端口映射,格式为:主机(宿主)端口:容器端口 ;
–name:为容器指定一个名称;
–dns:指定容器使用的DNS服务器,默认和宿主一致;
–dns-search:指定容器DNS搜索域名,默认和宿主一致;
-h:指定容器的 hostname
;
-e:设置环境变量;
–env-file:从指定文件读入环境变量;
–cpuset:绑定容器到指定CPU运行;
-m:设置容器使用内存最大值;
–network:指定容器网络模式;
–ip:指定容器IP;
–network-alias:指定容器网络别名;
…:其他可通过 docker run –help 查看
现在运行 hello-world
这个镜像文件:
输出这段提示以后,hello-world
就会停止,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如 Oracle
、Mysql
镜像等。
查看容器
OPTIONS
说明:
-a:显示所有的容器,包括未运行的;
-f:根据条件过滤显示的内容;
–format:指定返回值的模版文件;
-l:显示最近创建的容器;
-n:列出最近创建的n个容器;
–no-trunc:不截断输出;
-q:只显示容器ID;
-s:显示总的文件大小;
查看之前启动的 hello-world
容器:
输出详情介绍:
启动、停止、重启容器 1 2 3 docker start container_name/container_id docker stop container_name/container_id docker restart containcer_name/container_id
我们现在可以将 hello-world
容器启动:
进入容器 1 docker exec [OPTIONS] container_name/container_id COMMAND [ARG...]
OPRIONS
说明:
-d:分离模式,在后台运行
-i:即使没有附加也保持STDIN打开
-t:分配一个伪终端
通过 exec
命令对指定的容器执行 sh:
通过 exec
命令对指定的容器执行 bash:
查看容器日志 1 docker logs [OPTIONS ] container_name/container_id
OPTIONS
说明:
-f:跟踪日志输出;
–since:显示某个开始时间的所有日志
-t:显示时间戳
–tail:仅列出最新的N条容器日志
删除容器 1 docker rm [OPTIONS] container_name/container_id
OPTIONS
说明:
-f:通过 SIGKILL 信号强制删除一个运行中容器;
-l:移除容器间的网络连接,而非容器本身;
-v:删除与容器相关的卷;
删除镜像 1 docker rmi [OPTIONS] image_name/image_id
OPTIONS
说明:
-f:强制删除;
–no-prune:不移除该镜像的过程镜像,默认移除;
查看当前系统 Docker
信息
二)Dockerfile
概念 Docker
镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,这个脚本就是 Dockerfile
。
Dockerfile
是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile
,当我们需要定制自己额外的需求时,只需要在 Dockerfile
上添加或者修改指令,重新生成 image
即可,省去了敲命令的麻烦。
简单来说:Dockerfile
是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
文件格式 1 2 3 4 5 6 7 8 FROM nginx:alpineMAINTAINER docker_user docker_user@email.comRUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html CMD /usr/sbin/nginx
Dockerfile
分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令 。一开始必须要指明所基于的镜像名称,接下来一般会说明维护者信息;后面则是镜像操作指令,例如 RUN
指令。每执行一条 RUN
指令,镜像添加新的一层,并提交;最后是 CMD
指令,来指明运行容器时的操作命令。
注意 :Dockerfile
的指令每执行一次都会在 docker
上新建一层。所以过多无意义的层会造成镜像膨胀过大;
构建镜像 在 Dockerfile
文件的存放目录下,执行构建动作:
1 docker build [OPTIONS] PATH | URL | -
OPTIONS
说明:
-t / -tag:镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签;
–build-arg:设置镜像创建时的变量;
–cpu-shares:设置 cpu 使用权重;
-f:指定要使用的 Dockerfile
路径;
-m:设置内存最大值;
…其他可通过 docker build –help 查看
注 :docker build -t nginx:test .
代表本次执行的上下文路径(上下文路径是指 docker
在构建镜像,有时候需要使用本机的文件,比如复制,docker build
命令得知这个路径后,会将路径下的所有内容打包)。
推送镜像 1 docker push [OPTIONS] NAME[:TAG]
OPTIONS
:说明
–disable-content-trust:忽略镜像的校验,默认开启
指令详解
FROM:定制的镜像都是基于 FROM
的镜像,这里的 nginx
就是定制需要的基础镜像。后续操作都是基于nginx;
RUN:用于执行后面跟着的命令,等同于在终端操作的 shell 命令;
CMD:类似与 RUN
指令,用于运行程序,但两者运行的时间不同
CMD
是在 docker run
时运行,如果多个 CMD
指令仅最后一个生效
RUN
是在 docker build
时运行
COPY:复制指令,从上下文目录中复制文件或者目录到指定容器里的指定路径
格式:COPY
源路径/文件 目标路径/文件
案例:COPY ./target/service-caterer-2.0.0.war app.war
ADD:添加指令,和 COPY
指令使用格式一致;
ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量;
ARG:构建参数,与 ENV
作业一致。不过作用域不一样,ARG
设置的环境变量仅对 Dockerfile
内有效,也就是说只有 docker build
的过程有效,构建好的镜像内不存在此环境变量。
VOLUME:定义匿名数据卷,在启动容器的时候忘记挂载数据卷,会自动挂载到匿名卷。
格式:VOLUME ["<路径1>","<路径2>"...]
作用:避免重要的数据,因容器重启而丢失,这是非常致命的
EXPOSE:为构建的镜像设置监听端口,使容器在运行时监听。
格式:EXPOSE <端口1> [<端口2>...]
作用:帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;且镜像在运行时使用随机端口映射时,也就是 docker run -P
时,会自动随机映射 EXPOSE
的端口。
WORKDIR:指定工作目录。用 WORKDIR
指定的工作目录,会在构建镜像的每一层中都存在(WORKDIR
指定的工作目录,必须时提前创建好的)。
格式: WORKDIR <工作目录路径>
USER:用于指定后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
三)Docker Compose 待完善。。。