一文了解 docker,常用 docker 命令分享

什么是 docker

什么是 Docker ? 下面是我查阅的关于介绍 Docker 的几篇文章 :

个人对 Docker 的一个理解:以前是一大家子过日子,资源共享,兄弟姐妹多了难免会有争执,怎么解决这个问题 ?分家过日子,相互独立,自己的生活自己过。

一台服务器上跑多个应用程序,相互之间难免会有影响,现在 Docker 出现了,不同应用之间可以独立开来,你我相安无事,你忙你的,我忙我的。

Docker 中几个重要的概念:

一文了解 docker,常用 docker 命令分享

  • 仓库 (Repository):类似代码仓库,可以类比 GitHub , Docker 有一个类似 Github 的东西 Docker hub , 这里用来存放各种镜像文件,我们可以从仓库 pull 下来,也可以从本地 push 到 仓库。
  • 镜像 (Image):我们从仓库 pull 下来的就是镜像,镜像是创建 Docker 容器的基础,我们可以把镜像想象成一个Java 类,通过它我们可以生成很多实体对象出来, 镜像也是如此,一个镜像我们可以生成很多的容器。
  • 容器(Container):Docker容器(Container)可以想象成一个微型的服务器,里面可以安装各种应用,容器与容器之间互相隔离,互不影响。

Docker 的安装

Docker 现在有两个版本,一个版本是 Docker CE ,另一个版本是 Docker EE, 前者免费,后者收费,两者区别可以自行 google , Docker CE 已经足够我们的学习和使用了。
Docker CE 版本的安装的官方链接 Docker CE 的安装
Docker CE 版本的安装的中文链接 Docker CE 的中文安装步骤

Docker 的常用命令使用总结

推荐学习 docker 命令的网址如下 :docker 的官方网站 docker 的中文学习连接

  • docker help : 将会列出 docker 的一些可使用的命令

  • docker version : 查看 docker 的版本

  • docker info : 查看 docker 的基本信息

  • docker COMMAND --help : 列出具体命令的使用方法, 例如 docker run --help

  • docker search XXX : 搜索远程仓库是否有 XXX 镜像 ,例如 docker search redis

  • docker pull XXX : 从远程仓库拉取 XXX 镜像,例如 docker pull redis

  • docker images : 查看从远程仓库拉取下来的镜像 ,有几个参数说明一下:

    1. docker images -a : 列出所有的镜像
      1. docker images -q : 列出镜像的 id
      2. docker images hello-world : 只展示 hello-world 这个镜像
      3. docker images – help : 查看如何使用 docker images 的命令
  • docker rmi XXX : 删除镜像 XXX(可以是镜像名字,也可是是镜像的 id) ,常用参数:

    1. docker rmi -f XXX : 强制删除 XXX 镜像,例如 docker rmi -f hello-world
      1. docker rmi --help : 查看 docker rmi 的使用
  • docker images -qa |xargs docker rmi -f : 删除所有的镜像

  • docker run XXX : 运行指定的镜像 ,镜像运行以后就是容器,这个命令比较复杂,通常不会这样直接运行某个镜像,通常还会配合其他参数一起使用,推荐一个总结 docker run 命令比较好的连接 docker run 命令详解,常用的参数也可以参考如下:

    1. docker run – help : 这个参数非常有用,因为 docker run 的参数比较多,往往需要这个帮助命令帮助我们查看 docker run 的使用。
      1. docker run -it XXX : 这里的 -I 和 -t 都是 docker 的常用参数,这两个参数通常在一起使用,-i 表示以交互式模式运行容器 ,-t 为容器重新分配一个伪输入终端 , 例如现在有一个镜像是 centos , 运行 docker run -it centos 将会进入容器的终端可以和容器进行交互。
      2. docker run -p 8081:6379 XXX : 运行镜像 XXX , 镜像运行后,假如XXX 服务的端口是 6379 ,那么宿主机可以通过 8081 ,访问这个启动的镜像。例如现在有一个镜像是 tomcat , docker run -p 8081:8080 tomcat , 运行 tomcat 以后在宿主机上我们可以通过 localhost:8081 访问 tomcat。
      3. docker run -d XXX : -d 后台运行,例如 docker run -d centos ,centos 将会在后台运行。
      4. docker run --name yyy XXX : – name 是运行镜像以后的容器的名字,该命令的意思是运行镜像 XXX 后的容器名字是 yyy,如果没有指定名字会随机的指定一个名字使用。例如: docker run -it -d --name myCentos centos 运行 centos 镜像,运行后会有一个名字是 myCentos 的容器在运行。
      5. docker run -v /test1:/test --privileged=true XXXX : 这个一个一个非常好用的一命令,-v 表示的是容器卷的意思,运行该命令以后宿主机的根目录下 test1 和 容器的根目录下的 test 将会进行实时的同步,如果没有 test1 和 test 将会创建创建出来,此时在宿主机的 /test1 里面新建文件和文件夹都会同步到容器的 /test 文件夹里面。
      6. docker run XXX command : 运行容器以后,并在容器中执行相应的 linux 命令 ,例如 docker run centos ls -al /root 运行 centos 的时候,查看容器的 /root 目录下的所有文件和文件夹。
      7. docker run -it -d -p 8081:8080 --name myTomcat -v /myapps:/usr/local/tomcat/webapps --privileged = true tomcat 这个命令是以上命令的综合使用,运行 tomcat 向外暴露端口是8081 ,运行的容器名称是 myTomcat , 宿主机器的 /myapps 目录将会同步 webapps 目录,因此只需要在宿主机器放置相关项目的 war 包就可以正常运行项目了。
  • docker ps : 列出正在运行的容器

    1. docker ps -a : 列出所有的容器,包括没有运行的容器
    2. docker ps -q : 列出正在运行的容器 ID
    3. docker ps -qa : 列出所有容器的 ID
  • control + p 组合 control + q : 按住 control 和 p 在按住 control 和 q 将会退出和容器的交互,但是容器还是在运行状态。

  • exit : 如果当前还在容器之中,输入 exit 将会退出容器,同时容器将会被关闭

  • docker stop XXX : 关闭容器 ,XXX 是容器的 ID 或者是容器的名字

  • docker restart XXX : 重启容器, XXX 是容器的 ID 或者是容器的名字

  • docker stop XXX : 关闭容器,XXX 是容器的 ID 或者是容器的名字

  • docker rm -f XXX : 强制删除容器 ,XXX 是容器的 ID 或者是容器的名字

  • docker ps -qa|xargs docker rm -f : 强制删除所有的容器

  • docker logs XXX : 查看容器的日志,XXX 是容器的 ID 或者是容器的名字

  • docker top XXX : 查看容器内运行的进程

  • docker inspect XXX : 查看容器的内部细节

  • docker attach XXX : 当容器处在运行状态,现在又不在容器里面,需要进入容器可以使用该命令,该命令有时会出现卡顿

  • docker exec -it XXX COMMAND : 当容器处在运行状态, 执行容器中相应的命令,例如 docker exec -it tomcat /bin/bash 进入到容器当中,这个命令通常可以取代 docker attach

  • docker cp XXX:src_path dest_path : 复制容器内的文件或者目录到宿主机内,docker cp tomcat:/usr/local/tomcat/webapps /myapps

  • docker commit -a ”xxx” -m ”yyy” XXX YYY: 当对容器进行了改造,使用该命令会创建一个新的镜像,上面的例子意思是创建一个新的镜像 YYY ,来自于容器 XXX ,作者是 xxx ,备注信息是 yyy 。该命令是从容器生成镜像。

  • docker build -f filePath -t XXX. : 通过 Dockerfile 去构建镜像 , -f 后面指定Dockerfile 的路径, -t 后面是镜像的名字,XXX ,是要生成的具体镜像的名字,注意命令后面有一个 . 表示从当前路径去构建镜像,这个 . 通常不可以少,如果在当前目录有一个镜像文件名称是 Dockerfile , 那么可以不指定具体 Dockerfile 的路径, docker build -t XXX 就可以了。

  • docker login : 登陆远程的 dockerhub 类似于 GitHub ,按照提示输入用户名称和用户的密码,如果需要 push 镜像到远程仓库必须使用登陆命令。

  • docker tag image:tag username/image:tag : 该命令是给镜像重新命名,如果要使用 docker push 命名必须符合这种规范 ,image:tag 是本地的镜像,username/image:tag 是需要推送到远程的镜像,该命令的意思复制本地镜像改成名称是 username/image:tag 的镜像,目的用来远程推送, 例如现在有一个镜像是 centos:latest , 需要使用 docker tag centos:latest zempty/centos:latest 才可以推送到远程的仓库,这里的 zempty/centos:latest 需要分析一下,zempty 是我的远程仓库 dockerhub 的用户名,centos:latest 是远程仓库名称

  • docker push username/image:tag 推送的镜像必须符合这种规范才可以进行推送,例如 docker push zempty/centos:latest zempty/centos:latest 是镜像名

