前端学习Docker(三) - 容器

容器

  • docker run 命令会从 image 文件,生成一个正在运行的容器实例。
  • docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取
  • 输出提示以后,hello world 就会停止运行,容器自动终止。
  • 有些容器不会自动终止
  • image 文件生成的容器实例,本身也是一个文件,称为容器文件
  • 容器生成,就会同时存在两个文件: image 文件和容器文件
  • 关闭容器并不会删除容器文件,只是容器停止运行

命令

命令 含义 案例
run 从镜像运行一个容器 docker run ubuntu /bin/echo ‘hello-world’
ls 列出容器 docker container ls
inspect 显示一个或多个容器详细信息 docker inspect
attach 要 attach 上去的容器必须正在运行,可以同时连接上同一个 container 来共享屏幕 docker attach [OPTIONS] CONTAINER
stats 显示容器资源使用统计 docker container stats
top 显示一个容器运行的进程 docker container top
update 更新一个或多个容器配置
port 列出指定的容器的端口映射 docker run -d -p 8080:80 nginx docker container port containerID
ps 查看当前运行的容器 docker ps -a -l
kill [containerId] 终止容器(发送 SIGKILL ) docker kill [containerId]
rm [containerId] 删除容器 docker rm [containerId]
start [containerId] 启动已经生成、已经停止运行的容器文件 docker start [containerId]
stop [containerId] 终止容器运行 (发送 SIGTERM ) docker stop [containerId] docker container stop $(docker container ps -aq)
logs [containerId] 查看 docker 容器的输出 docker logs [containerId]
exec [containerId] 进入一个正在运行的 docker 容器执行命令 docker container exec -it f6a53629488b /bin/bash
cp [containerId] 从正在运行的 Docker 容器里面,将文件拷贝到本机 docker container cp f6a53629488b:/root/root.txt .
commit [containerId] 根据一个现有容器创建一个新的镜像 docker commit -a “zhufeng” -m “mynginx” a404c6c174a2 mynginx:v1
  • docker 容器的主线程(dockfile 中 CMD 执行的命令)结束,容器会退出
    • 以使用交互式启动 docker run -i [CONTAINER_NAME or CONTAINER_ID]
    • tty 选项 docker run -dit [CONTAINER_NAME or CONTAINER_ID]
    • 守护态(Daemonized)形式运行 docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

启动容器

docker run ubuntu /bin/echo "Hello world"
docker run ubuntu /bin/echo "Hello world"
  • docker: Docker 的二进制执行文件。
  • run:与前面的 docker 组合来运行一个容器。
  • ubuntu 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令

Docker 以 ubuntu 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果

  • Docker attach 必须是登陆到一个已经运行的容器里。需要注意的是如果从这个容器中 exit 退出的话,就会导致容器停止

| 参数 | 含义 | | :----------------- | :----------------- | -------------------------------------------------------------------------------------------------------- | | -i --interactive | 交互式 | | -t --tty | 分配一个伪终端 | | -d --detach | 运行容器到后台 | | -a --attach list | 附加到运行的容器 | | -e --env list | 设置环境变量 | docker run -d -p 1010:80 -e username=“zhufeng” nginx \ docker container exec -it 3695dc5b9c2d /bin/bash | | -p --publish list | 发布容器端口到主机 | | -P | --publish-all |

查看容器

docker ps
docker -a
docker -l
docker ps
docker -a
docker -l
  • -a 显示所有的容器,包括已停止的
  • -l 显示最新的那个容器
字段 含义
CONTAINER ID 容器 ID
IMAGE 使用的镜像
COMMAND 使用的命令
CREATED 创建时间
STATUS 状态
PORTS 端口号
NAMES 自动分配的名称

运行交互式的容器

docker run -i -t ubuntu /bin/bash
exit
docker run -i -t ubuntu /bin/bash
exit
  • -t=–interactive 在新容器内指定一个伪终端或终端。
  • -i=–tty 允许你对容器内的标准输入 (STDIN) 进行交互。

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

后台运行容器

docker run --detach centos ping www.baidu.com
docker ps
docker logs --follow ad04d9acde94
docker stop ad04d9acde94
docker run --detach centos ping www.baidu.com
docker ps
docker logs --follow ad04d9acde94
docker stop ad04d9acde94

kill

docker kill 5a5c3a760f61
docker kill 5a5c3a760f61

kill 是不管容器同不同意,直接执行kill \-9,强行终止;stop 的话,首先给容器发送一个TERM信号,让容器做一些退出前必须的保护性、安全性操作,然后让容器自动停止运行,如果在一段时间内,容器还是没有停止,再进行 kill -9,强行终止

删除容器

  • docker rm 删除容器
  • docker rmi 删除镜像
  • docker rm $(docker ps -a -q)
docker rm 5a5c3a760f61
docker rm 5a5c3a760f61

启动容器

docker start [containerId]
docker start [containerId]

停止容器

docker stop [containerId]
docker stop [containerId]

进入一个容器

docker attach [containerID]
docker attach [containerID]

进入一个正在运行中的容器

docker container -exec -it [containerID] /bin/bash
docker container -exec -it [containerID] /bin/bash

拷贝文件

docker container cp [containerID]/readme.md .
docker container cp [containerID]/readme.md .

自动删除

docker run --rm ubuntu /bin/bash
docker run --rm ubuntu /bin/bash

stats

  • 显示容器资源使用统计
docker container stats
docker container stats

top

  • 显示一个容器运行的进程
docker container top
docker container top

update

  • 更新一个或多个容器配置
docker update -m 500m  6d1a25f95132
docker update -m 500m  6d1a25f95132

port

  • 列出指定的容器的端口映射
docker run -d -p 8080:80 nginx
docker container port containerID
docker run -d -p 8080:80 nginx
docker container port containerID

logs

  • 查看 docker 容器的输出
    docker logs [containerId]
    
    docker logs [containerId]