lqshow / notes

Cheat Sheet
10 stars 2 forks source link

Docker command #6

Open lqshow opened 6 years ago

lqshow commented 6 years ago

基本命令

查看客户端所有命令

docker

查看docker版本

docker version

显示docker系统信息

docker info

登录registry server

docker login

查看 Docker 磁盘使用情况

# 查看占用分布
docker system df

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

清理 Docker 空间

# 清除所有未被使用的镜像和悬空镜像
docker system prune -a

# 强制删除
docker system prune -f

# 删除悬空的镜像
docker image prune

# 删除无用的容器
docker container prune

容器部分

创建容器

检查本地是否存在centos镜像,不存在,链接官方,自动下载带本地宿机 容器名是随机的 如果不指定一个镜像的版本标签,例如你只使用centos,Docker将默认使用centos:latest镜像 容器的命名必须是唯一的

创建随机名容器,并运行centos的终端

# -it表示前端运行

docker run -it centos /bin/bash

创建一个名为test的容器:

docker run —-name test -it ubuntu /bin/bash

后端运行并映射80端口

docker run -dt -p 80:80 --name app_port basebit/xdp-sdk-jre8

自动重启容器

docker run --restart=always --name test

设置环境变量

docker run --rm -it --name test \
--env MYHOME=/home \
--env TEST=/home \
--env PATH=$PATH:/home \
centos bash

Comand Options

options desc
-i 保证容器中的STDIN是开启的
-t 为要创建的容器分配一个伪tty终端
-d/--detach 后台运行容器,并返回容器ID
--name 指定容器名称
-e 设置环境变量
--link 链接到另外一个容器
--rm 当容器退出时自动删除它
-v/--volume 挂载数据卷(映射的卷),可以使用多次,即挂载多个数据卷
--restart 重启策略( unless-stopped|always)
-p/--publish 控制Docker在运行时应该公开哪些网络端口给外部(宿主机)
-P 对外公开在Dockerfile中的EXPOSE指令中设置的所有端口
--hostname 设置容器host

查看容器

列出正在运行的容器

docker ps

列出全部容器

docker ps -a

最后一次运行的容器

docker ps -l

获取容器元数据

docker inspect CONTAINER
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' CONTAINER

查看容器进程

docker top CONTAINER

查容器的端口映射

docker port CONTAINER

查看容器日志

docker logs CONTAINER

# 跟踪日志输出, 效果类似于tail -f
docker logs -f CONTAINER

# 获取日志最后10行
docker logs --tail 10 CONTAINER 

# 获取最新日志
docker logs -ft --tail 0 CONTAINER

# 匹配日志
docker logs CONTAINER 2>&1| grep "ERROR"

导出容器快照到本地镜像

docker export CONTAINER > XOS.tar

导入容器快照为镜像

# 本地容器
cat XOS.tar | docker import - lqshow/test:v1.0

# 网络容器
docker import http://example.com/exampleimage.tgz lqshow/test:v2.0

从容器里拷贝文件到本地

docker cp a136a050da25:/home/file.txt ./

从本地拷贝文件到容器里

docker cp Dockerfile xdp-workspace-api:/data/project/service/logs/workspace/

容器重名

docker rename CONTAINER NEW_NAME

停止、启动、杀死、重启一个容器

docker stop CONTAINER
docker start CONTAINER
docker kill CONTAINER
docker restart CONTAINER

删除容器

运行中的容器是不能删除的,必须先stop或者kill

删除单个容器

docker stop CONTAINER && docker rm CONTAINER

删除所有容器

docker rm 'docker ps -a -q'

删除所有退出的容器

docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')

进入容器

附加到一个运行的容器上面(前提是此Container已经运行中)

命令输完后,需按下回车才能进入该会话 退出容器(不关闭容器):Ctrl+P+Q 退出容器(关闭):exit

docker attach CONTAINER

运行交互式的容器

# 在容器中打开交互式任务
docker exec -it a136a050da25 /bin/bash

# 以root权限进入容器
docker exec -it -u root docker-jenkins /bin/bash

在运行的容器中执行命令

在容器内创建空文件

docker exec -d a136a050da25 touch /home/new_file

查看环境变量

docker exec -it 7984cfc7d174 env

查看host文件

docker exec -it 7984cfc7d174 cat /etc/hosts

镜像部分

结构

仓库名/镜像名:标签 如果没指定任何标签,Docker自动为镜像设置一个latest标签

列出所有镜像

docker images

查找现有镜像(来源:Docker hub公共的可用镜像)

docker search image_name

下载镜像

docker pull image_name
docker pull docker-reg.basebit.me:5000/basebit/xdp-sdk-jre8

重命名镜像

docker tag image_name new_image_name

删除镜像

删除一个镜像

docker rmi image_name

删除多个镜像

docker rmi image_name image_name2

删除所有镜像

docker rmi `docker images -a -q`

删除none镜像

# 停止容器 
docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')

# 删除容器 
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')

# 删除镜像
docker rmi $(docker images | grep "none" | awk '{print $3}') 

获取镜像的创建历史

docker history image_name

发布镜像到Docker Hub

docker push lqsow/static_web

批量删除repository ,tag 为none 的镜像

docker images |grep none|awk '{print $3}'|xargs docker rmi

保存(导出)镜像

docker save <image_id>  > <image_name>.tar

加载(导入)镜像

docker load < img_java.tar

Reference