docker 最常用命令汇总
目录docker rundocker run 限制cpu使用率docker run 启动参数查看docker run 自定义hosts配置docker stop start kill restartdocker cpdocker psdocker logsdocker rmdocker execdocker update 设置开机自启 更新内存docker inspect version info search images historydocker save loaddocker commitdocker 服务名重复报错解决办法docker top diffdocker login build pushdocker 自动化shell脚本docker 服务监控分析docker system prune 清除所有未被使用的镜像和悬空镜像Docker 查看占用分布Docker 时区问题Docker jar 更新 docker更新应用docker 开源镜像仓库参考文档docker run#启动命令dockerrun--namespringboot-demo1-p8080:8080-tspringboot-demodockerrun image_nameechohello worddockerrun-d--restartalways --log-driver json-file --log-opt max-size500m --log-opt max-file2-v/data0/${name}/logs:/data/logs--name${name}--nethost--ulimitnofile200000-v/etc/localtime:/etc/localtime:ro-m2048M --memory-swap 2304M-eJAVA_OPTS-server -Xmx1280m -Xss512k -XX:MaxMetaspaceSize256m -XX:MaxDirectMemorySize256mregistry.api.fzy.com/bop-k8s/${name}:${build_version}#交互式进入容器中dockerrun-i-timage_name /bin/bash#在容器中安装新的程序dockerrun image_name yuminstall-yapp_name#Note在执行 yum命令的时候要带上-y参数。如果不指定-y参数的话yum命令会进入交互模式需要用户输入命令来进行确认但在docker环境中是无法响应这种交互的。yum 命令执行完毕之后容器就会停止但对容器的改动不会丢失。--oom-kill-disabletrue:禁止容器被oom杀掉使用该参数要与-m一起使用#docker 执行时同时执行shell命令dockerrun centos /bin/sh-cjava -versiondocker run 限制cpu使用率docker 限制cpu使用率限制cpu使用率为50% --cpu-period1000000--cpu-quota500000docker run 启动参数查看查看启动命令参数的容器id为 99fa3b77c1e7dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sock assaflavie/runlike 99fa3b77c1e7docker run 自定义hosts配置方案一 --add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32dockerrun-d--nametest1\--add-host test1.a:1.2.3.4\local/test 方案二 docker-compose.yml文件指定 test2: build: local/test extra_hosts: test1.a:1.2.3.4 test1.b:4.3.2.1docker stop start kill restart#停止、启动、杀死一个容器dockerstop Name/IDdockerstart Name/IDdockerkillName/ID#重启一个正在运行的容器#-t, --time10 Number of seconds to try to stop for before killing the container, Default10dockerrestart Name/IDdocker cp从容器内部复制文件到宿主机上#从容器里面拷贝文件/目录到本地一个路径dockercpName:/container_path to_pathdockercpID:/container_path to_path1、从容器里面拷文件到宿主机在宿主机里面执行以下命令dockercp容器名要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例 假设容器名为testtomcat,要从容器里面拷贝的文件路为/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下面那么命令应该怎么写呢dockercptesttomcat:/usr/local/tomcat/webapps/test/js/test.js /opt2、从宿主机拷文件到容器里面 在宿主机里面执行如下命令dockercp要拷贝的文件路径 容器名要拷贝到容器里面对应的路径 示例假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面那么命令该怎么写呢dockercp/opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js#解压到指定目录文件夹下unzip-d./plugis/elasticsearch-analysis-ik-6.6.0 elasticsearch-analysis-ik-6.6.0.zipdocker ps#列出当前所有正在运行的containerdockerps#列出所有的container 包括已停止的容器dockerps-a#列出最近一次启动的container或查询最后一次创建的容器dockerps-l#docker 查看停止的容器的日志dockerps-a然后dockerinspect 对应的容器id 找到 LogPath 查看一个正在运行的Docker容器的启动命令dockerps-a--no-truncdocker logs#从一个容器中取日志#-f, --followfalse Follow log output; -t, --timestampsfalse Show timestampsdockerlogs Name/ID#实时查看运行的容器的日志#例实时查看docker容器名为s12的最后100行日志sudodockerlogs-f--tail100s12sudodockerlogs-f-t--tail10s12 查看指定时间后的日志只显示最后100行dockerlogs-f-t--since2021-02-08--tail100CONTAINER_ID 查看最近30分钟的日志:dockerlogs--since30m CONTAINER_ID 查看某时间之后的日志dockerlogs-t--since2021-02-08T13:23:37CONTAINER_ID 查看某时间段日志dockerlogs-t--since2021-02-08T13:23:37--until2018-02-09T12:23:37CONTAINER_IDgrepac8f5e6ab5a19acd SQL-2019-05-13.0.log#查看linux 内存free-m#查看磁盘剩余空间df-hldocker rm#删除一个或者多个镜像#-f, --forcefalse Force; --no-prunefalse Do not delete untagged parentsdockerrmi image_name#删除所有容器dockerrmdockerps-a-q#删除单个容器#-f, --forcefalse; -l, --linkfalse Remove the specified link and not the underlying container; -v, --volumesfalse Remove the volumes associated to the containerdockerrmName/IDdocker exec#进入docker正在运行的容器环境 需要指定容器的id或namedockerexec-itenrichupgrade /bin/bashdockerexec-it6d9ae9e18df5 /bin/shdocker update 设置开机自启 更新内存更新容器的重启策略dockerupdate--restartalways f361b7d8465 更新容器内存dockerupdate-m500M f361b7d8465dockerupdate--memory3000m --memory-swap 4000m f8e1a18e3031 更新 CPU 共享数量dockerupdate --cpu-shares512f361b7d8465docker inspect version info search images history查看docker 获取容器/镜像的元数据详细dockerinspect xxx 查看容器重启次数dockerinspect-f“{{.RestartCount}}” container-id 查看容器最后一次的启动时间dockerinspect-f“{{.State.StartedAt}}” container-id#查看docker版本dockerversion#显示docker系统的信息dockerinfo#检索imagedockersearch image_name#列出镜像列表# -a, --allfalse Show all images; --no-truncfalse Dont truncate output; -q, --quietfalse Only show numeric IDsdockerimages#显示一个镜像的历史#--no-truncfalse Dont truncate output; -q, --quietfalse Only show numeric IDsdockerhistoryimage_namedocker save loaddockersave:将指定镜像保存成tar归档文件。dockersave-omy_ubuntu_v3.tar runoob/ubuntu:v3dockerload:导入使用dockersave 命令导出的镜像。dockerload-imy_ubuntu_v3.tardocker commit#保存对容器的修改 本地备份#-a, --author Author; -m, --message Commit messagedockercommit ID new_image_namedockercommit${name}${name}-backup#Noteimage相当于类container相当于实例不过可以动态给实例安装新软件然后把这个container用commit命令固化成一个image。docker 服务名重复报错解决办法Docker service endpoint with name xxx already exists.使用docker部署服务启动容器时有时会遇到如标题上的这种报错。意思是这个端口已经被名为xxx的容器占用了。 而执行 docker ps 又找不到这个容器这种情况通常是xxx容器没有正常删除导致的。1.查看容器 docker ps-a2.删除容器 docker rm-f xxx3.删除容器占用的端口 docker network disconnect--force 网络模式 容器名称// docker network disconnect --force bridge xxx4.删除无用的镜像images docker image prune-a-f5.运行一个临时容器目的是为了将配置、数据、日志等信息存储到宿主机上停止会把此容器自动删除 docker run--rm-d--nametemp-ch yandex/clickhouse-server6.拷贝容器内的文件 docker cp temp-ch:/etc/clickhouse-server//etc/docker top diff#列出一个容器里面被改变的文件或者目录list列表会显示出三种事件A 增加的D 删除的C 被改变的dockerdiffName/ID#显示一个运行的容器里面的进程信息dockertopName/ID#附加到一个运行的容器上面#--no-stdinfalse Do not attach stdin; --sig-proxytrue Proxify all received signal to the processdockerattach ID#Noteattach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来是从CTRL-C。docker login build push#登陆registry server#-e, --email Email; -p, --password Password; -u, --username Usernamedockerloginecho$PASSWORD|dockerlogin--usernamefoo --password-stdin https://xx.w.com#根据Dockerfile 构建出一个容器#build# --no-cachefalse Do not use cache when building the image# -q, --quietfalse Suppress the verbose output generated by the containers# --rmtrue Remove intermediate containers after a successful build# -t, --tag Repository name (and optionally a tag) to be applied to the resulting image in case of successdockerbuild-timage_name Dockerfile_pathdockerpush registry.aifzy.com/bop-k8s/${name}:releasedocker 自动化shell脚本创建startup.sh脚本文件touchstartup.sh#编辑文件vimstartup.sh复制下面内容到startup.sh#!/bin/bashappNamedemo1dockerstop$appNamesleep10scd/root/dockerdockerbuild-t$appName.dockerrun-d--name$appName-p8080:8080-t$appName#实时查看docker启动日志dockerlogs-f--tail10$appName配置脚本文件可执行权限#按ESC wq 回车保存文件#设置文件可执行权限chmod755startup.shdocker 服务监控分析dockerstats arthas 监控分析dockerexec-itbop-fms-account-job /bin/sh-cwget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jardashboard 展示当前进程的信息 ctrlc可以中断执行 jad --source-only com.wb.bop.fms.account.service.report.impl.AdvertiserdailyServiceImpl dump文件分析 进入docker 容器dockerexec-it29198c060396 /bin/sh jmap-dump:formatb,filedumpfile.dat piddockercp29198c060396:/logs/d.20170726.txt.本地ip:10.23.10.63 打开监听nc-l9000dumpfile.bin 服务器nc10.23.10.639000dumpfile.bin 打开JProfiler工具分析docker system prune 清除所有未被使用的镜像和悬空镜像dockersystem prune-a-fdockerimagels|grepYOUR_TAG_NAME|awk{print $3}|xargsdockerimagermcrontab-e配置# 每季度1号执行docker清理02211,4,7,10 *dockersystem prune-a-fDocker 查看占用分布dockersystemdfdockersystemdf-v命令可以进一步查看空间占用细节以确定是哪个镜像、容器或本地卷占用过高空间Docker 时区问题运行时加参数dockerrun-eTZAsia/Shanghai挂载时区文件dockerrun-v/etc/localtime:/etc/localtime dockerfile文件 RUNln-sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime 或 RUNcp/usr/share/zoneinfo/Asia/Shanghai /etc/localtimeechoAsia/Shanghai/etc/timezoneDocker jar 更新 docker更新应用docker jar 更新 docker更新应用docker 开源镜像仓库# DaoCloud 免登录最方便dockerpull m.daocloud.io/docker.io/library/node:18-alpine# 然后给镜像打个短标签方便后续用dockertag m.daocloud.io/docker.io/library/node:18-alpine node:18-alpine 编辑或创建Docker配置文件 /etc/docker/daemon.json并写入以下内容可以多添加几个地址做备用 json{registry-mirrors:[https://docker.xuanyuan.me,https://docker.1ms.run,https://docker.m.daocloud.io]}重启Docker服务使配置生效bashsudosystemctl daemon-reloadsudosystemctl restartdocker配置完成后直接用原来的命令拉取镜像即可bashdockerpull node:18-alpine参考文档Docker中容器的备份、恢复和迁移Docker 常用指令详解Docker的三大核心组件镜像容器与仓库Docker镜像的制作、上传、拉取和部署开发者必备Docker命令