乐趣区

docker基本操作

docker 基本操作

Docker Hello World

Docker 允许你在容器内运行程序,使用 docker run 命令在容器内运行一个应用程序
输出 Hello world

docker run ubuntu:15.10 /bin/echo "Hello World"
  • 参数解析

    • docker :Docker 的二进制执行文件
    • run : 与前面的 docker 组合来运行一个容器
    • ubuntu:15.10:指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像
    • /bin/echo“Hello world”:在启动的容器内执行的命令

运行交互式的容器

docker run -it ubuntu:15.10 /bin/bash
  • 参数解析

    • -t : 在新容器内指定一个伪终端或终端
    • -i : 允许你对容器内的标准(STDIN)进行交互

我们可以通过运行 exit 命令或者使用 CTRL+ D 来退出容器

启动容器(后台模式)

docker run -d ubuntu:15.10 /bin/sh -c "while true;do echo hello world;sleep 1;done"

在容器内使用 docker logs 命令,查看容器内的标准输出

docker logs < 容器 id>

停止容器

docker stop < 容器 id>

容器使用

docker 客户端非常简单,我们可以直接输出 docker 命令来查看到 Docker 客户端的所有命令选项
可以使用 docker <command> –help 更深入的了解指定的 Docker 命令的使用方法
例如我们要查看 docker stats 指令的具体使用方法

docker stats --help

运行一个 web 应用

docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
  • 参数解析

    • -d:让容器在后台运行
    • -P:将容器内部使用的网络端口映射到我们使用的主机上

查看 web 应用容器

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

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

会多出端口信息 POSTS

0.0.0.0:32768->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上
我们也可以通过-p 参数来设置不一样的端口

docker run -d -p 5000:5000 training/webapp python app.py

查看 web 应用程序日志

docker logs <ID 或名字 > 可以查看容器内部的标准输出

查看 web 应用程序容器的进程

docker top <ID 或名字 > 来查看容器内部运行的进程

检查 WEB 应用程序

docker inspect <ID 或名字 > 查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息

移除 WEB 应用容器

docker rm <ID 或容器名 > 删除不需要的容器,删除容器时,容器必须是停止状态,否则会报如下错误

Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove

Docker 镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载

列出镜像列表

docker images
  • 选项说明

    *  REPOSITORY:表示镜像的仓库源
    *  TAG:镜像内的标签
    *  IMAGE ID:镜像 ID
    *  CREATED:镜像创建时间
    *  SIZE:镜像大小
    

同一个仓库源可以有多个 TAG,代表这这个仓库的源的不同版本,比如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像,如果不指定 TAG,则默认使用最新的镜像 ubuntu:latest

获取一个新的镜像

docker pull ubuntu:13.10

查找镜像

我们可以从 Docker Hub 网站来搜索镜像,DockerDocker Hub

docker sercch httpd
  • 参数解析

    • NAME:镜像仓库的名称
    • DESCRIPTION:镜像的描述
    • OFFICIAL:是否 docker 官方发布

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  1. 从已经创建的容器中更新镜像,并且提交这个镜像
  2. 使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器

docker run -i -t ubuntu:15.10 /bin/bash

修改完容器内容后,可以通过 docker commit 来提交容器副本

docker commit -m="[提交信息]" -a="[作者名]" e218edb10161  runoob/ubuntu:v2
  • 参数说明

    *  -m:提交的描述信息
    *  -a:指定镜像作者
    *  e218edb10161 : 容器 ID
    *  runoob/ubuntu:v2:指定要创建的目标镜像名
    

可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2

构建镜像

我们使用 docker build,从零开始创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。


cat Dockerfile 

FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条 FROM,指定使用哪个镜像源 RUN 指令告诉 docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -t runoob/centos:6.7 .
  • 参数说明

    • -t 指定要创建的目标镜像名
    • . :Dockerfile 文件所在的目录,可以指定 Dockerfile 的绝对路径

使用 docker images 查看创建的镜像已经在列表中存在

设置镜像标签

docker tag < 容器 ID> runoob/centos:dev

使用 docker images 命令可以看到,指定 id 的镜像多一个标签。

Docker 容器连接

端口映射

docker run -d -P training/webapp python app.py
  • 参数解析

    • -P:是容器内部端口 随机 映射到主机的高端口
    • -p : 是容器内部端口绑定到 指定 的主机端口
docker run -d -p 5000:5000 training/webapp python app.py

另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker port 命令可以让我们快捷地查看端口的绑定情况。

docker prot adoring_stonebraker 5000

Docker 容器连接

端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

容器命名

当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 –name 标识来命名容器,例如:

docker run -d -p --name test training/webapp python app.py

Docker 删除所有镜像

docker image prune -a -f
退出移动版