ls帮助命令
docker version 查看版本
docker info 查看docker具体信息
docker --help 查看帮助命令
镜像命令
查看镜像
搜索镜像
docker search --no-trunc tomcat //--no-trunc是option
下载镜像
删除镜像
思考:commit和docker文件大小
- 关于push
对由镜像生成的实例容器进行自定义的修改以符合自身环境的需求,之后又把这个容器复刻为新的镜像,这就需要使用docker commit
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
- 为什么docker的tomcat镜像要远大于Windows版本下的Tomcat?为什么centos要远小于从官网下载的大小?
- 对于docker里的tomcat是一个容器,它不仅仅包含tomcat自身的文件,还有为其服务的下层:kernel,centos的roofs,jdk等。所以他的大小是容器层和镜像层之和。而对于Windows版本下的tomcat只需要负责tomcat自身的文件即可,为其服务的下层已经在本机下载好
- 对于docker里的centos,它所要下载的仅仅是kernel和rootfs。由于docker的共享机制,若之前镜像下载过kernel,则此次下载就只需要centos的roofs即可,且rootfs是关于centos的必要的文件,所以它的大小要小于官网下载的大小
例如:对于不同版本的mysql,比如mysql8.0,mysql5.5,mysql5.7他们的镜像层可以共享,需要下载加载的仅仅是容器层。当之前下载过mysql5.5的镜像后,再下载mysql5.7镜像就会很快,因为共享了镜像层,下载加载的仅仅是5.7版本的容器层
容器命令
创建容器
options
- -i 和 -t,启动交互式进程 ```bash
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个“伪输入终端”,通常与 -i 同时使用;
例如:docker run -i -t 5d0da3dc9764
可简写为: docker run -it 5d0da3dc9764(或镜像名) 此处没有指定容器名字
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636103004200-3f5d9d27-22df-4776-be7b-356b9bcf0dee.png#clientId=u46be3c6d-7b27-4&from=paste&height=184&id=u5166e37d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=367&originWidth=1343&originalType=binary&ratio=1&size=115420&status=done&style=none&taskId=u130e3314-7d2a-4f7b-97b3-23742833144&width=671.5)
2. --name给容器命名
- 用docker images 查看镜像ID和镜像名
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636103531114-a19d8a1b-cb5c-41b5-87e8-a311ff2a6607.png#clientId=u46be3c6d-7b27-4&from=paste&height=92&id=ubfa3a4af&margin=%5Bobject%20Object%5D&name=image.png&originHeight=184&originWidth=793&originalType=binary&ratio=1&size=32351&status=done&style=none&taskId=ubce9b280-2d08-4e84-b4b9-8ed4d2b3d92&width=396.5)
```bash
--name="容器新名字": 为容器指定一个名称;不分配则docker使用随机分配名
例如:
sudo docker run -it 5d0da3dc9764 //未容器命名,用镜像ID
sudo docker run -it centos //未容器命名,用镜像名
sudo docker run -it --name c2 centos //给容器命名,且用镜像名
sudo docker run -it --name c1 5d0da3dc9764 //给容器命名,且用镜像ID
如下图:
- 启动守护式容器 ```bash -d: 后台运行容器,并返回容器ID,也即启动守护式容器; 这与之前的-it是对立的
sudo docker run -it -d —name c1 centos //给容器命名,且指定镜像名
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636113764959-619df8db-f5db-4c4c-aee2-b042c0a90ae5.png#clientId=u46be3c6d-7b27-4&from=paste&id=ud3e8bebd&margin=%5Bobject%20Object%5D&name=image.png&originHeight=402&originWidth=1291&originalType=binary&ratio=1&size=356368&status=done&style=none&taskId=ubf488274-d1ab-46fa-8c87-6225cad24b6)
- 上面是守护式容器,下面介绍交互式容器
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636101857707-c8154d14-97ea-4123-9dc4-f9624a62b2c1.png#clientId=u46be3c6d-7b27-4&from=paste&id=Ve7g0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=273&originWidth=887&originalType=url&ratio=1&size=24836&status=done&style=none&taskId=u8aa05b96-5962-4665-84d1-827e09de8d2)
4. 指定端口号
```bash
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
- 使用-p 8888:8080 自定义端口对应 ```bash docker run -it -p 8888:8080 tomcat
启动tomcat后,ping www.localhost:8080,观察是否可以ping通
- 使用-P 分配随机端口
<a name="C3zOs"></a>
## ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636167629613-f2d7f1cd-c4fb-4828-863e-8a3cf5e71729.png#clientId=u2395b4fd-b935-4&from=paste&height=144&id=ir3IO&margin=%5Bobject%20Object%5D&name=image.png&originHeight=192&originWidth=507&originalType=binary&ratio=1&size=20684&status=done&style=none&taskId=u90513859-b83f-4fbb-bf0c-f136d13fe98&width=380)
---
<a name="owGRh"></a>
## 查看容器
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636102532927-85e61024-cfcc-4e5e-8909-a1fb42dc3ab8.png#clientId=u46be3c6d-7b27-4&from=paste&height=75&id=u0a0abead&margin=%5Bobject%20Object%5D&name=image.png&originHeight=149&originWidth=1407&originalType=binary&ratio=1&size=76181&status=done&style=none&taskId=u4fbafcab-1abd-46c8-b763-83cc8a687ae&width=703.5)
```bash
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
sudo docker ps -n 3 回看3条
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
退出容器
重新进入
1. docker exec -it 容器ID bashShell
2. 重新进入docker attach 容器ID
上述两个区别:
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
启动容器
docker start b012d5b5609b
或
docker start mycentos //根据容器名
//启动成功后返回容器ID或容器名
重启容器
docker restart b012d5b5609b
或
docker restart mycentos //根据容器名
//重启成功后返回容器ID或容器名
停止容器
docker stop b012d5b5609b
或
docker stop mycentos //根据容器名
//删除成功后返回容器ID或容器名
强制停止容器
docker kill b012d5b5609b
或
docker kill mycentos //根据容器名
//停止成功后返回容器ID或容器名
删除已停止容器
docker rm b012d5b5609b
或
docker rm mycentos //根据容器名
//停止成功后返回容器ID或容器名
rmi是删除镜像
docker rm -f b012d5b5609b f:force强制
- 使用内嵌语句进行多个容器删除
docker rm -f $(docker ps -a -q) 等价于 docker ps -a -q | xargs docker rm //把前面的结果作为参数xargs通过管道符放入后面语句
重要概念
守护式容器
查看容器日志
docker logs -f -t --tail 容器ID
* -t 是加入时间戳
* -f 跟随最新的日志打印
* --tail 数字 显示最后多少条
- 创建守护式容器,在后台启动,并写入输出语句:每隔两秒钟打印一句话
- 输入命令查看后台运行的容器的日志
查看容器内运行的进程
docker top 容器ID
查看容器内细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
1. docker exec -it 容器ID /bin/bash
2. 重新进入docker attach 容器ID
上述两个区别:
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程,exec可以不进入容器达到操作容器目的,如下图
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
总结
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container’s filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值