美文网首页
Docker 容器

Docker 容器

作者: _于曼丽_ | 来源:发表于2020-01-27 11:44 被阅读0次

介绍

镜像是文件系统,容器是运行于镜像文件系统上的一个或多个服务。

通过运行一个镜像来产生一个容器。容器启动的时候,如果通过 docker run IMAGE COMMAND 指定了命令,则执行该命令,否则会执行 Dockerfile 中的 CMD 指定的命令,这些命令是运行于镜像提供的文件系统上的。

镜像本身是只读的,保持不变。从镜像启动一个容器的时候,会在镜像的最上一层创建一个可写层。容器对于环境的写操作只会修改可写层,不会修改镜像,因此多个容器之间相互隔离。即便是基于同一个镜像创建多个容器,某个容器的写操作也只不会影响到其他容器。

容器之间也可以建立通信机制。

状态

使用 docker run 启动容器之后,该容器不一定一直处于 running 状态。容器启动的时候,如果通过 docker run IMAGE COMMAND 指定了命令,则执行该命令,否则会执行 Dockerfile 中的 CMD 指定的命令。如果这个命令很短暂,比如 echo hello,那么容器在执行完该命令之后状态就变为 exited。即便通过 docker startdocker restart 重启这个容器,再次执行完这个短暂的命令之后,容器的状态又变为 exited。如果 COMMAND 或 CMD 中指定了一些持久的命令,比如监听端口提供 web 服务,则容器启动之后会一直处于 running 状态。除非执行 docker stop 来停止容器,将容器的状态变为 exited。通过 docker inspect CONTAINER 可以查看容器的状态。

使用 docker create 命令创建容器,只创建容器,不启动容器,因此不会执行任何命令。创建容器之后,容器的状态为 created。通过 docker startdocker restart 命令来启动容器,这时才执行 COMMAND 或 CMD 命令,如果是短暂的命令,则容器执行完命令之后状态变为 exited,如果是持久的命令,则容器的状态会一直处于 running。

只能对处于 running 状态的容器使用 docker exec 命令,不管是 created 还是 exited 状态的容器都无法使用 docker exec 命令。

命令

docker create
docker run
docker exec
docker start
docker stop
docker restart
docker inspect
docker ps
docker rm
docker logs

docker create

使用 docker create 命令创建容器,只创建容器,不启动容器,因此不会执行任何命令。执行完 docker create 命令之后,容器的状态变为 created。使用 --name 参数可以为容器指定名字,如果不加该参数,则会为容器随机取名。

$ docker create --name web nginx
750e1ab6eb185e11f3f1d26eef74103a67e263dc94f9cb15279c5dd4c7c9be49

docker ps

使用 docker ps 命令查看 running 状态的容器,使用 docker ps -a 命令查看所有状态的容器。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
750e1ab6eb18        nginx               "nginx -g 'daemon of…"   19 seconds ago      Created                                 web

docker inspect

使用 docker inspect 命令可以查看容器的详细信息,也包括容器的状态。

$ docker inspect web

docker start

使用 docker start 命令启动容器,容器启动之后会执行 COMMAND 或 CMD 命令。执行完 docker start 命令之后,容器的状态可能为 running,也可能为 exited。

$ docker start web
web
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
750e1ab6eb18        nginx               "nginx -g 'daemon of…"   15 minutes ago      Up 2 seconds        80/tcp              web

docker restart

使用 docker restart 命令重启容器,容器重启之后会执行 COMMAND 或 CMD 命令。执行完 docker restart 命令之后,容器的状态可能为 running,也可能为 exited。docker restart 命令相当于先调用 docker stop 再调用 docker start

$ docker restart web
web
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
750e1ab6eb18        nginx               "nginx -g 'daemon of…"   24 minutes ago      Up 6 seconds        80/tcp              web

docker stop

使用 docker stop 命令停止容器。执行完 docker stop 命令之后,容器的状态会变为 exited。

$ docker stop web
web
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
750e1ab6eb18        nginx               "nginx -g 'daemon of…"   27 minutes ago      Exited (0) 2 seconds ago                       web

docker rm

使用 docker rm 命令删除容器,如果容器的状态为 running,则使用 docker rm -f 命令删除运行中的容器。

$ docker rm web
web

docker logs

使用 docker logs 命令查看容器的输出记录。使用 docker create 命令创建一个容器,由于不执行命令,所以通过 docker logs 命令查看不到任何输出。通过 docker start 启动该容器,由于启动容器的时候会执行 echo 'hello world' 命令,所以通过 docker logs 命令能够查看到输出 hello world。

$ docker create --name server centos echo 'hello world'
bf71659208bb5eb55d4280e65bf551ce3e9704a8943103949d4e8e050a237233
$ docker logs server
$ docker start server
server
$ docker logs server
hello world

docker run

使用 docker run 命令创建容器,同时启动容器。容器启动的时候,会执行 COMMAND 或 CMD 命令。执行完 docker run 命令,容器的状态可能为 running,也可能为 exited。

$ docker run --name hello centos echo 'hello world'
hello world
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
22fd5700f4f3        centos              "echo hello"        30 seconds ago      Exited (0) 29 seconds ago                       hello

使用 -it 参数可以在启动容器之后进入到容器文件系统的内部,这时候该容器的状态为 running。

$ docker run -it --name server centos
[root@3ffd456db9f1 /]#

再打开一个终端窗口,查看容器的状态。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0c80d4a97a29        centos              "/bin/bash"         4 seconds ago       Up 3 seconds  

输入 exit 退出容器文件系统,容器的状态变为 exited。

[root@3ffd456db9f1 /]# exit
exit
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0c80d4a97a29        centos              "/bin/bash"         14 seconds ago      Exited (0) 4 seconds ago                       server

使用 -d 参数可以在启动容器的同时,在后台执行命令,这样终端就不会处于挂起状态。

$ docker run -d --name web nginx
2538cf30d129a131a1f931123fee3eb015add63594c26b8c9db52b7f56553647
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2538cf30d129        nginx               "nginx -g 'daemon of…"   40 seconds ago      Up 39 seconds       80/tcp              web

docker exec

使用 docker exec 命令,在处于 running 状态的容器上执行 COMMAND 命令。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2538cf30d129        nginx               "nginx -g 'daemon of…"   40 seconds ago      Up 39 seconds       80/tcp              web
$ docker exec web echo 'hello world'
hello world
$ docker exec -it web bash
root@2538cf30d129:/# 

相关文章

网友评论

      本文标题:Docker 容器

      本文链接:https://www.haomeiwen.com/subject/xpgsthtx.html