天天看点

docker:基础命令实践总结docker的启动和停止Docker帮助命令Docker镜像命令Docker容器命令

容器是独立运行的一个或者一组应用,以及他们的运行态环境。

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必修的。除此之外,没有其他的资源

docker:基础命令实践总结docker的启动和停止Docker帮助命令Docker镜像命令Docker容器命令

docker的启动和停止

systemctl**命令是系统服务管理器指令

  • systemctl start docker
  • systemctl stop docker
  • systemctl restart docker
  • systemctl status docker
  • systemctl enable docker【开机启动】

Docker帮助命令

  • sudo docker version
  • sudo docker info 【docker具体信息】
  • sudo docker --help 【帮助命令】

Docker镜像命令

查看本地镜像

  • sudo docker images
    • 列出本地镜像:
    • 同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用镜像仓库源:镜像标签来定义不同的镜像。
    • 如果不指定镜像的版本标签,默认使用ubuntu:lastest
      • REPOSITORY:镜像名称
      • TAG:镜像标签
      • IMAGE ID:镜像ID
      • CREATED:镜像的创建日期(不是获取该镜像的日期)
      • SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

从网络中搜索镜像

docker search 镜像名称
           

例子:

  • sudo docker search --filter=stars=30 tomcat
    • 搜索点赞数超过30的tomcat镜像
      • NAME:仓库名称
      • DESCRIPTION:镜像描述
      • STARS:用户评价,反应一个镜像的受欢迎程度
      • OFFICIAL:是否官方
      • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
        docker:基础命令实践总结docker的启动和停止Docker帮助命令Docker镜像命令Docker容器命令

拉取镜像

拉取镜像就是从中央仓库中下载镜像到本地

docker pull 镜像名称
           
  • sudo docker pull tomcat 【下载最新版本的tomat】
  • docker pull centos:7
    • 下载centos7镜像

删除镜像

按镜像ID删除镜像

docker rmi 镜像ID
           

删除所有镜像

docker rmi `docker images -q`
           

Docker容器命令

有镜像才能创建容器,这是根本前提

下载镜像

  • sudo docker pull centos 【下载一个Centos镜像】
  • sudo docker images 【发现centos只有200MB,这是因为镜像只保留了核心,所以启动会很快】

启动容器

  • 基于镜像新建一个容器并启动
  • 将在终止状态的容器重新启动

新建并启动:docker run

2.1、以一个镜像为模板新建并启动交互式容器【启动并且进入】

语法:sudo docker run --it --name 容器名 镜像名|镜像ID

sudo docker run --it --name mycentos centos
  • -i表示交互
  • -t表示终端
  • –name表示为容器指定一个名称
sudo docker run -it centos /bin/bash
  • 启动一个bash,运行用户进行交互:-t让docker分配一个伪终端并绑定到容器的标准输出上,-i让容器的标准输入打开
  • 和上面命令效果一样
  • sudo docker run centos /bin/echo ‘hello world’ 【输出一个helloworld然后终止容器】
  • sudo docker run -t -i ubuntu /bin/bash

2.2、开启守护式容器:以后台方式启动容器

  • sudo docker run -d --name hcentos centos 【只运行一下就马上退出了】
  • sudo docker ps 【没有发现hcentos】
  • sudo docker ps -a 【发现hcentos】
  • 只运行一下就马上退出的原因:Docker容器后台运行必须有前台进程,如果没有前台进程,也就是那些一直挂起的命令如top,tail等,容器后台启动之后,会立即自杀因为没事可做
  • sudo docker run centos /bin/sh -c “while true; do echo hello world; sleep 1; done”【容器每隔1s在终端打印hello world】
  • sudo docker run -d centos /bin/sh -c “while true; do echo hello world; sleep 1; done”; 【36573d3926d19aba56baadd8ed4c26a46e8d25c892845e5ef9f25a1beb353410:后台运行,没有打印hello world;如果想要获取容器的输出信息,可以通过docker container logs [container ID or NAMES]
  • docker container logs [container ID or NAMES]

