Docker 容器使用

一、Docker 客户端

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

  1. root@iZ235mi4a64Z:~# docker
  2.  
  3. Usage: docker COMMAND
  4.  
  5. A self-sufficient runtime for containers
  6.  
  7. Options:
  8. --config string Location of client config files (default "/root/.docker")
  9. -D, --debug Enable debug mode
  10. -H, --host list Daemon socket(s) to connect to
  11. -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
  12. --tls Use TLS; implied by --tlsverify
  13. --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
  14. --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
  15. --tlskey string Path to TLS key file (default "/root/.docker/key.pem")
  16. --tlsverify Use TLS and verify the remote
  17. -v, --version Print version information and quit
  18.  
  19. Management Commands:
  20. config Manage Docker configs
  21. container Manage containers
  22. image Manage images
  23. ...

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

例如要查看 docker stats 指令的具体使用方法:

  1. root@iZ235mi4a64Z:~# docker stats --help
  2.  
  3. Usage: docker stats [OPTIONS] [CONTAINER...]
  4.  
  5. Display a live stream of container(s) resource usage statistics
  6.  
  7. Options:
  8. -a, --all Show all containers (default shows just running)
  9. --format string Pretty-print images using a Go template
  10. --no-stream Disable streaming stats and only pull the first result
  11. --no-trunc Do not truncate output

二、运行一个web应用

前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用 docker 构建一个 web 应用程序。我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

第一次使用,本地是没有镜像的,所有要下载远程仓库镜像

参数说明:

  • -d:让容器在后台运行。

  • -P:将容器内部使用的网络端口映射到我们使用的主机上。

  1. root@iZ235mi4a64Z:~# docker run -d -P training/webapp python app.py
  2. Unable to find image 'training/webapp:latest' locally
  3. latest: Pulling from training/webapp
  4. e190868d63f8: Pull complete
  5. 909cd34c6fd7: Pull complete
  6. 0b9bfabab7c1: Pull complete
  7. a3ed95caeb02: Pull complete
  8. 10bbbc0fc0ff: Pull complete
  9. fca59b508e9f: Pull complete
  10. e7ae2541b15b: Pull complete
  11. 9dd97ef58ce9: Pull complete
  12. a4c1b0cb7af7: Pull complete
  13. Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
  14. Status: Downloaded newer image for training/webapp:latest
  15. d83ffc50991fabc9aedee521be91329048bf0f17b4ca3f90cf20b63209cfbdd2
  16. root@iZ235mi4a64Z:~# docker ps
  17. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  18. d83ffc50991f training/webapp "python app.py" minutes ago Up minutes 0.0.0.0:->/tcp adoring_jackson

下载好后会默认启动该容器

三、查看 WEB 应用容器

使用 docker ps 来查看我们正在运行的容器

  1. root@iZ235mi4a64Z:~# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. d83ffc50991f training/webapp "python app.py" minutes ago Up minutes 0.0.0.0:->/tcp adoring_jackson

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。 这时我们可以通过浏览器访问WEB应用

我们也可以指定 -p 标识来绑定指定端口

  1. root@iZ235mi4a64Z:~# docker run -d -p : training/webapp python app.py
  2. ebdeda041b1e97850337c8a514dd7163db740a8eb82e8b7270402095a6368fa2
  3. root@iZ235mi4a64Z:~# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. ebdeda041b1e training/webapp "python app.py" seconds ago Up seconds 0.0.0.0:->/tcp condescending_austin
  6. d83ffc50991f training/webapp "python app.py" minutes ago Up minutes 0.0.0.0:->/tcp adoring_jackson
  7. root@iZ235mi4a64Z:~# curl http://127.0.0.1:5000
  8. Hello world!

容器内部的 5000 端口映射到我们本地主机的 5000 端口上

四、网络端口的快捷方式

通过docker ps 命令可以查看到容器的端口映射,docker还提供了另一个快捷方式:docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号。

上面创建的web应用容器ID为:d83ffc50991f  名字为:adoring_jackson

可以使用docker port 7a38a1ad55c6 或docker port determined_swanson来查看容器端口的映射情况

  1. root@iZ235mi4a64Z:~# docker port d83ffc50991f
  2. /tcp -> 0.0.0.0:
  1. root@iZ235mi4a64Z:~# docker port adoring_jackson
  2. /tcp -> 0.0.0.0:

五、查看WEB应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

  1. root@iZ235mi4a64Z:~# docker logs -f d83ffc50991f
  2. * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
  3. 192.168.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -
  4. 192.168.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -
  5. 192.168.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -
  6. 192.168.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -
  7. 192.168.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -

-f:让 dokcer logs 像使用 tail -f 一样来输出容器内部的标准输出。

从上面,可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

六、查看WEB应用程序容器的进程

可以使用 docker top 来查看容器内部运行的进程

  1. root@iZ235mi4a64Z:~# docker top 1c0efc43c0e5
  2. UID PID PPID C STIME TTY TIME CMD
  3. root : ? :: python app.py

七、检查WEB应用程序