Dockerfile 的关键字的分析

Dockerfile 是镜像的一个脚本文件,可以通过 docker build 命令生成镜像,熟练的使用 Dockerfile 我们可以很舒服的构建适合自己项目的镜像。
Dockerfile 学习的官方参考学习连接 : Dockerfile 官方参考文档
Dockerfile 的中文学习参考 : Dockerfile 各种指令详解
Dockerfile 的知乎文章推荐 : 如何编写最佳的 Dockerfile
个人认为学习 Dcokerfile 的最佳路径,是到 dockerhub 上搜索几个当下流行的镜像,认真研读一下它们的 Dockerfile,学习,模仿,改造。。。

  • DockerFile
    dockerFile 是一个定义 image 的文件,提供了一些独有的保留字,保留字指令必须大写后面至少一个参数,指令从上往下,# 表示注释,每条指令构成一层
  • 保留字指令解析
    1. FROM :基础镜像,当前的新镜像是基于哪个镜像。
    2. MAINTAINER:提供镜像维护者的信息.
    3. RUN: 容器构建的时候需要运行的 linux 命令
    4. EXPOSE: 当前容器对外暴露的端口号
    5. WORKDIR:指定创建容器后,终端默认登陆进来的工作目录,一个落脚点
    6. ENV:用来在构建镜像的过程中设置环境变量
    7. ADD:将宿主机目录下的文件拷贝进镜像切 ADD 命令会自动处理 URL 和解压 tar 压缩包
    8. COPY: 类似 ADD ,拷贝文件和目录到镜像中,将从构建的上下文目录中源路径文件或者目录复制到新的一层镜像的目标路径
    9. VOLUME:容器数据卷,用于数据保存和持久化工作
    10. CMD:指定一个容器启动的时候要运行的命令,DockerFile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数给替换掉
    11. ENTRYPOINT:指定一个容器启动的时候要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
    12. ONBUILD:当构建一个被继承的 DockerFile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发

一文了解 docker,常用 docker 命令分享