Docker 常用命令

嘉美伯爵

运维 Docker 258

Docker常用操作

  • Docker 删除 CONTAINER
docker stop $(docker ps -qa)
docker rm $(docker ps -qa)
  • Docker 删除 image

正在运行的不能删除,但可以强制删除

docker rmi --force $(docker images -q)
  • 删除名称中包含某个字符串的镜像
# 例如删除包含“some”的镜像
docker rmi --force $(docker images | grep some | awk '{print $3}')
  • 不进入镜像执行相关命令
docker exec -it tools /bin/bash -c ' cp -r tools/* ./ && rm -rf tools'
  • 容器重启
docker restart <id or name>
  • 删除所有none镜像
# 停止docker
docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')
# 删除docker
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')
# 删除images
docker rmi $(docker images | grep "none" | awk '{print $3}')
  • 持续查看log
--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
-f : 查看实时日志
-t : 查看日志产生的日期
-tail=10 : 查看最后的10条日志

docker logs -f -t --since="2017-05-31" --tail=10 blog
  • 查看容器

  • 查看镜像

  • 进入容器

  • 列出所有容器id
docker ps -aq
  • 停止所有容器
docker stop $(docker ps -aq)
  • 删除所有容器
docker rm $(docker ps -aq)
  • 删除所有镜像
docker rmi $(docker images -q)
  • 删除所有不使用的镜像(二选一)
docker image prune --force --all
docker image prune -f -a
  • 删除所有停止的容器
docker container prune
  • 复制文件
# 宿主机到容器的拷贝
docker cp mycontainer:/opt/file.txt /opt/local/docker cp /opt/local/file.txt mycontainer:/opt/
# 容器到宿主机的拷贝
docker cp  96f7f14e99ab:/www /tmp/
  • 重命名
docker rename <oldname> <newname>
  • bash: vi: command not found
apt-get update
apt-get install vim

镜像导入导出

  • save导出
 docker save -o nginx.tar nginx:latest 
  • load导入
docker load -i nginx.tar 
  • export导出
docker export -o mysql.tar mysql:5.7
  • import导入
docker import nginx-test.tar nginx:imp

Docker网络

docker有很多的网络形式,我们常用的时briage和host,关于host我们在启动nginx这样的容器的时候适合使用,因为nginx 外部指定server_name的使用必须要有80和443端口,这就要求docker网络必须和宿主机互通。

  • host
docker run --network=host
  • briage
docker run -p 8000:3000
  • 查看
# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2d8e2f53074e        bridge              bridge              local
b6fbe9aff4b3        host                host                local
8abe134180fe        none                null                local

Docker参数

  • -v

该参数将宿主机和容器文件做映射

  • --restart

该参数分为always、on-failure、no等,always确保每次重启docke该容器均可执行,on-failure尽在失败的时候执行

  • =e

该参数用于设置环境变量

  • -p

用于端口映射

  • -t

分配伪终端

  • -i

交互环境,与-t同时用

  • -d

后台运行

元数据

可以获取IP地址,MAC地址等信息

  • Docker inspect

状态修改

docker update命令,可以对容器的一些参数进行修改,具体包括cpu、内存、启动状态

docker update --restart always container

参数传递

# application.properties中
sea=${sea123}
# 启动的时候赋予
docker run -it  -p 9999:9999  -e 'sea=sea_test'  testproperties004

镜像加速

点击进入阿里云,进行相应设置即可

问题记录

  • docker run 与docker start的区别

docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可;docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

  • docker停止容器后,再次开启报错

Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen

# 重启docker服务后再启动容器
systemctl restart docker
  • 删除镜像报错

可能是容器未停止

docker stop 容器

可能存在关联依赖

docker rmi -f tomcat:7  # -f 强制删除
  • 查看log

  • Docker: Container keeps on restarting again on again

# 查看对于容器log即可
docker logs --tail 50 --follow --timestamps mediawiki_web_1
  • docker run 后退出

可能的原因是不是常驻进程,进程运行完就kill,容器内的进程需要保持一直运行

  • 异常容器
# 查看异常容器
docker ps -a
# 保护案发现场
docker commit <container_id> <new_container_name>
# 运行容器
docker run -it -d -p 8652:8652 --restart=always --name tools1 --link mysqldb:mb err:latest bash
# 提取数据
docker cp

docker 磁盘占用

建议指定 -v进行磁盘挂载,更多参考分析docker磁盘占用

# 查看磁盘主要被哪部分占用
docker system df
# 查看哪些 volume 占用高
docker system df -v

参考文档

Docker: Container keeps on restarting again on again

参考文档