docker 常用命令

安装

apt update && apt install docker.io
  • 更换国内镜像源
    • 配置文件地址:/etc/docker/daemon.json
# vim /etc/docker/daemon.json 
{ 	
 	"registry-mirrors": [
	    "https://docker.mirrors.ustc.edu.cn",
	    "http://hub-mirror.c.163.com",
	    "https://registry.docker-cn.com"
  ]
}
# systemctl restart docker.service

容器管理命令

docker run

  • 格式docker run [参数] 镜像 [命令] [参数]

    • 返回值是容器的ID
  • 参数

    • -d : 后台运行容器
    • -i : 以交互模式运行容器
      • 一般-it连用
    • -t: 提供伪终端
      • 如果容器的默认命令是bash,则以-d后台运行容器会立刻执行完退出
      • 通过-itd参数避免一启动就退出
    • -e k=v : 设置环境变量
    • --rm : 退出容器时自动删除
    • --read-only : 容器内的文件只读
      • 应该配合--link(连接外部数据库)或者-v(创建数据卷)使用
    • 重启
      • --restart=always : 自动重启
      • --restart=on-failure:5 : 返回非零错误码时重启,最多重启5次
    • 数据卷
      • -v :<容器路径> : 自动挂载宿主机目录到容器指定目录
        • 通过docker inspect <ID>查找宿主机目录路径
      • -v <宿主机路径>:<容器路径>[:ro] : 挂载指定宿主机目录或文件到容器指定目录或文件
        • 宿主机路径和容器路径都必须是绝对路径
        • 可以通过:ro后缀设置只读挂载, 默认可读可写
        • 例子:
          • 挂载当前路径/root/1.txt文件到容器/wwt目录: -v /root/1.txt:/wwt/1.txt
            • /wwt目录不存在会自动创建
          • 只读挂载/root/wwt目录到容器/data目录:-v /root/wwt:/data:ro
            • 此时/data目录中的内容与 /root/wwt内的内容一致
      • -v <数据卷名字>:<容器路径>:挂载docker volume create创建的命名数据卷
      • --volumes-from=<容器名>: 共享该容器挂载的数据卷
        • 可以创建一个数据卷容器,让多个容器共享一个数据卷
    • 网络
      • -P: Dockerfile中expose的端口会随机映射到主机端口
      • -p <宿主端口>:<容器端口>: 指定端口映射
      • --link <要连接的容器名>:<在本容器内的别名>: 链接容器网络
        • 别名相当于连接容器的域名
        • 此时应该使用待连接容器的原端口,而不是映射到宿主机的端口
        • 更推荐使用私有网络模式代替link
      • --net <网络模式>: 设定容器网络模式
        • 如none,bridge(默认),host等
      • --dns <ip地址> : 指定dns
      • --icc=false : 关闭容器间的网络通信
        • 通过iptables实现
      • --network <name>加入私有网络
      • --network-alias 修改容器在私有网络中的名字
        • 该名字用于私有网络的DNS解析
        • 由于容器不能充满所以不同网络中运行的第二个redis可能需要叫redis2,但是我们仍然希望让同一网络中的其他容器通过redis这个名字访问
    • 资源限制
      • --memory <size>: 限制内存
        • 例如256m, 2g
      • --cpu-shares <num>: 设定CPU相对使用权重,数字越大权重越大
        • 只有一个容器时--cpu-shares选项无意义
        • 默认值是1024
  • 例子

# 备份c1容器挂载的数据卷到当前宿主机目录
docker run --rm volumes-from c1 -v $(PWD):/backup ubuntu tar cvf /backup/data.tar /data
# 恢复数据到c2
docker run -d --name c2 -v /data ubuntu /bin/bash
docker run --rm -volumes-from c2 -v $(PWD):/backup ubuntu tar xvf /backup/data.tar -C /

# 加入私有网络
docker network create my-net
docker run -d --network my-net --name redis2 --network-alias redis redis:alpine
docker run -it --network my-net busybox ping redis

docker volume

# 查看储存卷
docker volume ls
# 查看volume详细信息,包括在宿主机的挂载点
docker volume inspect <name>
# 创建储存卷,默认自动分配名字
docker volume create <name>
# 连接储存卷
docker run -v <volume_name>:<path> 
# 删除储存卷
docker volume rm <name>
# 删除所有未使用数据卷
docker volume prune

docker network

# 显示所有容器网络
docker network ls
# 查看网络详细信息
docker network inspect <name>
# 创建私有容器网络
docker network create <name>
# 加入已经存在的私有容器网络
docker network connect <net> <container>
# 删除网络
docker network rm <name>
# 删除所有未使用网络
docker network prune

docker ps

  • 参数
    • -a :显示所有容器,包括未运行的
    • -n :显示最近n个
    • -l #:显示最近创建的
    • -q :只显示ID
    • --no-trunc :不截断
    • -f "k=v" :按条件过滤
      • status: 容器状态
        • created, restarting, running, paused, exited, dead
      • volume: 挂载指定数据卷的运行中容器
      • network: 加入指定网络的运行中容器
      • beforesince:指定容器ID前、后创建的容器
      • expose: 暴露指定port的运行中容器
      • health: 容器健康状况
        • healthy, unhealthy, none
  • 例子
    • 监控容器数量: docker ps -aq | wc -l
      • 也可以用docker info
    • 列出已经停止的容器: docker ps -f "status=exited"

