1、 运行容器
    # 启动一个httpd容器,使其在后台运行并将其80端口映射到宿主机80端口
    root@Userver01:~# docker run -d-p 80:80 httpd
    Unable to find image’httpd:latest’ locally
    latest: Pulling fromlibrary/httpd
    a5a6f2f73cd8: Already exists
    ac13924397e3: Pull complete
    91b81769f14a: Pull complete
    fec7170426de: Pull complete
    992c7790d5f3: Pull complete
    Digest:sha256:63dba1dad8fe8a920226a631f8189d736b4a5129c2d2edc046a46f36ffc0091c
    Status: Downloaded newer imagefor httpd:latest
    b911f2812e516b140f69f412923264670074ec83e4b7aef186041f0e40d57cd4
    root@Userver01:~# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    b911f2812e51 httpd”httpd-foreground” 42seconds ago Up 41 seconds 0.0.0.0:80->80/tcp modest_vaughan

    # 启动一个ubuntu16.04的容器,打印完”hello world”即退出
    root@Userver01:~# docker runubuntu:16.04 /bin/echo “hello world.”
    Unable to find image ‘ubuntu:16.04’locally
    16.04: Pulling fromlibrary/ubuntu
    7b8b6451c85f: Pull complete
    ab4d1096d9ba: Pull complete
    e6797d1788ac: Pull complete
    e25c5c290bde: Pull complete
    Digest:sha256:e547ecaba7d078800c358082088e6cc710c3affd1b975601792ec701c80cdd39
    Status: Downloaded newer imagefor ubuntu:16.04
    hello world.
    root@Userver01:~# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    4683e7b221b7 ubuntu:16.04 “/bin/echo ‘hello wo…” 28 seconds ago Exited (0) 27 seconds ago pedantic_swirles
    b911f2812e51 httpd”httpd-foreground”3 minutes ago Up 3minutes 0.0.0.0:80->80/tcp modest_vaughan

    2、 容器的启动过程说明:
    •检查本地是否存在指定的镜像,如果没有就从指定的仓库下载
    •利用镜像启动一个容器
    •分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    •从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
    •从地址池配置一个IP给容器
    •执行用户指定的程序
    •执行完毕后停止容器

    3、 docker run常用选项说明
    -t:配置一个伪终端并绑定到容器的标准输入上
    -i:让容器的标准输入保持打开
    -d:将容器放入后台运行
    -c:指定分配该容器的cpu分片
    -m:指定分配给该容器的内存大小,单位为B,K,M,G

    4、 查看当前节点上的容器状态
    dockerps #查看当前正在运行的容器
    选项:
    -a:查看所有容器,包括停止的
    -q:只显示容器ID
    -l:显示最后一次创建的容器
    root@Userver01:~# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    a5a204b817cc ubuntu:16.04 “/bin/bash” 9 minutes ago Exited (0) 9 minutes ago gifted_tereshkova
    4683e7b221b7 ubuntu:16.04 “/bin/echo ‘hello wo…” 18 minutes ago Exited (0) 18 minutes ago pedantic_swirles
    b911f2812e51 httpd “httpd-foreground” 21 minutes ago Up 21 minutes 0.0.0.0:80->80/tcp modest_vaughan
    root@Userver01:~# docker ps -q
    b911f2812e51
    root@Userver01:~# docker ps -qa
    a5a204b817cc
    4683e7b221b7
    b911f2812e51
    root@Userver01:~# docker ps -ql
    a5a204b817cc

    5、 进入容器
    dockerexec -it<容器id/容器name> /bin/bash
    root@Userver01:~# docker ps -qa
    a5a204b817cc
    4683e7b221b7
    b911f2812e51
    root@Userver01:~# docker exec -itb9 /bin/bash
    root@b911f2812e51:/usr/local/apache2#

    6、 容器按用途大致可分为两类:
    •服务类容器,如webserver、database等
    •工具类容器,如curl容器、redis-cli容器等

    7、 容器的启停操作
    #容器的创建:
    docker create
    #容器的启动:
    docker start <容器id>
    #容器的停止:
    docker stop <容器id>
    docker kill <容器id>
    #容器的重启:
    docker restart <容器id>
    #容器的删除:
    docker rm <容器id>
    选项:
    -f:强行终止并删除一个运行中的容器
    -v:删除容器挂载的数据卷
    #暂停容器:
    docker pause <容器id>
    #从暂停中恢复:
    docker unpause <容器id

    8、 容器生命周期管理
    Docker基础二(容器管理) - 图1

    9、 容器资源限制
    内存限制
    -m:允许分配的内存大小
    —memory-swap:允许分配的内存和swap的总大小
    —memory-swapiness:控制内存与swap置换的比例

    启动一个ubuntu容器,限制内存为200M, 内存与swap的总和为300M:
    dockerrun -it -m 200M —memory-swap 300M ubuntu:16.04

    CPU限制
    docker可以通过-c或—cpu-shares设置容器使用的cpu的权重。如果不指定,默认为1024

    dockerrun —name container_A -c 1024 ubuntu
    docker run —name container_B -c 512 ubuntu
    container_A的cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A可以得到的 CPU 是container_B的两倍。

    io限制
    •—device-read-bps,限制读某个设备的 bps。
    •—device-write-bps,限制写某个设备的 bps。
    •—device-read-iops,限制读某个设备的 iops。
    •—device-write-iops,限制写某个设备的 iops。

    # 创建一个容器,限制写的bps为30M
    dockerrun -it —device-write-bps /dev/sda:30MB ubuntu