美文网首页
Docker基础命令

Docker基础命令

作者: c4a1d989518e | 来源:发表于2017-06-05 17:38 被阅读353次

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。

Docker基础命令

查看Docker信息

docker info

下载镜像

docker pull busybox

BusyBox是一个最小的Linux系统
运行一个带标签镜像的容器

sudo docker run -t -i ubuntu:14.04 /bin/bash

跑个Hello World

docker run busybox /bin/echo Hello World

构建容器

sample_job=$(docker run -d busybox /bin/sh -c "while true;do echo Docker;sleep 1;done")

其中的-d是放在后台执行
查看日志

docker logs $sample_job

运行结果



名为sample_job的容器,停止命令是

docker stop $sample_job

重启该容器

docker restart $sample_job

要将容器删除,需要先将容器停止,容器删除命令为:

docker rm $sample_job

将容器的状态保存为新的镜像的方法为:

docker commit

查看镜像

docker images

搜索镜像

docker search (image-name)

查看镜像的历史版本

docker history (image-name)

将镜像推送到registry

docker push (image-name)

查看我们正在运行的容器

docker ps -l

端口映射

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

移除镜像

docker rmi(镜像名称或者id前3位)

小例子

命令

docker run -d -p 80:80 --name webserver nginx

这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。

现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用 docker exec 命令进入容器,修改其内容。

$ docker exec -it webserver bash
root@3729b97e8226:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@3729b97e8226:/# exit
exit

我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。

$ docker diff webserver

现在我们定制好了变化,我们希望能将其保存下来形成镜像。

Docker commit

要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。
我们可以用下面的命令将容器保存为镜像:

$ docker commit \
    --author "Tao Wang <twang2218@gmail.com>" \
    --message "修改了默认网页" \
    webserver \
    nginx:v2
docker run --name web2 -d -p 81:80 nginx:v2

这里我们命名为新的服务为 web2,并且映射到 81 端口。

慎用 docker commit

首先,如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真正想要修改的 /usr/share/nginx/html/index.html 文件外,由于命令的执行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。

此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦的。

docker stop webserver
docker rm webserver

运行一个带标签镜像的容器

sudo docker run -t -i -rm ubuntu:14.04 /bin/bash

-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
-rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
ubuntu:14.04:这是指用 ubuntu:14.04 镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。
要想列出已经下载下来的镜像,可以使用 docker images 命令。

Docker images的过滤

$ docker images ubuntu

镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。

如果仔细观察,会注意到,这里标识的所占用空间和在 Docker Hub 上看到的镜像大小不同。比如,ubuntu:16.04
镜像大小,在这里是 127 MB
,但是在 Docker Hub 显示的却是 50 MB
。这是因为 Docker Hub 中显示的体积是压缩后的体积。

docker images 还支持强大的过滤器参数 --filter,或者简写 -f。我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令

$ docker images -f since=mongo:3.2

想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可。
文章参考:
Docker入门实战
极客学院
Docker从入门到实践

相关文章

  • dokcer命令帮助手册

    基础命令 docker version docker help docker info 镜像命令 docker i...

  • docker 命令

    一、Docker的基础命令 二、docker网络管理相关的命令: docker run 命令参数 三、docker...

  • docker base command

    docker(base command) docker 基础命令

  • Docker基础操作

    Docker部署 Docker安装 镜像加速 Docker 基础命令 Docker镜像管理 搜索镜像docker ...

  • centos下docker基本命令

    docker基础命令 docker服务开启/关闭 service docker start/stop镜像搜索 ...

  • docker 常用基础命令

    Docker基础命令查看docker版本信息$ docker --version 查看docker安装信息$ do...

  • 使用Docker分布式部署爬虫系统Pyspider

    阅读准备 docker基础命令,docker-compose基础 pyspider基础 如果您不熟悉上面的内容,可...

  • docker 减少打包镜像体积

    docker 减少打包镜像体积 dockerfile 基础命令 FROM 指定基础镜像 RUN 执行命令shell...

  • docker入门

    Docker基础命令学习及redis集群搭建 本堂课内容 一、Docker 入门 Docker是什么? Docke...

  • docker学习第三天

    今天主要学习docker的基础命令,启动,关闭,查看版本,帮助文档。以及重要的docker镜像命令. 重启dock...

网友评论

      本文标题:Docker基础命令

      本文链接:https://www.haomeiwen.com/subject/ludufxtx.html