-
启动一个容器:
docker run alpine /bin/echo "Hello Docker"
image.png
- 运行结束,容器终止 STATUS : Exited
- docker会自动生成一个名字,这个例子中是:ecstatic_euclid
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公共仓库下载;
- 利用镜像创建并启动一个容器;
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
- 从地址池配置一个ip地址给容器;
- 执行用户指定的应用程序;
- 执行完毕后容器被终止。
我们再来看一个例子:
docker run --name myalpine -it alpine /bin/sh
docker 以镜像alpine为模板启动了一个容器, 我们将容器命名为myalpine, 在启动之后并进入容器使用/bin/sh作为命令解释器.这个时候哦我们可以执行一些常见的命令
-
让容器在后台(守护进程方式)运行
docker run -d --name myalpine alpine /bin/sh
但是我们发现状态是exited, 容器启动后就会在后台运行,然后返回一个容器ID到控制台,而且上面这个容器也终止了
我们看参数的详细解释:
Name, shorthand | Description |
---|---|
--interactive , -i | Keep STDIN open even if not attached |
--tty , -t | Allocate a pseudo-TTY |
--detach , -d | Run container in background and print container ID |
再尝试一个例子:
docker run --name alpine -d alpine /bin/sh -c "while true; do echo $((i++)); sleep 1;done"
当我们attach进去之后
image.png
至于这里为什么只显示5 ,或者你可能显示得是其他得数字, 这里以后细细研究
-
从容器中退出
image.png
exit
ORctrl+c
-
启动已终止的容器
image.png
docker start myalpine
-
进入在后台运行的容器
image.png
docker attach myalpine
或者: nsenter (包含在 util-linux中)
yum install util-linux
我们使用一个脚本来进入容器
vim docker_in.sh
#! /bin/bash
# Use nsenter to access docker container
docker_in(){
NAME_ID=$1
PID=$(docker inspect --format "{{ .State.Pid}}" $NAME_ID)
nsenter --target $PID --mount --uts --ipc --net --pid /bin/sh
}
docker_in $1
执行 :
chmod +x ./docker_in.sh
./docker_in.sh myalpine
但是发现通过nsenter进入的容器环境有很多不一样的地方,比如ls不能使用, 文件环境不一样, 这里回头再更新改进...........
-
不进入容器让容器执行命令
docker exec alpine whoami
image.png
同时, 使用exec还可以进入容器
docker exec -it alpine /bin/sh
网友评论