docker 最常用命令汇总

docker run


#启动命令
docker run --name springboot-demo1 -p 8080:8080 -t springboot-demo
docker run image_name echo "hello word"

docker run -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"  --ulimit nofile=200000 -v /etc/localtime:/etc/localtime:ro -m 2048M --memory-swap 2304M -e JAVA_OPTS="-server -Xmx1280m -Xss512k -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=256m" registry.api.fzy.com/bop-k8s/${name}:${build_version}

#交互式进入容器中
docker run -i -t image_name /bin/bash

#在容器中安装新的程序
docker run image_name yum install -y app_name
#Note:在执行 yum命令的时候,要带上-y参数。如果不指定-y参数的话,yum命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。yum 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。

--oom-kill-disable=true : 禁止容器被oom杀掉,使用该参数要与-m一起使用

#docker 执行时同时执行shell命令
docker run centos /bin/sh -c "java -version"

docker run 限制cpu使用率

docker 限制cpu使用率

限制cpu使用率为50%: --cpu-period=1000000 --cpu-quota=500000

docker run 启动参数查看

查看启动命令参数的容器id为 99fa3b77c1e7
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike 99fa3b77c1e7

docker run 自定义hosts配置

方案一:
--add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32
docker run -d --name test1 \
    --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.1

docker stop start kill restart

#停止、启动、杀死一个容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID

#重启一个正在运行的容器 
#-t, --time=10 Number of seconds to try to stop for before killing the container, Default=10
docker restart Name/ID

docker cp

从容器内部复制文件到宿主机上


#从容器里面拷贝文件/目录到本地一个路径
docker cp Name:/container_path to_path
docker cp ID:/container_path to_path


1、从容器里面拷文件到宿主机?在宿主机里面执行以下命令
docker cp 容器名:要拷贝的文件在容器里面的路径  要拷贝到宿主机的相应路径 

示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js,  现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

2、从宿主机拷文件到容器里面 在宿主机里面执行如下命令
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?

docker cp /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.zip

docker ps

#列出当前所有正在运行的container
docker ps
#列出所有的container 包括已停止的容器
docker ps -a
#列出最近一次启动的container或查询最后一次创建的容器
docker ps -l
#docker 查看停止的容器的日志
docker ps -a
然后 docker inspect 对应的容器id 
找到 LogPath

查看一个正在运行的Docker容器的启动命令
docker ps -a --no-trunc

docker logs

#从一个容器中取日志
#-f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
docker logs Name/ID

#实时查看运行的容器的日志
#例:实时查看docker容器名为s12的最后100行日志
sudo docker logs -f --tail 100 s12
sudo docker logs -f -t --tail 10 s12

查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2021-02-08" --tail=100 CONTAINER_ID

查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID

查看某时间之后的日志:
docker logs -t --since="2021-02-08T13:23:37" CONTAINER_ID

查看某时间段日志:
docker logs -t --since="2021-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

grep ac8f5e6ab5a19acd SQL-2019-05-13.0.log

#查看linux 内存
free -m 
#查看磁盘剩余空间
df -hl 

docker rm

#删除一个或者多个镜像
#-f, --force=false Force; --no-prune=false Do not delete untagged parents
docker rmi image_name

#删除所有容器
docker rm `docker ps -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 container
docker rm Name/ID

docker exec

#进入docker正在运行的容器环境  需要指定容器的id或name
docker exec -it enrichupgrade /bin/bash
docker exec -it 6d9ae9e18df5 /bin/sh

docker update 设置开机自启 更新内存

更新容器的重启策略
docker update --restart=always f361b7d8465
更新容器内存
docker update -m 500M f361b7d8465
docker update --memory 3000m --memory-swap 4000m f8e1a18e3031
更新 CPU 共享数量
docker update --cpu-shares 512 f361b7d8465

docker inspect version info search images history

查看docker 获取容器/镜像的元数据详细
docker inspect xxx
查看容器重启次数
docker inspect -f{{ .RestartCount }}” container-id
查看容器最后一次的启动时间
docker inspect -f{{ .State.StartedAt }}” container-id

#查看docker版本
docker version
#显示docker系统的信息
docker info

#检索image
docker search image_name

#列出镜像列表
# -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
docker images

#显示一个镜像的历史
#--no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
docker history image_name

docker save load

docker save : 将指定镜像保存成 tar 归档文件。
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

docker load : 导入使用 docker save 命令导出的镜像。
docker load -i my_ubuntu_v3.tar

docker commit

#保存对容器的修改 本地备份
#-a, --author="" Author; -m, --message="" Commit message
docker commit ID new_image_name
docker commit ${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 -a

2.删除容器
docker rm -f xxx

3.删除容器占用的端口
docker network disconnect --force 网络模式 容器名称
// docker network disconnect --force bridge xxx

4.删除无用的镜像images
docker image prune -a -f 

5.运行一个临时容器,目的是为了将配置、数据、日志等信息存储到宿主机上,停止会把此容器自动删除
docker run --rm -d --name=temp-ch yandex/clickhouse-server

6.拷贝容器内的文件:
docker cp temp-ch:/etc/clickhouse-server/ /etc/

docker top diff


#列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
docker diff Name/ID

#显示一个运行的容器里面的进程信息
docker top Name/ID

#附加到一个运行的容器上面
#--no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process
docker attach ID
#Note:attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。

docker login build push

#登陆registry server
#-e, --email="" Email; -p, --password="" Password; -u, --username="" Username
docker login
echo "$PASSWORD" | docker login --username foo --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 success

docker build -t image_name Dockerfile_path
docker push registry.aifzy.com/bop-k8s/${name}:release

docker 自动化shell脚本

创建startup.sh脚本文件

touch startup.sh
#编辑文件
vim startup.sh

复制下面内容到startup.sh

#!/bin/bash
appName=demo1
docker stop $appName
sleep 10s
cd /root/docker
docker build -t $appName .
docker run -d --name=$appName -p 8080:8080 -t $appName
#实时查看docker启动日志
docker logs -f --tail 10 $appName

配置脚本文件可执行权限

#按ESC wq 回车保存文件
#设置文件可执行权限
chmod 755 startup.sh

docker 服务监控分析

docker stats

arthas 监控分析:
docker exec -it bop-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 容器:
docker exec -it 29198c060396 /bin/sh
jmap -dump:format=b,file=dumpfile.dat pid
docker cp 29198c060396:/logs/d.20170726.txt .

本地ip:  10.23.10.63
打开监听:
nc -l 9000 > dumpfile.bin
服务器:
nc 10.23.10.63 9000 < dumpfile.bin
打开JProfiler工具分析

清除所有未被使用的镜像和悬空镜像

docker system prune -a -f

docker image ls | grep "<YOUR_TAG_NAME>" | awk '{print $3}' | xargs docker image rm

Docker 查看占用分布

docker system df
docker system df -v 命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间

Docker 时区问题

运行时加参数
docker run -e TZ="Asia/Shanghai"
挂载时区文件
docker run -v  /etc/localtime:/etc/localtime
dockerfile文件
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai'>/etc/timezone

Docker jar 更新 docker更新应用

docker jar 更新 docker更新应用

参考文档

Docker中容器的备份、恢复和迁移
Docker 常用指令详解
Docker的三大核心组件:镜像,容器与仓库
Docker镜像的制作、上传、拉取和部署
开发者必备Docker命令

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值