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 bf08b7f2cd89 或 docker 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