doccker run时后台运行的标准操作

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜像
  • 创建并启动一个容器分配一个文件系统,并且在只读的镜像层外面挂载一层可读写层
  • 从宿主机配置的网桥接口中
  • 桥接一个虚拟接口到容器中去
  • 从地址池配置一个ip地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

3、总结:启动容器时指定参数

  • -t 表示让Docker分配一个伪终端并绑定到容器的标准输入上
  • -i 表示让容器的标准输入保持打开
  • -d 表示以守护方式打开(即非交互模式,后台运行)
  • -p 设置端口映射 -p 宿主机端口:容器端口

启动已经终止的容器

语法:sudo docker [container] start/restart 容器名或者容器ID

备注:虽然container是可选的,但是建议加上,发现加上的话命令执行速度更快

  • sudo docker container start 容器名或者容器ID
    • 【重启已经终止的容器】
  • sudo docker container restart 容器名或者容器ID
    • 【将正在运行的容器终止然后重新启动】

进入正在后台运行的容器

attach命令

备注:不推荐使用

  • sudo docker run -dit centos
    • 【备注:d表示后台运行,it表示交互】
  • sudo docker container ls
    • 【结果:容器ID为5e7ac06ea9be 】
  • sudo docker attach 5e7ac06ea9be
    • 【备注:也可写成sudo docker attach 5e7】
    • 【结果:进入可交互界面[email protected]:/# 】
  • exit
    • 【结果:停止容器并退出交互命令行】
  • sudo docker ps
    • 【结果:查看正在运行的容器,没有发现5e7ac06ea9be】

exec命令

备注:用得更多

  • sudo docker run -dit centos
    • 【备注:d表示后台运行,it表示终端交互】
  • sudo docker container ls
    • 【结果:容器ID为51d75e80e76a 】
  • sudo docker exec -it 51d75e80e76a bash
    • 【结果:进入可交互界面[email protected]:/# 】
  • exit
    • 【结果:不停止容器,退出交互命令行】
  • sudo docker ps
    • 【结果:查看正在运行的容器,发现51d75e80e76a】

总结:attach和exec命令对比

相同点:

  • 都是进入正在运行的容器内

不同点

  • attach中可以使用exit停止容器并退出容器,对于exec命令在终端使用exit可以退出容器终端并停止容器
  • attach可以直接进入容器命令行,但是exec命令需要使用-it,bash才能打开可交互命令行

查看容器

  • sudo docker [container] ps
  • docker ps
    • 【备注:查看当前正在运行的容器】
  • sudo docker container ls
    • 【备注:查看当前正在运行的容器】
  • sudo docker [container] ps -a
    • 【备注:查看所有运行过包括正在运行的容器】
  • sudo docker container ls -a
    • 【备注:查看所有容器包括已经终止的容器】

退出停止容器

1、退出容器

  • exit:容器停止退出
  • ctrl+P+Q:容器不停止退出

2、停止容器:

语法:sudo docker stop 容器名或者容器ID

  • sudo docker stop 5e7ac06ea9be

3、强制停止容器:

语法:sudo docker kill 容器名|容器ID

  • sudo docker kill 5e7ac06ea9be

删除容器

  • sudo docker container rm trusting_newton
    • 【备注:删除一个处于终止状态的容器】
  • sudo docker [container] rm 3ee6ee1b2471 -f
    • 【备注:删除一个运行中的容器:docker会发送sigkill信息给容器】
    • 【备注:container可选,但是建议写上】
    • 【备注:3ee6ee1b2471为容器ID,也可以用容器名字代替】
  • sudo docker container prune
    • 【备注:清理所有处于终止状态的容器】

修改镜像名字

  • docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

删除镜像[这个好像有些问题]

语法:docker rmi 镜像名|镜像ID

  • sudo docker rmi hello-world【删除镜像】
  • sudo docker rmi -f $(docker images -qa)【删除全部镜像】

参考:https://yeasy.gitbooks.io/docker_practice/content/data_management/volume.html

继续阅读