Docker操作命令及参数

Docker操作命令及参数

  • 查看当前版本
docker --version 
root@ubuntu:/# docker --version
Docker version 1.13.1, build 092cba3
  • 查看docker环境信息
docker info 
  • 查看镜像和容器的详细信息
Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]
root@ubuntu:/# docker inspect ubuntu  //查看ubuntu镜像信息
[
    {
        "Id": "sha256:74f8760a2a8b28abade3fcbcdb6998543f1d9b4a6fb61463c10adc0765c3cb12",
   ......
root@ubuntu:/# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
ca35e081d142        ubuntu              "/bin/bash"         31 minutes ago      Exited (0) 16 minutes ago                       mytest
root@ubuntu:/# docker inspect mytest//查看ID为ca35e081d142,名字为mytest的容器信息
[
    {
        "Id": "ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647",
        "Created": "2018-07-18T03:21:54.867247035Z",
        "Path": "/bin/bash",
  • 获取Docker镜像
  • Docker Registry地址:<域名/IP>[:端口号], 默认地址是Docker Hub
  • 仓库名:仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
root@ubuntu:/# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7996ebd2246a: Pull complete 
de532f9a4f9f: Pull complete 
7de2709b2a83: Pull complete 
70b6ac64a142: Pull complete 
23caf550e032: Pull complete 
Digest: sha256:5c27f1bbe17a6dd8e6fcf02d8717f68e52e3e7130302c5280fa6f92ad9ae7fec
Status: Downloaded newer image for ubuntu:latest
  • 查看本地所有镜像
docker images
  • 查看正在运行的容器
    -a 参数可以查看所有容器,包括停止的容器;-q 参数表示只显示容器的id
docker ps
  • 删除镜像和容器
    docker rmi命令用于删除镜像,docker rm命令用来删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rmi [OPTIONS] IMAGE [IMAGE...]
//删除镜像之前,先查看是否有容器在运行,若在运行,先
 docker stop CONNTAINER_ID
//然后清除所有已经停止的容器 
 docker rm $(docker ps -qa)
  • 容器的启动、停止和重启
docker start  CONTAINER_ID   // 启动一个容器
docker stop   CONTAINER_ID   // 停止一个容器
docker restart  CONTAINER_ID // 重启一个容器
  • 创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -p: 端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • --name="nginx-lb": 为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;

使用示例

  • 从ubuntu镜像启动一个容器,并执行echo命令打印出“Hello World”之后容器就停止运行。
root@ubuntu:/# docker run ubuntu echo "Hello World"
Hello World
  • 从ubuntu镜像启动一个容器,并为它分配一个伪终端执行/bin/bash命令,用户可以在该伪终端与容器进行交互。若不添加-d参数,退出/bin/bash之后,容器也就退出了。
root@ubuntu:/# docker run -i -t --name test ubuntu /bin/bash
root@df613d47e175:/# 
  • docker run -d 以守护状态运行
root@ubuntu:/# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@ubuntu:/# docker run -idt --name mytest ubuntu /bin/bash
ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647
root@ubuntu:/# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ca35e081d142        ubuntu              "/bin/bash"         41 seconds ago      Up 40 seconds                           mytest
  • 进入容器
    docker exec
  • 通过CONTAINER_ID进入容器
docker exec -it CONTAINER_ID /bin/bash
root@ubuntu:/# docker exec -it ca35e081d142 /bin/bash
root@ca35e081d142:/# echo 'hello world'
hello world
root@ca35e081d142:/# 
  • 通过CONTAINER_NAME进入容器
docker exec -it CONTAINER_NAME /bin/bash
root@ca35e081d142:/# exit
exit
root@ubuntu:/# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ca35e081d142        ubuntu              "/bin/bash"         11 minutes ago      Up 11 minutes                           mytest
root@ubuntu:/# docker exec -it mytest /bin/bash
root@ca35e081d142:/# echo 'hello world'
hello world
root@ca35e081d142:/# 

docker attach

docker attach [CONTAINER_ID | NAMES]

注意:使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
事实上, docker attach 不是一个用来进入容器的命令, 或者说它不是用来在容器内运行一个 bash(shell) 的命令, 它用来连接到容器中运行中的进程, 也就是容器内 PID=1 的那个进程, 如果这个进程没有 stdout/stderr ,那么你将看不到任何输出, 如果它没有接收 stdin 你也无法发送指令给它。这也就是为什么运行一个 bash 的容器, 就可以 attach 进去执行命令, 而运行一个 mysql server 的容器就无法操作的原因。

如何退出 attach 的容器

使用 CTRL-P /CTRL-Q 来退出容器, 如果使用 CTRL+C 那么会导致容器结束(Exited), 因为它会发送 SIGKILL 给容器的进程, 然后这个容器就 Exited 了, 当然这里可以使用 docker attach --sig-proxy=false 防止发送 SIGKILL 给进程。

root@ubuntu:/# docker attach ca35e081d142
root@ca35e081d142:/# exit
exit
root@ubuntu:/# docker attach mytest
You cannot attach to a stopped container, start it first
root@ubuntu:/# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@ubuntu:/# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
ca35e081d142        ubuntu              "/bin/bash"         16 minutes ago      Exited (0) 49 seconds ago                       mytest
  • 查看容器使用的资源情况
docker stats [OPTIONS] [CONTAINER...]
root@ubuntu:/# docker stats
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
ca35e081d142        0.00%               908 KiB / 3.859 GiB   0.02%               3.67 kB / 648 B     123 kB / 0 B        2
  • events、history和logs命令
    这三个命令用于查看Docker的系统日志信息。
  • events命令会打印出实时的系统事件
    详细操作和具体参数介绍可参考该链接

需要开启两个shell来演示实例。
shell1:监听事件

root@ubuntu:/# docker events

shell2:对容器进行操作

root@ubuntu:/# docker start mytest
mytest
root@ubuntu:/# docker exec -it mytest /bin/bash
root@ca35e081d142:/# echo 'Hello'
Hello

shell1:显示刚才的事件

root@ubuntu:/# docker events
2018-07-18T14:52:56.822285857+08:00 network connect d102e20c899b1a51cb220f0ade9e02625680ca48468a1028519beabcd1c63994 (container=ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647, name=bridge, type=bridge)
2018-07-18T14:52:57.057482151+08:00 container start ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
2018-07-18T14:53:42.573138943+08:00 container exec_create: /bin/bash  ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
2018-07-18T14:53:42.574748850+08:00 container exec_start: /bin/bash  ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
  • history命令会打印出指定镜像的历史版本信息,即构建镜像的每一层镜像的命令记录
docker history [OPTIONS] IMAGE
/* OPTIONS说明:
-H :以可读的格式打印镜像大小和日期,默认为true
--no-trunc :显示完整的提交记录
-q :仅列出提交记录I */
root@ubuntu:/# docker history ubuntu
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
74f8760a2a8b        30 hours ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           30 hours ago        /bin/sh -c mkdir -p /run/systemd && echo '...   7 B                 
<missing>           30 hours ago        /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76 kB             
<missing>           30 hours ago        /bin/sh -c rm -rf /var/lib/apt/lists/*          0 B                 
<missing>           30 hours ago        /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745 B               
<missing>           30 hours ago        /bin/sh -c #(nop) ADD file:5fabb77ea8d61e0...   82.4 MB  
  • logs命令会打印出容器中进程的运行日志
    想要进一步了解原理可以参考下面链接1链接2
docker logs [OPTIONS] CONTAINER
/* OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志 */

虽然 docker exec 所执行的进程也是容器的一部分,但是Docker 容器的日志只负责应用本身的标准输出,不包括 docker exec 衍生进程的标准输出。因此:
(1)docker exec 完成容器内外的交互,但希望完成大量标准输出时需谨慎;
(2)每次 docker exec ,Docker Daemon 均会记录一次 execID,切忌过于频繁。

root@ubuntu:/# docker logs -f mytest
root@ca35e081d142:/# exit
exit
发布了106 篇原创文章 · 获赞 47 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq493820798/article/details/101530775