docker常用命令 docker命令

文章后面有其他常用

#--------------------------------docker常用命令---------------------
# docker重启所有容器
docker restart $(docker ps -a -q)

# docker中 启动所有的容器命令
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

# docker中   停止 关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker

三图原文链接:https://www.cnblogs.com/roger888/p/13885222.html
理解docker先看三张图 1 设计架构

在这里插入图片描述

体系架构

Docker uses a client-server architecture. The Docker client talks to the Docker daemon, which does the heavy lifting of building, running, and distributing your Docker containers. The Docker client and daemon can run on the same system, or you can connect a Docker client to a remote Docker daemon. The Docker client and daemon communicate using a REST API, over UNIX sockets or a network interface.
在这里插入图片描述

主业务逻辑 逻辑图

在这里插入图片描述

docker engine,是docker的核心,主要有三个组成部分:dockerd、cli、restapi。cli就是docker命令,restapi就是可以解析cli命令,传递并指示dockerd去工作,dockerd接受到指示后去进行相应的操作,比如创建和管理Docker对象,例如图像,容器,网络和卷。
docker client,就是docker客户端,你可以在docker clent执行docker命令,比如docker run、docker pull等。docker client会解析命令并收集完参数后发一个http请求包docker daemon
docker damon,就是docker守护进程,其中包含了两个部分:
一个是docker server,用于处理docker client的请求,包括了http server、route和handler。http server接受到docker client的请求以后就发给mut route,mut route根据请求的内容,选择对应的handler来执行该请求。
一个是engine,是docker的运行引擎,也是核心模块。server的handler里存储了特定job的处理访问方法,engine接收到handler后,会根据要求执行job。
job是docker engine的最基本的工作执行单元。docker的每一个操作都会抽象成一个job被执行。这个job就像一个进程,有名称,有环境变量,有输入输出,有错误信息等等。
Driver,驱动模块,docker有三个驱动模块:graphdriver、networkdriver、execdriver,分别负责镜像、网络、容器管理。
graphdriver,负责已下载的镜像的管理。它有一个构建在SQLite之上的小型图数据库,用于管理镜像。主要工作内容:
去docker registry下载镜像
保管已下载的镜像(会为已下载的镜像设置对应的id)
记录已下载镜像的各种关系(镜像与container的关系,关于每一个的容器镜像,具体存储的信息有:该容器镜像的元数据,容器镜像的大小信息,以及该容器镜像所代表的具体rootfs)。详细可参考:https://blog.csdn.net/tanzhe2017/article/details/81010495
networkdriver,负责container网络环境的配置。补充一下,Docker网络模式有Bridge模式、Host模式、Container模式、None模式(其中container模式非内置)。具体可参考https://www.cnblogs.com/zuxing/articles/8780661.html、https://www.jianshu.com/p/22a7032bb7bd。当创建一个容器是,可以指定你想要的网络模式,默认是Bridge模式主要工作内容:
docker启动时,为docker创建内置网络模式
container创建时,为container创建专属的虚拟网卡,为container分发ip地址、端口并做好与宿主机的端口映射、为container设置防火墙策略等。
execdriver,容器的执行驱动,负责创建容器运行的命名空间、容器资源使用的统计与限制、容器内部进程的真正运行。有两种实现方式,一个是LXC驱动,一个是native驱动,现在默认使用native,里面封装了libcontainer。
libcontainer,单独列出来,是因为networkdriver和execdriver的工作实际都是通过libcontainer实现的。libcontainer可以直接访问内核中与容器相关的API,来操纵namespace,cgroups,appamor,网络设备及防火墙策略等。
docker container, Docker架构中服务交付的最终体现形式。
Docker按照用户的需求与指令,订制相应的Docker容器:

  • 用户通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统;
  • 用户通过指定计算资源的配额,使得Docker容器使用指定的计算资源;
  • 用户通过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境;
  • 用户通过指定运行的命令,使得Docker容器执行指定的工作。

本文主要涉及的就是 docker client相关命令

docker client,就是docker客户端,你可以在docker clent执行docker命令,比如docker run、docker pull等。docker client会解析命令并收集完参数后发一个http请求包docker daemon

docker追加容器自动重启命令

docker container update --restart=always 容器名字;

#--------------------------------docker常用命令---------------------
# docker重启所有容器
docker restart $(docker ps -a -q)

# docker中 启动所有的容器命令
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

# docker中   停止 关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
#---------------------常用查看
docker info #查看宿主机整体容器情况
docker images
docker ps -a
docker ps -a --no-trunc # 查看容器完整COMMAND命令
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Ports}}"   # 查看存活 容器 镜像 名称 开放端口  实用!赞!
docker logs -f 容器id #查看容器日志
docker inspect 容器ID | grep -A 10 Cmd # 查看容器详情 过滤Cmd关键字后十行  -B前十行 -C前后十行
#---------------------删除容器
#1、删除所有容器
docker rm `docker ps -a -q`
#2、删除所有镜像
docker rmi `docker images -q`
#3、按条件删除镜像
#删除所有没有打标签的镜像
# docker rmi "docker images -q | awk '/^<none>/ { print $3 }'" # 这个命令有问题
docker images|grep none|awk '{print $3}'|xargs docker rmi   # 推荐
#镜像名包含关键字
docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    #其中doss-api为关键字

