到目前为止,介绍了许多操作 Docker 的方法,现在来了解更详细的操作方法。
说穿了,其实还是下指令,今天指令将会介绍三个部分如下:
目前已知道的元件有 image、container、volume、network 四种,其实它们分别有个自的子指令如下:
docker image
docker container
docker volume
docker network
今天简单介绍一下 docker image
与 docker container
这两个子指令,这里同时复习过去提到的指令。
docker image
这个指令是用来管理 image 的,过去有提到的指令如下:
Docker image 子指令 | 对应过去提过的指令 |
---|---|
docker image build | docker build |
docker image history | docker history |
docker image import | docker import |
docker image load | docker load |
docker image ls | docker images |
docker image pull | docker pull |
docker image push | docker push |
docker image rm | docker rmi |
docker image save | docker rmi |
docker image tag | docker tag |
这里有个很好用的指令是 docker image prune
,它会把同时符合下面条件的「孤儿」image 移除。
REPOSITORY
与 TAG
标 <none>
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> f9bb75ff4a9c 13 hours ago 56.2MB
以上面这个例子来说:
REPOSITORY
与 TAG
标 <none>
条件docker image ls -f dangling=true | grep f9bb75ff4a9c
指令检查docker ps -a -f ancestor=f9bb75ff4a9c
指令检查docker container
这个子指令也很直白,就是管理 container:
Docker container 子指令 | 对应过去提过的指令 |
---|---|
docker container attach | docker attach |
docker container commit | docker commit |
docker container create | docker create |
docker container exec | docker attach |
docker container export | docker export |
docker container kill | docker kill |
docker container logs | docker logs |
docker container ls | docker ps |
docker container rm | docker rm |
docker container run | docker run |
docker container start | docker start |
docker container stop | docker stop |
过去已停止的 container 都是靠人工删,或是 --rm
让 Docker 自动删。现在介绍 docker container prune
指令,它可以清除没用的 container。清除的条件是所有停止的 container,包括刚建立未启动的状态也算停止的 container。
另外再介绍,如果是 Bash 的话,可以用下面这个指令无条件清除所有 container:
# -v 参数代表要顺便移除 volume。
docker rm -vf $(docker ps -aq)
docker image
的操作方法几乎都说明过了,但 docker container
还有很多指令都没看过,下面会继续介绍。
docker container cp
这个指令与 Dockerfile COPY 有一半像,docker container cp
与 COPY
都可以把 host 的档案复制到 container,而只有 docker container cp
可以把 container 的档案复制到 host。
用法如下:
docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker container cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
一个例子如下:
# 把 container 里 build 好的 JAR 档复制出来
docker container cp jdk_container:/source/target ./
docker container diff
在 Hello Docker World 有提到,image 的内容是唯读的,而 container 内容是可读写。
这个指令可以查 container 档案系统,与 image 档案系统的差异,也就是 container 启动後,到底对档案系统做了哪些修改。
之前曾提到 docker stop
是送出 SIGTERM
信号、docker kill
则是送出 SIGKILL
。这里笔者把相关的指令和对应的信号都列出来:
Docker 指令 | 信号 | |
---|---|---|
docker container kill | SIGKILL | |
docker container pause | SIGSTOP | |
docker container stop | 先 SIGTERM,timeout 到了会改送 SIGKILL | |
docker container unpause | SIGCONT |
Docker 指令 | 用途 |
---|---|
docker container port | 查目前 host 与 container 有设定哪些 port forwarding |
docker container rename | 改 container 名称 |
docker container restart | 先 stop 再 start |
docker container stats | 查看 container 的 CPU 与记忆体使用量 |
docker container top | 观察 container process 状态,其实等於在 container 里下 ps 指令 |
docker container wait | 执行後,会等到 container 结束,然後再把 exit code 印出 |
使用 docker container create --help
指令,可以看到非常多参数可以使用。笔者也介绍蛮多参数了,这里列几个出来参考:
参数 | 用途 |
---|---|
--add-host | 新增 host 与 ip 的对照表,也就是 /etc/hosts 的表 |
--cpus | 分配 CPU 资源 |
--device | 分配 host 的装置 |
--dns | 自定义 DNS server |
--entrypoint | 覆写 ENTRYPOINT 设定,注意这里会是 exec mode |
--env-file | 如果 env 族繁不及备载的话,可改用档案 |
--expose | 揭露可以使用的 port |
--gpus | 分配 GPU 资源 |
--hostname | 自定义 hostname |
--ip | 自定义 IP |
--label | 设定 metadata |
--mac-address | 自定义 MAC address |
--memory | 设定记忆体上限 |
--restart | 设定自动重启机制 |
--volume-driver | 使用 volume driver |
以上面的例子可以发现几件事:
docker run
阶段再覆盖建议读者可以看过一轮,大致了解 Docker 可以控制 container 什麽样的设定。
docker container update
动态调整 container 的 CPU、memory、restart 机制等。
是的,volume 设定与网路设定是无法调整的,只能砍掉重练。但只要 docker volume 与 docker network 有配置好,砍掉重练是非常简单的。
四种元件都有各自的 inspect 指令:
docker image inspect
docker container inspect
docker volume inspect
docker network inspect
如 container,可以查出非常详细的 Volume 设定、网路设定、CPU、Memory 等资讯。
# Volume 设定
docker container inspect -f '{{json .Mounts}}' fdad097c5781
# 网路设定
docker container inspect -f '{{json .NetworkSettings}}' fdad097c5781
# CPU、Memory 资讯
docker container inspect -f '{{json .HostConfig}}' fdad097c5781
今天介绍的指令或参数,可以做更详细的设定,或查到更详细的资讯。Kubernetes 或其他 container orchestration 工具,其实就是用这些方法与资讯在管理 container 的,因此了解这些内容对於开发出适用於 container orchestration 工具的程序或 image,是非常有帮助的。
>>: Day28:Azure小白如何使用Azure Cache for Redis来存取常用资料
写铁人赛是一个非常有趣的过程,也让我在工作之余会继续接触程序,这次参赛的目的也算是整理自己在工作时需...
【前言】 这两天来记录 ethers.js 我觉得蛮重要的一些学习笔记,今天主要聚焦在一些常见名词...
InterSection(集合) 以下会来实作怎麽找寻两个array的集合 先使用两个回圈来实作Bi...
前一篇有提到url的连结不是Google店家页面的连结,需要透过Chrome的开发者工具才能找到~ ...
本篇介绍CSS单位,需要小心使用的观念 单位介绍 %: 相对父层的大小比例 vw(view por...