Docker 容器利用


Docker 客户端

docker 客户端很是简略 ,咱们能够或许间接输入 docker 号令来查抄到 Docker 客户真个一切号令选项。

jishudaxue@jishudaxue:~# docker

能够或许经由过程号令 docker command --help 更深切的领会指定的 Docker 号令利用体例。

比方咱们要查抄 docker stats 指令的详细利用体例:

jishudaxue@jishudaxue:~# docker stats --help


容器利用

获得镜像

若是咱们本地不 ubuntu 镜像,咱们能够或许利用 docker pull 号令来载入 ubuntu 镜像:

$ docker pull ubuntu

启动容器

以下号令利用 ubuntu 镜像启动一个容器,参数为以号令行形式进入该容器:

$ docker run -it ubuntu /bin/bash

参数申明:

  • -i: 交互式操纵。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是号令,这里咱们但愿有个交互式 Shell,是以用的是 /bin/bash。

要加入终端,间接输入 exit:

root@ed09e4490c57:/# exit

启动已遏制运转的容器

查抄一切的容器号令以下:

$ docker ps -a

点击图片查抄大图:

利用 docker start 启动一个已遏制的容器:

$ docker start b750bbbcfd88 

背景运转

在大局部的场景下,咱们但愿 docker 的办事是在背景运转的,咱们能够或许过 -d 指定容器的运转形式。

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

点击图片查抄大图:

注:加了 -d 参数默许不会进入容器,想要进入容器须要利用指令 docker exec(下面会先容到)。

遏制一个容器

遏制容器的号令以下:
$ docker stop <容器 ID>

遏制的容器能够或许经由过程 docker restart 重启:

$ docker restart <容器 ID>

进入容器

在利用 -d 参数时,容器启动后会进入背景。此时想要进入容器,能够或许经由过程以下指令进入:

  • docker attach

  • docker exec:保举大师利用 docker exec 号令,由于此加入容器终端,不会致使容器的遏制。

attach 号令

下面演示了利用 docker attach 号令。

$ docker attach 1e560fca3906 

注重: 若是从这个容器加入,会致使容器的遏制。

exec 号令

下面演示了利用 docker exec 号令。

docker exec -it 243c32535da7 /bin/bash

注重: 若是从这个容器加入,不会致使容器的遏制,这便是为甚么保举大师利用 docker exec 的缘由。

更多参数申明请利用 docker exec --help 号令查抄。

导出和导入容器

导出容器

若是要导出本地某个容器,能够或许利用 docker export 号令。

$ docker export 1e560fca3906 > ubuntu.tar

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

如许将导出容器快照到本地文件。

导入容器快照

能够或许利用 docker import 自在器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

另外,也能够或许经由过程指定 URL 或某个目次来导入,比方:

$ docker import //example.com/exampleimage.tgz example/imagerepo

删除容器

删除容器利用 docker rm 号令:

$ docker rm -f 1e560fca3906

下面的号令能够或许清算掉一切处于遏制状况的容器。

$ docker container prune

运转一个 web 利用

后面咱们运转的容器并不一些甚么出格的用途。

接上去让咱们测验考试利用 docker 构建一个 web 利用法式。

咱们将在docker容器中运转一个 Python Flask 利用来运转一个web利用。

jishudaxue@jishudaxue:~# docker pull training/webapp  # 载入镜像
jishudaxue@jishudaxue:~# docker run -d -P training/webapp python app.py

参数申明:

  • -d:让容器在背景运转。

  • -P:将容器外部利用的收集端口映照到咱们利用的主机上。


查抄 WEB 利用容器

利用 docker ps 来查抄咱们正在运转的容器:

jishudaxue@jishudaxue:~#  docker ps
CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
d3d5e39ed9d3        training/webapp     "python app.py"     ...        0.0.0.0:32769->5000/tcp

这里多了端口信息。

PORTS
0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默许 Python Flask 端口)映照到主机端口 32769 上。

这时候咱们能够或许经由过程阅读器拜候WEB利用

咱们也能够或许经由过程 -p 参数来设置不一样的端口:

jishudaxue@jishudaxue:~$ docker run -d -p 5000:5000 training/webapp python app.py

docker ps查抄正在运转的容器

jishudaxue@jishudaxue:~#  docker ps
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar
d3d5e39ed9d3        training/webapp     ...        0.0.0.0:32769->5000/tcp   xenodochial_hoov

容器外部的 5000 端口映照到咱们本田主机的 5000 端口上。


收集端口的快速体例

经由过程 docker ps 号令能够或许查抄到容器的端口映照,docker 还供给了另外一个快速体例 docker port,利用 docker port 能够或许查抄指定 (ID 或名字)容器的某个肯定端口映照到宿主机的端标语。

下面咱们建立的 web 利用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar

我能够或许利用 docker port bf08b7f2cd89docker port wizardly_chandrasekhar 来查抄容器端口的映照环境。

jishudaxue@jishudaxue:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000
jishudaxue@jishudaxue:~$ docker port wizardly_chandrasekhar
5000/tcp -> 0.0.0.0:5000

查抄 WEB 利用法式日记

docker logs ID或名字 能够或许查抄容器外部的规范输入。

jishudaxue@jishudaxue:~$ docker logs -f bf08b7f2cd89
 * Running on //0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - 09/May/2016 16:30:37 "GET / HTTP/1.1" 200 -
192.168.239.1 - - 09/May/2016 16:30:37 "GET /favicon.ico HTTP/1.1" 404 -

-f:docker logs 像利用 tail -f 一样来输入容器外部的规范输入。

从下面,咱们能够或许看到利用法式利用的是 5000 端口并且能够或许查抄到利用法式的拜候日记。


查抄WEB利用法式容器的历程

咱们还能够或许利用 docker top 来查抄容器外部运转的历程

jishudaxue@jishudaxue:~$ docker top wizardly_chandrasekhar
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py

查抄 WEB 利用法式

利用 docker inspect 来查抄 Docker 的底层信息。它会前往一个 JSON 文件记实着 Docker 容器的设置装备摆设和状况信息。

jishudaxue@jishudaxue:~$ docker inspect wizardly_chandrasekhar

    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2019-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": 
            "app.py"
        ,
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-09-17T01:41:26.494185806Z",
            "FinishedAt": "0002-01-01T00:00:00Z"
        },
......

遏制 WEB 利用容器

jishudaxue@jishudaxue:~$ docker stop wizardly_chandrasekhar   
wizardly_chandrasekhar

重启WEB利用容器

已遏制的容器,咱们能够或许利用号令 docker start 来启动。

jishudaxue@jishudaxue:~$ docker start wizardly_chandrasekhar
wizardly_chandrasekhar

docker ps -l 查问最初一次建立的容器:

#  docker ps -l 
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar

正在运转的容器,咱们能够或许利用 docker restart 号令来重启。


移除WEB利用容器

咱们能够或许利用 docker rm 号令来删除不须要的容器

jishudaxue@jishudaxue:~$ docker rm wizardly_chandrasekhar  
wizardly_chandrasekhar

删除容器时,容器必须是遏制状况,不然会报以下毛病

jishudaxue@jishudaxue:~$ docker rm wizardly_chandrasekhar
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove