- Docker Hello World
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
输出Hello world
root@Ubuntu14:/# docker run ubuntu:15.10 /bin/echo "hello world"
Unable to find image 'ubuntu:15.10' locally 15.10: Pulling from library/ubuntu 7dcf5a444392: Pull complete 759aa75f3cee: Pull complete 3fa871dc8a2b: Pull complete 224c42ae46e7: Pull complete Digest: sha256:02521a2d079595241c6793b2044f02eecf294034f31d6e235ac4b2b54ffc41f3 Status: Downloaded newer image for ubuntu:15.10 hello world
各个参数解析:
-
docker: Docker 的二进制执行文件。
-
run:与前面的 docker 组合来运行一个容器。
-
ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
-
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
- 运行交互式容器
我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力
root@Ubuntu14:/# docker run -i -t ubuntu:15.10 /bin/bash root@f33f0dff0906:/# cat /proc/version Linux version 4.4.0-93-generic (buildd@lcy01-28) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #116~14.04.1-Ubuntu SMP Mon Aug 14 16:07:05 UTC 2017 root@f33f0dff0906:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@f33f0dff0906:/#
各个参数解析:
-
-t:在新容器内指定一个伪终端或终端。
-
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
此时我们已进入一个 ubuntu15.10系统的容器
我们尝试在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表
我们可以通过运行exit命令或者使用CTRL+D来退出容器。
- 启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
root@Ubuntu14:/# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 268b8d077ec86d8ae8f9c01f0135b03291c6b09cf28d9285032ea48bac4979a1 root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 268b8d077ec8 ubuntu:15.10 "/bin/sh -c 'while t…" 6 seconds ago Up 5 seconds reverent_neumann root@Ubuntu14:/# docker logs 268b8d077ec8^C root@Ubuntu14:/# docker logs reverent_neumann^C root@Ubuntu14:/# docker stop 268b8d077ec8^C root@Ubuntu14:/# docker stop reverent_neumann^C root@Ubuntu14:/# docker ps^C root@Ubuntu14:/#
docker ps 查看运行中的容器
docker log 查看容器内命令的执行结果
docer stop 停止容器
- docker容器使用
root@Ubuntu14:/# docker pull training/webapp Using default tag: latest latest: Pulling from training/webapp e190868d63f8: Pull complete 909cd34c6fd7: Pull complete 0b9bfabab7c1: Pull complete a3ed95caeb02: Pull complete 10bbbc0fc0ff: Pull complete fca59b508e9f: Pull complete e7ae2541b15b: Pull complete 9dd97ef58ce9: Pull complete a4c1b0cb7af7: Pull complete Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d Status: Downloaded newer image for training/webapp:latest root@Ubuntu14:/# docker run -d -P training/webapp python app.py 074a8dca8629c1ee03487c5154b0303f26635a7cd5f7bfef79157781804ac629 root@Ubuntu14:/# root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 074a8dca8629 training/webapp "python app.py" 13 seconds ago Up 12 seconds 0.0.0.0:32768->5000/tcp elastic_pasteur 268b8d077ec8 ubuntu:15.10 "/bin/sh -c 'while t…" 18 minutes ago Up 18 minutes reverent_neumann root@Ubuntu14:/#
docker command --help 查看某条命令command的具体使用方法
docker pull 载入镜像
docker run 参数说明:
-
-d:让容器在后台运行。
-
-P:将容器内部使用的网络端口映射到我们使用的主机上。
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。
root@Ubuntu14:/# docker run -d -p 5000:5000 training/webapp python app.py 1ac3973807d566d01ff71a77779d7cfb3682b1791a4fb666072cfa91b010ddbd root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ac3973807d5 training/webapp "python app.py" 7 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp heuristic_goldberg 074a8dca8629 training/webapp "python app.py" 8 minutes ago Up 8 minutes 0.0.0.0:32768->5000/tcp elastic_pasteur 268b8d077ec8 ubuntu:15.10 "/bin/sh -c 'while t…" 27 minutes ago Up 27 minutes reverent_neumann root@Ubuntu14:/#
也可以通过 -p 参数来设置不一样的端口,容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
root@Ubuntu14:/# docker start heuristic_goldberg heuristic_goldberg root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ac3973807d5 training/webapp "python app.py" 5 minutes ago Up 4 seconds 0.0.0.0:5000->5000/tcp heuristic_goldberg 074a8dca8629 training/webapp "python app.py" 14 minutes ago Up 14 minutes 0.0.0.0:32768->5000/tcp elastic_pasteur 268b8d077ec8 ubuntu:15.10 "/bin/sh -c 'while t…" 32 minutes ago Up 32 minutes reverent_neumann root@Ubuntu14:/# docker stop heuristic_goldberg heuristic_goldberg root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 074a8dca8629 training/webapp "python app.py" 15 minutes ago Up 15 minutes 0.0.0.0:32768->5000/tcp elastic_pasteur 268b8d077ec8 ubuntu:15.10 "/bin/sh -c 'while t…" 33 minutes ago Up 33 minutes reverent_neumann root@Ubuntu14:/# docker restart heuristic_goldberg heuristic_goldberg root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ac3973807d5 training/webapp "python app.py" 6 minutes ago Up 3 seconds 0.0.0.0:5000->5000/tcp heuristic_goldberg 074a8dca8629 training/webapp "python app.py" 15 minutes ago Up 15 minutes 0.0.0.0:32768->5000/tcp elastic_pasteur 268b8d077ec8 ubuntu:15.10 "/bin/sh -c 'while t…" 33 minutes ago Up 33 minutes reverent_neumann root@Ubuntu14:/# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ac3973807d5 training/webapp "python app.py" 6 minutes ago Up 17 seconds 0.0.0.0:5000->5000/tcp heuristic_goldberg root@Ubuntu14:/# docker stop reverent_neumann reverent_neumann root@Ubuntu14:/# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ac3973807d5 training/webapp "python app.py" 7 minutes ago Up 53 seconds 0.0.0.0:5000->5000/tcp heuristic_goldberg 074a8dca8629 training/webapp "python app.py" 16 minutes ago Up 16 minutes 0.0.0.0:32768->5000/tcp elastic_pasteur root@Ubuntu14:/# docker rm reverent_neumann reverent_neumann root@Ubuntu14:/#
docker port 查看指定容器的某个确定端口映射到宿主机的端口号
docker logs -f 查看容器内部的标准输出
docker start 停止的容器可以重新启用
docker restart 重启已停止的容器
docker ps -l 查询最后一次创建的容器
docker rm 移除已停止的容器