Docker 命令 #2
这次是在阿里云上部署了个新服务,记一下用到的命令。
Linux 命令
查看文件
一般都是使用 ls 命令( list )查看当前目录的文件,或者使用 ls -l 查看文件详情,而 ll 则是 ls -l 的缩写。
移动文件
使用 mv 命令( move )移动文件,用法:mv [选项] 文件源 目的地,如果目的地是一个文件名,则将文件重命名移动。
使用 -i 确定文件移动是否有覆盖:如果 mv 命令会导致文件的覆盖,则系统会询问是否要覆盖:
mv -i qiyuan1.md qiyuan2.md
mv: overwrite 'qiyuan2.md'?
或者使用 -f 强制移动,即使会导致文件的覆盖也会直接移动,使用 -f 后,-i 会失效。
或者使用 -b 为被覆盖的文件创建一个备份:
mv -b qiyuan1.md qiyuan2.md
qiyuan2.md~
备份文件的末尾会加上一个 ~ 符号。
复制文件
使用 cp 命令( copy )复制文件,用法:cp [选项] 文件源 目的地,如果目的地是一个文件名,则将文件重命名复制。
cp ./jlr-cons-tianjin/start/ServerStart.sh ./jlr-cons-shanghai-gz-test/start
可选参数如下(都没用到):
-i:如果目标文件已经存在,则会询问是否覆盖,cp 命令默认就是cp -i。-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;-l:把目标文件建立为源文件的硬链接文件,不复制源文件;-s:把目标文件建立为源文件的软链接文件,不复制源文件;-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);-r:递归复制,用于复制目录;-a:相当于-d、-p、-r选项一起用,保留源文件的一切特点;
Docker 命令
runlike
runlike 是一个基于 Go 语言编写的开源工具,用于显示 Docker 容器的命令行参数,并将其格式化为可直接使用的 Docker run 命令。该工具可以让用户快速了解容器的启动参数,便于容器的迁移、备份、调试等操作。它支持通过容器 ID 或名称来查找容器的参数。
使用注意,非 docker runlike <容器名>,而是直接 runlike <容器名>,如:
[root@jaguar-test-02 /extracme/data]# runlike jlr-cons-tianjin
docker run --name=jlr-cons-tianjin --hostname=jlr-cons-tianjin --mac-address=02:42:ac:11:00:11 --env=HostIP=10.0.0.200
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk1.8.0_161/bin
--env=GLIBC_REPO=https://github.com/sgerrand/alpine-pkg-glibc --env=GLIBC_VERSION=2.28-r0 --env=LANG=C.UTF-8
--env=JAVA_HOME=/usr/local/jdk1.8.0_161 --env=JAVA_BIN=/usr/local/jdk1.8.0_161/bin
--env=CLASSPATH=/usr/local/jdk1.8.0_161/lib/dt.jar:/usr/local/jdk1.8.0_161/lib/tools.jar
--volume=/extracme/data/jlr-cons-tianjin/start/:/usr/local/start/
--volume=/extracme/data/jlr-cons-tianjin/logs/:/usr/local/logs/
--volume=/extracme/data/jlr-cons-tianjin/java/:/usr/local/java/
--privileged --workdir=/usr/local/java -p 8031:8080 -p 9999 --restart=no --runtime=runc --detach=true
-t wuweis/jdk:1.8.alpine
/bin/sh -c '/usr/local/start/ServerStart.sh run'
其中指定的参数含义如下:
docker run:运行 Docker 容器的命令
--name=jlr-cons-tianjin:为容器指定名称为 jlr-cons-tianjin
--hostname=jlr-cons-tianjin:将容器的主机名设置为 jlr-cons-tianjin
--mac-address=02:42:ac:11:00:11:将容器的 MAC 地址设置为 02:42:ac:11:00:11
--env=:为容器指定环境变量,格式为变量名=变量值
--volume=:将本地的目录挂载到容器的目录,格式为本地目录=容器目录
--privileged:以特权模式运行容器,容器将具有对主机系统的完全访问权限
--workdir=/usr/local/java:将容器的工作目录设置为 /usr/local/java
-p 8031:8080:将主机端口 8031 映射到容器的端口 8080
-p 9999:映射容器端口 9999,没有指定主机端口,就随机用一个
--restart=no:当容器停止运行时,不会自动重新启动容器
--runtime=runc:指定容器运行时为 runc
--detach=true:在后台运行容器
-t wuweis/jdk:1.8.alpine:使用镜像 wuweis/jdk:1.8.alpine 来运行容器
/bin/sh -c '/usr/local/start/ServerStart.sh run':在容器内执行命令 /usr/local/start/ServerStart.sh run
docker inspect
docker inspect <container_id_or_name>
Docker 的 inspect 命令可以返回一个容器的详细信息,包括容器的元数据和配置信息。这个命令可以返回一个 JSON 格式的文本字符串,然后可以使用 Go 的模板语法来处理这个字符串,获取我们想要的信息。
如查看所有容器的 MAC 地址:
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.MacAddress}} {{end}}' $(docker ps -aq)
在 Go 的模板语法中,{{.}} 表示当前上下文的值。例如,{{.Name}} 表示容器的名称,{{range .NetworkSettings.Networks}} 表示迭代 NetworkSettings.Networks 列表中的每个元素。其中 .MacAddress 表示当前上下文中的 Mac 地址值。这样,我们就可以使用这个语法来自定义 docker inspect 命令的输出,并使用 Go 的模板语法来格式化输出。
最后的 $(docker ps -aq) 是获取所有容器的 ID,此处作为参数使用,用以遍历所有容器的信息,或者可以使用 $(docker ps -q) 获取所有只在运行中的容器的 ID。
还可以查看每个容器对应的端口信息:
docker inspect --format='{{.Name}} - {{range $p, $conf := .NetworkSettings.Ports}}{{$p}} -> {{(index $conf 0).HostPort}} {{end}}'
$(docker ps -aq)
这个就复杂多了,主要还是因为 docker 的详细信息 JSON 的数据结构的问题,要从中筛选出需要的信息。