#---------------------进入容器
docker attach id  
docker exec -it 775c7c9ee1e1 /bin/bash

#---------------进入grafana 运行中容器 推荐使用
docker exec -it id bash
docker exec -u root -it grafana sh 用root权限进入容器内部

#-------------docker目录映射 ubuntu是 image名称 也可以是image的id
docker run -it -v /root/docker_file:/root ubuntu
docker start -it -v /root/docker_file:/var/lib/ ddc2cc5c1edc

#--------------var/lib/ 打包运行中的容器  
docker commit id foo/liveubuntu16
# -a 提交者name  -m 镜像名称 在运行容器id 镜像id
# 扩展 -p :在commit时,将容器暂停。-c :使用Dockerfile指令来创建镜像;
docker commit -a "myname" -m "ubuntu20-py3.8-ping-svn" a941d30c56bc  ubuntu20:v2 
#docker export需要指定container,不能像docker save那样指定image或container都可以。
docker export d64dbf8193bb > ubuntu20_0714.tar
docker save d64dbf8193bb > ubuntu20_0714.tar

#----------------------保存本地镜像为.tar 并拷贝其他主机导入docker images
docker save -o  golang_0724.tar  golang:alpine3.7 # 把我本机的golang:alpine3.7 镜像保存为当前目录下的归档文件my-golang-alpine3.7.tar ,然后把此归纳文件拷贝到任意你想要的地方(比如 u盘 移动硬盘 电脑等)
sudo docker load < golang_0724.tar   # 在需要还原docker image的主机执行:(宿主机必须装有docker)
# 提示 Loaded image: golang:alpine3.7 表示加载成功,我们就可以级继续使用这个docker 镜像啦
# 备注: 在save docker镜像的时候可以将多个images保存为一个归档文件 ,
# 导出时候也就可以从一个归档文件里面导出多个

#-------------- 启动docker 
# 后台运行 参数“-d” 容器并且开启端口映射   加上 /bin/bash貌似无法启动
docker run -d -p 8000:8000 foo/liveubuntu16 /bin/bash

# 交互式运行 并制定端口映射
docker run -it -p 8000:8000 foo/liveubuntu16 /bin/bash

#交互式运行 创建文件夹  并制定端口映射
docker run -it  -v /root/docker_file:/root -p 8000:8000 foo/liveubuntu16 /bin/bash
#ubuntu的话 改成home/用户家目录目录
docker run -it  -v /home/byzoro/docker_file:/root -p 8000:8000 foo/liveubuntu16 /bin/bash
docke rename 容器id new_name


# ---------------- 例子grafana 使用docker启动 -p 指定端口   -v 指定存储 
#参考链接:https://grafana.com/docs/grafana/latest/installation/docker/

#  安装最新版本grafana 和 几个常用插件  zabbix   

grafana-cli plugins install alexanderzobnin-zabbix-app
docker run -d \
-p 3000:3000 \
--name=grafana \
-e "GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app, grafana-clock-panel,grafana-simple-json-datasource" \
grafana/grafana


#  指定版本  grafana/grafana:<version>  并安装插件   使用宿主机端口3001 


docker run -d \
-p 3001:3000 \
--name=grafana6.7.2 \
-e "GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app, grafana-clock-panel,grafana-simple-json-datasource" \
grafana/grafana:6.7.2



# 创建docker存储  create a persistent volume for your data in /var/lib/grafana (database and plugins)
docker volume create grafana-storage

#设置garafa存储 用于grafa重启使用

docker run -it -p 3000:3000 --name=grafana0728 -v grafana-storage:/var/lib/grafana -e "GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app,  grafana-clock-panel,grafana-simple-json-datasource" grafana/grafana


# docker启动 grafana并且安装插件

# 参考网址:https://grafana.com/docs/grafana/latest/installation/docker/   也可以多行命令  样例  未指定版本和存储

docker run -d \
-p 3000:3000 \
--name=grafana \
-e "GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app, grafana-clock-panel,grafana-simple-json-datasource" \
grafana/grafana


# docker目录迁移
https://blog.csdn.net/yuezhilangniao/article/details/117336306

# 清理容器空间 https://blog.csdn.net/qq_39399966/article/details/105816374
du -hs /var/lib/docker/
du -hs /var/lib/docker/containers/
cd /var/lib/docker/containers/
du -sh * | sort -n
touch 8e02447316a5af8da06dd3544c0d0f973a4514f83030e0a5196516ddbba96db4-json.log
clera
docker ps
curl -I 10.69.80.89:9910
df -hT |grep root
ls
# 切记不要用rm -rf  容器日志文件会丢失  而且删不出空间来。。。
truncate -s 0 8e02447316a5af8da06dd3544c0d0f973a4514f83030e0a5196516ddbba96db4-json.log
ls
cd ..
ls
du -sh *
du -sh * |grep root
df -hT |grep root
cd 4
cd 429cbdfcb3f4436c7a616f0d81a02a9402515fb30250914adb52f3a5218945b8
ls
# 切记不要用rm -rf  容器日志文件会丢失  而且删不出空间来。。。
truncate -s 0 429cbdfcb3f4436c7a616f0d81a02a9402515fb30250914adb52f3a5218945b8-json.log




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值