目录
- docker run
- docker run 限制cpu使用率
- docker run 启动参数查看
- docker run 自定义hosts配置
- docker stop start kill restart
- docker cp
- docker ps
- docker logs
- docker rm
- docker exec
- docker update 设置开机自启 更新内存
- docker inspect version info search images history
- docker save load
- docker commit
- docker 服务名重复报错解决办法
- docker top diff
- docker login build push
- docker 自动化shell脚本
- docker 服务监控分析
- docker system prune 清除所有未被使用的镜像和悬空镜像
- Docker 查看占用分布
- Docker 时区问题
- Docker jar 更新 docker更新应用
- docker 开源镜像仓库
- 参考文档
docker run
#启动命令dockerrun--namespringboot-demo1-p8080:8080-tspringboot-demodockerrun image_nameecho"hello word"dockerrun-d--restart=always --log-driver json-file --log-opt max-size=500m --log-opt max-file=2-v/data0/${name}/logs:/data/logs--name${name}--net="host"--ulimitnofile=200000-v/etc/localtime:/etc/localtime:ro-m2048M --memory-swap 2304M-eJAVA_OPTS="-server -Xmx1280m -Xss512k -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=256m"registry.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-disable=true:禁止容器被oom杀掉,使用该参数要与-m一起使用#docker 执行时同时执行shell命令dockerrun centos /bin/sh-c"java -version"docker run 限制cpu使用率
docker 限制cpu使用率
限制cpu使用率为50%: --cpu-period=1000000--cpu-quota=500000docker 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, --time=10 Number of seconds to try to stop for before killing the container, Default=10dockerrestart 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, --follow=false Follow log output; -t, --timestamps=false Show timestampsdockerlogs Name/ID#实时查看运行的容器的日志#例:实时查看docker容器名为s12的最后100行日志sudodockerlogs-f--tail100s12sudodockerlogs-f-t--tail10s12 查看指定时间后的日志,只显示最后100行:dockerlogs-f-t--since="2021-02-08"--tail=100CONTAINER_ID 查看最近30分钟的日志:dockerlogs--since30m CONTAINER_ID 查看某时间之后的日志:dockerlogs-t--since="2021-02-08T13:23:37"CONTAINER_ID 查看某时间段日志:dockerlogs-t--since="2021-02-08T13:23:37"--until"2018-02-09T12:23:37"CONTAINER_IDgrepac8f5e6ab5a19acd SQL-2019-05-13.0.log#查看linux 内存free-m#查看磁盘剩余空间df-hldocker rm
#删除一个或者多个镜像#-f, --force=false Force; --no-prune=false Do not delete untagged parentsdockerrmi image_name#删除所有容器dockerrm`dockerps-a-q`#删除单个容器#-f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the containerdockerrmName/IDdocker exec
#进入docker正在运行的容器环境 需要指定容器的id或namedockerexec-itenrichupgrade /bin/bashdockerexec-it6d9ae9e18df5 /bin/shdocker update 设置开机自启 更新内存
更新容器的重启策略dockerupdate--restart=always 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, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDsdockerimages#显示一个镜像的历史#--no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDsdockerhistoryimage_namedocker save load
dockersave:将指定镜像保存成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#Note:image相当于类,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--name=temp-ch yandex/clickhouse-server6.拷贝容器内的文件: docker cp temp-ch:/etc/clickhouse-server//etc/docker top diff
#列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的dockerdiffName/ID#显示一个运行的容器里面的进程信息dockertopName/ID#附加到一个运行的容器上面#--no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the processdockerattach ID#Note:attach命令允许你查看或者影响一个运行的容器。你可以在同一时间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-cache=false Do not use cache when building the image# -q, --quiet=false Suppress the verbose output generated by the containers# --rm=true 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/bashappName=demo1dockerstop$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-c"wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"dashboard 展示当前进程的信息 ctrl+c可以中断执行 jad --source-only com.wb.bop.fms.account.service.report.impl.AdvertiserdailyServiceImpl dump文件分析: 进入docker 容器:dockerexec-it29198c060396 /bin/sh jmap-dump:format=b,file=dumpfile.dat piddockercp29198c060396:/logs/d.20170726.txt.本地ip:10.23.10.63 打开监听:nc-l9000>dumpfile.bin 服务器:nc10.23.10.639000<dumpfile.bin 打开JProfiler工具分析docker system prune 清除所有未被使用的镜像和悬空镜像
dockersystem prune-a-fdockerimagels|grep"<YOUR_TAG_NAME>"|awk'{print $3}'|xargsdockerimagermcrontab-e配置# 每季度1号执行docker清理02211,4,7,10 *dockersystem prune-a-fDocker 查看占用分布
dockersystemdfdockersystemdf-v命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间Docker 时区问题
运行时加参数dockerrun-eTZ="Asia/Shanghai"挂载时区文件dockerrun-v/etc/localtime:/etc/localtime dockerfile文件 RUNln-sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime 或 RUNcp/usr/share/zoneinfo/Asia/Shanghai /etc/localtime&&echo'Asia/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命令