Docker 容器的操作
- 1 新建并运行容器
- 1.1 创建容器
- 1.2 新建并运行容器
- 2 查看运行的容器
- 3 查看容器日志
- 4 进入容器的内部
- 4.1 attach
- 4.2 exec
- 5 删除容器
- 6 导入和导出容器
1 新建并运行容器
1.1 创建容器
docker create -it ubuntu:latest
# 使用如上命令新建的容器处于停止状态,可以使用如下命令启动它
docker start [CONTAINER ID]
1.2 新建并运行容器
# docker run
# 有两种:第一种:基于镜像新建一个容器并启动,第二种是处于终止状态【stop】的容器重新启动
当利用docker run来创建并启动容器时,Docker 在后台运行的标准操作包括:
1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
2. 利用镜像创建并启动一个容器。
3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
5. 从地址池配置一个IP地址给容器。
6. 执行用户指定的应用程序。
7. 执行完毕后容器被终止。
----------------------------
# 启动一个bash终端,允许用户进行交互
docker run -it ubuntu /bin/bash
-t 分配一个伪终端
-i 让容器的标准输入保持打开
----------------------------
# 运行容器需要定制具体镜像,如果镜像不存在,会直接下载
docker run -d -p 宿主机端口:容器端口 --name [CONTAINER NAMES] [IMAGE ID] | REPOSITORY[:tag]
#-d 代表后台运行容器
#-p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
#--name 容器名称:指定容器的名称【唯一】 如果不指定,则随机名称
# [IMAGE ID] | REPOSITORY[:tag] 镜像的标识或者镜像名称[:tag],二选一
例如:
docker run -d -p 8081:8080 --name tomcat b8dfe9ade316
2 查看运行的容器
查看全部正在运行的容器信息
docker ps [-qa]
#-a 查看全部的容器,包括没有运行
#-q 只查看容器的标识
例如:
docker ps -a # 查看所有容器
docker ps -qa # 仅仅是查看所有容器的ID
# 重点: docker ps -af
# 文档:https://docs.docker.com/engine/reference/commandline/ps/#filtering
docker ps -qa -f ancestor=nginx:1.9.5 # 过滤"nginx:1.9.5"镜像的所有容器ID
3 查看容器日志
# 查看容器日志,以查看容器运行的信息
docker logs -f 容器id
#-f:可以滚动查看日志的最后几行
例如:
docker logs -f 38e2b4b8d0cf
4 进入容器的内部
4.1 attach
# 多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示
# 当窗口因命令阻塞时,其他窗口也无法执行操作
docker attach [NAMES] | [CONTAINER ID]
docker attach 7ffa27b9b43c
docker attach sweet_wing
# 连接后就能显示容器中用 ENTRYPOINT/CMD 启动进程的输出内容内容,终止,容器也会停止的,需注意
# 正常退出但不关闭容器,请按 Ctrl+P+Q进行退出容器
4.2 exec
docker exec -it [CONTAINER ID] | [容器名字] /bin/bash
# 如果不是/bin/bash,那么需要查找bash在哪里了:docker exec 38e2b4b8d0cf ls -l /
例如:
docker exec -it 38e2b4b8d0cf /bin/bash
5 删除容器
docker rm [CONTAINER ID] | NAMES
docker rm $(docker ps -qa -f ancestor=nginx:1.9.5) # 删除以"nginx:1.9.5"镜像ID的所有容器
# 删除前要停止容器【docker stop 容器id | 容器名字】
docker stop $(docker ps -qa) # 停止所有容器
docker rm $(docker ps -qa) # 删除全部容器
6 导入和导出容器
# 导出容器
docker export [CONTAINER ID] | [NAMES]
# 查看容器
docker ps -a
docker export b3ed34636ee5 > test_run.tar
# 导入容器,成为镜像
docker import - [REPOSITORY]:TAG
cat test_run.tar | docker import - test/ubuntu:v1.0
实际上,
既可以使用docker load 命令来导人镜像存储文件到本地的镜像库,
又可以使用docker import命令来导入一个容器快照到本地镜像库。
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),
而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导人时可以重新指定标签等元数据信息。