使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

  1. root@iZ235mi4a64Z:~# docker inspect 1c0efc43c0e5
  2. [
  3. {
  4. "Id": "1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764",
  5. "Created": "2017-12-05T02:19:12.557365261Z",
  6. "Path": "python",
  7. "Args": [
  8. "app.py"
  9. ],
  10. "State": {
  11. "Status": "running",
  12. "Running": true,
  13. "Paused": false,
  14. "Restarting": false,
  15. "OOMKilled": false,
  16. "Dead": false,
  17. "Pid": ,
  18. "ExitCode": ,
  19. "Error": "",
  20. "StartedAt": "2017-12-05T02:19:12.913440347Z",
  21. "FinishedAt": "0001-01-01T00:00:00Z"
  22. },
  23. "Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557",
  24. "ResolvConfPath": "/var/lib/docker/containers/1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764/resolv.conf",
  25. ...

八、停止、重启WEB应用容器

  1. root@iZ235mi4a64Z:~# docker stop relaxed_jones
  2. relaxed_jones
  3. root@iZ235mi4a64Z:~# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. root@iZ235mi4a64Z:~# docker start relaxed_jones
  6. relaxed_jones
  7. root@iZ235mi4a64Z:~# docker ps
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 1c0efc43c0e5 training/webapp "python app.py" minutes ago Up seconds 0.0.0.0:->/tcp relaxed_jones

docker ps -l 查询最后一次创建的容器:

  1. root@iZ235mi4a64Z:~# docker ps -l
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 1c0efc43c0e5 training/webapp "python app.py" minutes ago Up seconds 0.0.0.0:->/tcp relaxed_jones

九、移除WEB应用容器

使用 docker rm 命令来删除不需要的容器,删除容器时,容器必须是停止状态,否则会报如下错误

  1. root@iZ235mi4a64Z:~# docker rm relaxed_jones
  2. Error response from daemon: You cannot remove a running container 1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764. Stop the container before attempting removal or force remove

先停止后删除

  1. root@iZ235mi4a64Z:~# docker stop relaxed_jones
  2. relaxed_jones
  3. root@iZ235mi4a64Z:~# docker rm relaxed_jones
  4. relaxed_jones

Docker 从入门到放弃(二)容器使用的更多相关文章

  1. Docker 从入门到放弃(一)安装

    前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任 ...

  2. Docker从入门到放弃(1) Docker简介与安装

    ​ 目录 一.Docker简介 1.Docker是什么: 2.为什么有docke的出现: 3.docker与传统容器的区别: 4.docker基本组成 5.docker工作原理: 二.Docker安装 ...

  3. DOCKER 从入门到放弃(一)

    前言 关于docker的各种概念已有各位大神珠玉在前,请各位自行查看,本系列的目的是各种详细操作步骤 各种概念特别推荐CloudMan的3篇blog: http://www.cnblogs.com/C ...

  4. DOCKER 从入门到放弃(三)

    使用docker create [image-name] 创建一个容器 创建一个nginx镜像的容器,由于没有指定各项参数,容器实用默认参数,创建后并不会启动,并将容器的ID输出到终端,如果本地没有镜 ...

  5. docker的入门到放弃--docker基本命令

    docker的镜像中国:https://www.docker-cn.com/registry-mirror 1.搜索镜像 [root@localhost ~]# docker search tomca ...

  6. hive从入门到放弃(二)——DDL数据定义

    前一篇文章,介绍了什么是 hive,以及 hive 的架构.数据类型,没看的可以点击阅读:hive从入门到放弃(一)--初识hive 今天讲一下 hive 的 DDL 数据定义 创建数据库 CREAT ...

  7. DOCKER 从入门到放弃(二)

    搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...

  8. Docker 从入门到放弃(三)镜像使用

    当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 下面我们来学习: 1.管理和使用本地 Docker ...

  9. Docker 从入门到放弃(四)Docker+Jenkins_自动化持续集成

    Windows 查看密码 $ cat /var/jenkins_home/secrets/initialAdminPassword 14e14c414f41481aa5955753d3f31f9f 自 ...

随机推荐

  1. 安装PHP 类库PEAR

    PHP扩展与应用库常识 当php项目里没有pear时: 单独安装解决方案 下载下面连接的文件至go-pear.phar.http://pear.php.net/go-pear.phar该文件最好放到P ...

  2. 洛谷AT2046 Namori(思维,基环树,树形DP)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一 ...

  3. LOJ #2048. 「HNOI2016」最小公倍数

    题意 有 \(n\) 个点,\(m\) 条边,每条边连接 \(u \Leftrightarrow v\) 且权值为 \((a, b)\) . 共有 \(q\) 次询问,每次询问给出 \(u, v, q ...

  4. Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解

    BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcesso ...

  5. print

    说一说这个print函数,我们经常使用,但有一些细节却往往错过了 print print()输出会换行是因为默认end="\n" 想要不换行,且覆盖 print("\r第 ...

  6. PHP使用自定义key实现对数据加密解密

    // 加密 function encryptStr($str, $key){ $block = mcrypt_get_block_size('des', 'ecb'); $pad = $block - ...

  7. poj1182、hdu1829(并查集)

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  8. SpringBoot读取application.properties文件

    http://blog.csdn.net/cloume/article/details/52538626 Spring Boot中使用自定义的properties Spring Boot的applic ...

  9. [USACO18JAN]Sprinklers

    [USACO18JAN]Sprinklers 一个矩形要符合什么条件 右上角的右上有点,左下角的左下有点 所以每列的选择高度为一个区间,小于后缀最大值大于前缀最小值(不管是作为右上角还是左下角) 然后 ...

  10. react-native中的setNativeProps

    如果你通过React.createClass方法自定义了一个组件,直接给它设置样式 prop 是不会生效的,你得把样式 props 层层向下传递给子组件 ,直到子组件是一个能够直接定义样式的原生组件. ...