#查看下载到本地的所有镜像
docker images
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像,经过md5方式加密过;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

docker info
#可以用该命令统计每一个状态的容器有多少个

docker version
docker -v

docker --help
默认是在公共仓库(Docker Hub)找,如果有私有仓库,会在私有仓库找
#格式:docker search 关键字
#示例:
docker search nginx
docker search centos:7
——》同时我们也可以自己制作镜像推送到docker hub上
参数说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。 AUTOMATED: 自动构建。

#格式:docker pull 仓库名称[:标签]
docker pull centos:7
docker pull nginx #如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为latest 标签。
docker images

#格式:docker inspect 镜像ID
docker insect 605c77e624dd #查看nginx镜像信息
#格式:docker inspect 仓库名称[:标签]
docker inspect nginx:latest
#格式:docker tag 名称:[旧标签] 新名称:[新标签]
docker tag centos:7 centos:7.1 #给centos打上标签7.1,原来的标签是7

docker rmi是docker rm image的简写
#格式:
docker rmi 仓库名称:标签
#当一个镜像有多个标签时,只是删除其中指定的标签
docker rmi 镜像ID号 #会彻底删除该镜像

#加载所有镜像id
docker images -q
#批量删除所有镜像
docker rmi `docker images -q`
#批量删除nginx镜像
docker rmi `docker images|grep "nginx"`
#格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
scp nginx 192.168.74.129:/opt #将导出的镜像以scp方式导到别的服务器上

#导入镜像,可以异地导入,但是必须要有docker引擎,并且版本不可以差太多
#格式:docker load < 存出的文件
docker load < nginx
docker load -i nginx

默认上传到docker Hub官方公共//仓库,需要注册使用公共仓库(hub.docker.com)的账号。使用docker login命令来输入用户名、密码和邮箱来完成注册和登录。在上传镜像之前,还需要先对木地镜像添加新的标签,然后再使用docker push命令进行上传。
docker tag nginx:latest xjwhh/nginx:web
#在前面加上自己的dockerhub的username
docker login
#登录公共仓库
Username:xjwhh
password:abc123456
docker push xjwhh/nginx:web #上传镜像


docker ps -a
| 选项 | 含义 |
|---|---|
| -a | 显示所有的容器,包括未运行的 |
| -q | 静默模式,只显示容器编号 |
| -f | 根据条件过滤显示的内容 |
| -l | 显示最近创建的容器 |
| -n | 列出最近创建的n个容器 |
| -s | 显示总的文件大小 |
| –format | 指定返回值的模板文件 |
| –no-trunc | 不截断输出 |

容器创建:就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
#格式:docker create [选项] 镜像
docker create -it centos:7 /bin/bash
| 选项 | 含义 |
|---|---|
| -i | 让容器的输入保持打开 |
| -t | 让 Docker 分配一个伪终端 |
| -d | 后台守护进程的方式运行 |
| -it | 合起来实现和容器交互的作用,运行一个交互式会话shell |
#格式:docker start 容器的ID/名称
docker start d29e9539db8c
docker ps -a

当利用docker run来创建容器时,Docker在后台的标准运行过程是:
(1)检查体地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载:
(2)利用镜像创建并启动一个容器:
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中:
(5)分配一个地址池中的IP地址e给容器:
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。
#加-d选项让Docker容器以守护形式在后台运行。并且容器所运行的程序不能结束。
#创建容器并持续运行容器
docker run -itd nginx:latest /bin/bash

#执行后退出
docker run centos:7 /usr/local/bash -c ls /
#在后台持续运行docker run创建的容器

#执行后不退出,以守护进程方式执行持续性任务
docker run -d centos:7 /usr/local/bash -c "while true;do echo hello;done" #需要在docker run命令之后添加-d选项让Docker容器以守护形式在后台运行。并且容器所运行的程序不能结束。
创建并启动容器:可以直接执行docker run命令,等同于先执行docker create命令,再执行docker start命令。
注意:容器是一个与其中运行的shell命令共存亡的终端,命令运行容器运行,命令结束容器退出。docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker容器中pid=1的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器己经挂掉。
docker run -d --name test1 -P nginx
#随机映射端口(从32768开始)
docker run -d --name test2 -p 43000:80 nginx
#指定映射端口
#docker容器运行时自启动
docker run--restart=always容器名称或容器ID
#docker容器运行后设置自启动
docker update-restart=always容器名称或容器ID
#格式:docker inspect 容器id
docker ps -a #先查看运行时容器的id
docker inspect ba8d61d35e32
格式:docker stop 容器的ID/名称
docker stop 2592d3fadofb
docker ps -a3
进入容器的容器状态必须是up状态
#需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
#格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
#进入(三种方式)
docker run -itd centos:7 /bin/bash #先运行容器
docker ps -a
#使用run进入,可以使用ctrl+d退出,直接退出终端
docker run -it centos:7 /bin/bash

#想永久性进入,退出后还是运行状态,用docker exec
docker ps -a
docker exec -it b99e0771c4e1 /bin/bash
docker attach,会通过连接stdin,连接到容器内输入输出流,公在输入exit后终止容器进程(临时性的,不推荐)

面试
1、linux怎么复制
cp 原文件路径 目标文件路径
docker cp 1 opt / abc容器id: /opt/abc
复制到容器中
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fadofb:/opt/
#从容器复制文件到主机
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
#导出格式:docker export 容器ID/名称 > 文件名
docker export 4cb5efdf6351 > centos_7

docker import centos_7 centos:7_v1 #导入后会生成镜像,但不会创建容器

#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos_7 |docker import - centos:v2

#格式:docker rm [-f] 容器ID/名称
#不能删除运行状态的容器,只能-f强制删除,强制删除正在运行的容器;或者先停止再删除。
docker rm -f 4cb5efdf6351

#已经退出的容器,可以直接删除
docker rm 0a7f3031647c

#删除所有运行状态的容器
docker rm -f `docker ps -q`
#删除所有容器
docker rm -f `docker ps -aq`
#有选择性的批量删除 (正则匹配)
docker ps -a | awk 'NR>=2 {print "docker rm -f "$1}' |bash

#批量清理后台停止的容器
docker rm $(docker ps -a -q)

docker stats
docker logs 容器的ID/名称
1.设置docker日志文件数量及每个日志大小
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
修改完需要重新加载
systemctl daemon-reload
#systemctl restart docker
docker容器日志导致主机磁盘空间满了。
docker logs -f container_name很占用空间,不用的日志可以清理掉了。
2.查找容器日志
在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/下面, 以json.log结尾的文件(业务日志)很大,查看各个日志文件大小的脚本docker_log_size.sh,内容如下:
!/bin/sh
echo "===docker containers logs file size==="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
chmod +x docker_log_size.sh
./docker_log_size.sh
3. 清理Docker容器日志(治标)
如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。接下来,提供一个日志清理脚本clean_docker_log.sh,内容如下:
#!/bin/sh
echo "===start clean docker containers logs==="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "===end clean docker containers logs==="
chmod +x clean_docker_log.sh
./clean_docker_log.sh
也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。接下来,提供一个日志清理脚本clean_docker_log.sh,内容如下:
#!/bin/sh
echo “=start clean docker containers logs=”
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo “clean logs : $log”
cat /dev/null > $log
done
echo “=end clean docker containers logs=”
chmod +x clean_docker_log.sh
./clean_docker_log.sh