docker create

  • 创建一个容器但不启动
    • 通过docker start <name/ID>启动
  • 返回值是容器的ID
    • 在脚本中可以赋值给一个变量, 例如 CID=$(docker create nginx)

docker exec

需要容器处于运行状态

# 进入容器终端
docker exec -it <name/ID> /bin/bash
# 运行命令,不进入终端
docker exec <name/ID> ps

docker stop/kill

  • docker stop 给容器中的init进程发送SIGTERM信号
    • 只能暂停pid=1的进程,如果有多个进程,后面的进程无法被控制
  • docker kill 给容器中的init进程发送SIGKILL信号
    • -s参数指定发送的信号:docker kill -s SIGTRAP <name/ID>

docker rm/rmi

  • docker rm 删除容器,需要先停止容器
    • docker rm -f 强行删除
    • -v参数把容器引用的数据卷计数减1
  • docker rmi 删除镜像
    • 需要先删除所有使用的容器
# 删除所有容器
docker rm -vf $(docker ps -aq)
#删除停止的容器
docker rm -vf $(docker ps -f "status=exited" -q)
docker container prune

docker cp

在容器和宿主机间复制数据

docker cp <container>:<src_path> <dest_path>
docker cp <dest_path> <container>:<src_path>

容器信息获取命令

  • --no-trunc 获取完整输出信息,不截断

  • docker top <name/ID> : 获取容器中的进程信息

    • 默认情况下,该命令获取的CPU使用状况是宿主机的CPU状况而不是容器本身的
    • 因为top命令的数据源来自/proc, 而该目录没有被linux容器隔离
  • docker logs <name/ID> : 获取容器启动后的日志

    • -t 显示UTC时间
    • -f 实时输出
    • --since 按时间过滤
      • 例子: docker logs --since 2019-04-11T17:17 <name/ID>
    • --tail <num> 显示最后num条
  • docker port <name/ID>: 查看容器的端口映射

  • docker stats <name/ID>: 查看容器资源使用情况

    • 例如CPU,内存等
    • 默认为全部容器
  • docker history <image_name>:查看镜像的构造历史

镜像管理命令

docker pull

  • 从仓库拉取镜像,默认从docker hub
    • docker pull ubuntu:15.1 拉取ubuntu的15.1版本的镜像
    • 如果不指定tag(版本),则默认拉取最新版
  • 没有/前缀的为官方库
    • 一个前缀为用户/镜像
    • 两个前缀为私有仓库/用户/镜像

docker commit

  • 容器中创造新的镜像

    • 例子:我们可以打开一个新的ubuntu容器,然后在这个容器中安装git,然后我们可以以此创建一个含有git的ubuntu镜像
  • -a 提交的镜像作者

  • -m 提交时的说明文字

  • 例子:docker commit -m "ubuntu with git" -a "wwt" 72f1a8a0e394 wwt/ubuntu:git

    • 72f1a8a0e394是用来创建镜像的容器ID,也可以用容器名
    • wwt/centos:git 是新镜像的仓库名和tag

docker load/save

  • save命令把镜像保存到(压缩)文件
    • docker save -o myfile.tar mysql:latest
  • load命令从文件导入镜像
    • docker load -i myfile.tar
  • 上述保存和加载的都是镜像,不是容器

远程API

  • 默认情况下docker只接受本机请求,需要通过-H参数监听TCP请求
    • 采取RESTful API进行通信
  • 需要修改systemd运行参数
# 找到ExecStart行,修改成下边这样
# ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 
vim /lib/systemd/system/docker.service

# 重启docker后台
systemctl daemon-reload 
sudo service docker restart

常用命令列表

img

  attach      将标准输入和标准输出连接到正在运行的容器                                        
  build       使用dockerfile文件创建镜像                                                   	
  commit      从容器的修改项中创建新的镜像
  cp          在容器和宿主机间复制文件
  create      创建一个新的镜像
  diff        检查容器自从创建以来的更改
  events      实时输出docker服务器中发生的事件
  exec        从外部运行容器内部的命令
  export      将容器导出为tar文件包
  history     显示镜像的历史
  images      输出镜像列表
  import      从压缩为tar文件的文件系统中创建镜像
  info        显示当前系统信息、docker容器与镜像个数、设置信息等
  inspect     使用JSON格式显示容器与镜像的详细信息
  kill        向容器发送kill信号关闭容器
  load        从tar文件或标准输入中加载镜像
  login       登录docker注册服务器
  logout      退出docker注册服务器
  logs        输出容器日志信息
  pause       暂停容器中正在运行的所有进程
  port        查看容器的端口是否处于开放状态
  ps          输出容器列表
  pull        从注册服务器中拉取一个镜像或仓库
  push        将镜像推送到docker注册服务器
  rename      重命名一个容器
  restart     重启一个或多个容器
  rm          删除一个或多个容器,若没有指定标签则删除lastest标签。
  rmi         删除一个或多个镜像,若没有指定标签则删除lastest标签。                             
  run         在一个新容器中中运行命令,用于指定镜像创建容器。
  save        将一个或多个镜像保存为tar包             
  search      从Docker Hub中搜索镜像
  start       启动一个或多个已经停止的容器                                   
  stop        停止一个或多个正在运行的容器
  tag         设置镜像标签
  top         显示容器中正在运行的进程信息
  unpause     重启pause命令暂停的容器
  update      更新一个或多个容器的配置
  version     显示docker版本信息
  wait        等待容器终止然后输出退出码  

参考

docker命令
精通docker

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值