docker常用命令

锦通  论坛元老 | 2025-3-27 23:14:31 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1634|帖子 1634|积分 4902

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
docker的安装很多,就不说了
docker常用命令:
注:以下命令中,凡涉及到容器id的,都可以用容器id前三位,或者容器name
重启Docker服务:systemctl restart docker / service docker restart
关闭Docker服务:docker service docker stop / docker systemctl stop docker
查看Docker服务状态:systemctl status docker
制止容器:docker stop 容器ID
重启容器:docker restart 容器ID
删除容器:docker rm container_id
搜索仓库镜像:docker search 镜像名
查看镜像:docker images    / docker image ls
拉取镜像:docker pull 镜像名(或docker pull nginx:xxx ,xxx指版本号)
删除镜像:docker image rm image_id   /  docker rmi image_id
启动(制止的)容器:docker start 容器ID
启动(新)容器:docker run -it ubuntu /bin/bash(或docker run -p 80:80 -d --name nginx nginx:1.24.0,第一个80宿主机端口,第二个80容器端口)
进入容器:docker attach 容器ID  /   docker exec -it 容器ID /bin/bash,推荐利用后者。
先启动再设置自启动:docker update --restart=always  容器ID     (实行后须要systemctl restart docker 才能生效)
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
查看docker内存情况:docker stats -a    /  dokcer stats
查看容器设置 :docker inspect 容器id
查看容器挂载目次 :docker inspect 容器id |grep Destination
 
 
生成image镜像:
docker build -t image_name:v1 .docker build -t 名字 冒号 版本号(v1,v2  0.0.1  0.0.2) 空格  点注:背面的点一定不能掉,冒号和版本号可以不要运行 docker run:
完整版:docker run -dit --name docker_name --add-host www.baidu.com:192.168.1.100  -p 8888:8000  --log-driver json-file --log-opt max-size=5120m --log-opt max-file=2 --restart=always -v /data/app/docker_name:/src:rw docker_name:v1 /bin/bash-dit  不清楚
--name docker_name  定义docker容器的名称,假如不填会随机分配一个名字,建议还是填一个
--add-host www.baidu.com:192.168.1.100  设置host,假如一切没题目,这个可以不要
-p 8888:8000   设置端口映射,8888为宿主机端口,8000为docker内部端口,含义:访问宿主机8888的时间,相当于访问docker里的8000端口
--log-driver json-file --log-opt max-size=5120m --log-opt max-file=2           --log-opt max-size=5120m为设置日志文件单个大小为 5120M         --log-opt max-file=2 设置文件最多为2个,多余的会删掉      (这一步建议根据自己服务器设置,不设置的话会无限增长)
--restart=always   设置会一直重启,重启dockers后会自启动,防止以外终止
-v /data/app/docker_name:/src:rw    服务器文件夹与docker里文件夹映射,含义:宿主机/data/app/docker_name 这个文件夹对应容器里的/src ,容器对这个文件夹具有 rw权限,r : 独  w:写,    重要文件最好都这样,比如用户上传的图片等,防止docker rm docker_name 后丢失
docker_name:v1     image的名称和版本号
/bin/bash  不清楚
 
查看docker日志:
跟踪查看日志:docker logs -f -t  容器名称或者容器id
查看最新n行日志:docker logs -t --tail=50 容器名称或容器id
查看某个时间之后的日志:docker logs -t --since="2022-09-22T09:10:00" 容器名称或容器id
查看最近30min的日志: docker logs --since 30m 容器名称或容器id
查看某个时间段日志:docker logs -t --since="2022-09-22T09:10:00" --until "2022-09-22T09:20:00" 容器名称或容器id
查看日志路径:docker inspect --format='{{.LogPath}}'
导出docker日志到文件:docker logs --since="2023-04-28T00:00:00" --until "2023-04-28T12:00:00" 容器id >>file.log
查看日志大小:docker inspect --format='{{.LogPath}}'  | xargs sudo du -sh
docker 查看日志大小(/data/docker 为docker的安装目次):
for d in $(ls -d /data/docker/containers/*); do ls --time-style=long-iso -lh $d/*-json.log | awk -F' *|/' '{printf("%30s\t%s\t%s %s\t%s\n", "'$(docker ps -af id=${d##*/} --format "table {{.Names}}" | tail -1)'", $5, $6, $7, $14) }'; done
清理指定docker的日志(xxxx为docker容器的名称):
echo > /data/docker/containers/$(docker ps --no-trunc -aqf 'name=xxxx')/*-json.log
 
docker镜像的导入导出:
1》源机器与目的机器系统同等的情况下:(比如都是amd)
     1、在源机器,镜像打包:docker save 镜像名称:镜像版本 >打包后的文件名字.tar
     2、在目的机器,将镜像加载到Docker:docker load -i 打包后的文件名字.tar(例子:docker load -i minio.tar)
2》源机器与目的机器系统不同等的情况下:(源机器是amd,目的机器是arm)
    1、docker  pull   --platform  linux/arm64  mcr.microsoft.com/dotnet/aspnet:6.0          注:linux/arm64  不可填成  linux/arm             mcr.microsoft.com/dotnet/aspnet:6.0   为  image的名称和版本号     2、docker save -o aspnet.tar mcr.microsoft.com/dotnet/aspnet:6.0           注:这一步是导出基础image     3、docker load -i /data/app/aspnet.tar           注:这一步是导入基础image     4、这个时间就可以继续  docker build了  net6项目中利用DateTime.Now获取到的时间比本地时间要差8小时,但是docker容器中,利用date获取的时间是正确的,网上提供了很多种方法,主要有以下三种方法,其中前面两种方法我尝试过了,是可以行得通的,下面是常见的三种方法:(推荐方法2) 1. 进入docker内部将本地时间链接到默认的本地时间,解决方法如上 # 进入容器命令行docker exec -it [container_name | container_id] /bin/bash# 一般都已经安装了 timezone 数据包,如碰到未安装则实行,yum命令有的容器中无法利用,可以利用 apt-get install -y tzdatayum install -y tzdata# 软链接时区文件到localtimeln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone 2.通过dockerfile在安装项目的时间,命令和第一种方法差不多,只是运行时间不一样,将下面的代码放在dockerfile即可,该方法亲手尝试也可以行得通的RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \    && echo 'Asia/Shanghai' >/etc/timezone 3.直接从宿主机拷入时区文件到docker中,来实现时区,命令如下,该方法我尝试了,两种命令都报错了,第一个方法报错no such directory,我查询了宿主机确实没有/etc/localtime目次,于是用了第二个命令也报错了,报错如下:Error response from daemon: Error processing tar file(exit status 1): unlinkat /usr/share/zoneinfo/Asia/Shanghai: device or resource busy,于是就没有办法进行下去,这个方式没有走的通 
容器内安装须要的命令:(由于linux上一些命令在容器内没有,可以在Dockerfile里编写,也可以手动添加,此为手动添加)
1、进入容器   docker exec -it 容器id /bin/bash
2、实行安装命令
       安装 curl: apt install curl       安装ping: apt install iputils-ping3、退出容器    exit 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表