docker是我最近工程开发上急需使用的一个开发工具,但是由于本人“深入沉浸”windows系统,并且对于Linux系统不太熟悉,所以学习docker很多困难,因此用这个博客来记录一下很简单的docker的常用操作。本文是以Linux系统为基础,windows系统对于docker的安装太繁琐了,而且有windows版本的限制,强烈推荐使用Linux系统。本文参考了很多博主的经验分享,如果大家要看原文可以到本文底部查看原网站。有众多的docker命令行可以参看 官方文档 ,我也在更新一些常用的docker命令的使用方式, 有需要的同学可以查看我的这篇博文 Docker系列学习(三)——docker镜像和docker容器基本命令

1、进入Docker

安装docker的方式可以参看我 上一篇博文

一般来说Linux安装好docker之后,就可以直接使用docker这个命令了,如果没有启动docker(守护进程)会出现以下命令报错:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

可以使用以下代码进入:

service docker start

2 、关闭Docker服务

其实一般说的关闭docker其实就是关闭docker的守护进程,一般来说可以不用管这个(我现在水平还不到探讨这个的水平)

service docker stop

3、Docker查看现有镜像

查看现有镜像:

docker images

其实可以看到返回了现有镜像的列表,下面来解读以下返回的内容:

  • REPOSITORY:“镜像所属的仓库名”,在仓库下会有很多版本的镜像,也就是一个 仓库会包含 多个镜像,而这里显示表示的是不同镜像属于那些仓库
  • TAG:“镜像的标签名”,在仓库中,不同的镜像是以标签的形式来区分的。一个REPOSITORY仓库名+TAG标签名,就构成了一个完整的镜像名,如:centos:7.02、ubuntu:14.04、debian:latest这个镜像名就会对应一个镜像的ID。我们之前在运行镜像时,通常只是指定了centos,并没有指定后面的TAG标签名,在这种情况下,docker会默认使用“latest”标签所对应的镜像。
  • IMAGE ID:“镜像的唯一ID”,常常可以使用这个来打开指定的镜像,因为TAG是可以重复的,但是ID是唯一的
  • CREATED:“镜像建立的时间”。
  • SIZE:“镜像建立的大小”。
  • 4、Docker删除现有镜像

    删除镜像有两种方法,一般是通过ID删除和通过TAG删除,刚才有提到TAG是可以重复的,对于同一个镜像可以有多个标签,所以如果采用指定标签的方法来删除镜像,只会删除你指定的REPOSITORY仓库名+TAG标签名的那个镜像。

    docker rmi hello-world:latest

    上面的命令就是删除hello-world这个仓库里的标签为latest的镜像。

    不过要注意到这样删除是不能删除正在被容器使用的镜像,例如有以下报错:

    这个时候可以使用 docker rmi -f hello-world:latest的命令强制删除,不过不推荐这样的方式,正确方法是:

  • 先删除引用这个镜像的容器(删除容器和查看容器的方法下面会讲到)
  • 再删除这个镜像
  • 5、Docker启动镜像

    对于Docker来说,image是静态的,类似于操作系统快照,而container则是动态的,是image的运行实例。因此启动镜像就需要创建容器。

    有一个image名称为ubuntu,那么比如现在我们启动这个image的container并且进入到这个container的bash命令行中:

    docker run -t -i ubuntu /bin/bash

    命令行的理解如下:

    docker run:启动container(这种方式是基于镜像的启动,会创建一个新的容器)

    ubuntu:你想要启动的image

    -t:进入终端

    -i:获得一个交互式的连接,通过获取container的输入

    /bin/bash:在container中启动一个bash shell

    上图就是成功查创建了一个容器,并进入到了,容器的ID是2fa8d7535635,这个时候容器就已经在运行了。

    如果要退出容器就直接在命令行输入  exit,就可以退出了。

    6、Docker查看现有容器

    查看正在运行的容器

    docker ps

    可以看到我们之前运行的容器已经显示出来了(这个是在新窗口执行的命令行,原来的那个窗口没有exit容器),如果exit容器之后,用这个命令行就看不到。如果想要查看所有的容器,可以使用下面的命令行。

    docker ps -a    #查看无论运行还是没有运行的容器

    可以看到就算退出容器之后依然有可以查看到对应的容器信息。

  • CONTAINER ID(container id ) :顾名思义 ,容器ID的意思,可以通过这id找到唯一的对应容器
  • IMAGE (image):该容器所使用的镜像
  • COMMAND (command):启动容器时运行的命令
  • CREATED (created):容器的创建时间,显示格式为”**时间之前创建“
  • STATUS (status):容器现在的状态,状态有7种:created(已创建)|restarting(重启中)|running(运行中)|removing(迁移中)|paused(暂停)|exited(停止)|dead
  • PORTS (ports): 容器的端口信息和使用的连接类型(tcp\udp)
  • NAMES (names): 镜像自动为容器创建的名字,也唯一代表一个容器
  • 7、Docker删除现有容器

    刚才提到了在删除镜像以前,需要先删除引用着的容器,我们可以使用以下的命令行来进行。我们先看下有哪些容器存在。

    然后使用docker rm dockerID的方法删除。

    docker rm 3043893130d5

    可以看到已经刚才存在的容器已经没有了,当然还有更多高级的删除容器的方法,可以参考( https://www.cnblogs.com/wholj/p/10396516.html )

    8、Docker 修改镜像以及保存镜像

    对于镜像来说,每次进入镜像(容器)并且操作镜像里的内容之后,如果直接使用exit退出容器,是不会保存你的操作的(也就是说重新加载dockerrun -t -i xxxx /bush镜像之后,一切内容都会重新来)。如果我们想要保存我们的操作该怎么办呢?下面我们启动之前创办的ubuntu的系统,并在ubuntu系统里安装vim编译器,并保存。

    启动ubuntu系统,如果没有指定:TAG,会启动TAG为latest的镜像

    docker run -it ubuntu /bin/bash

    可以看到这个容器里面并没有vim编译器

    接下来我们在这个容器安装vim编译器(具体细节参看我之前的博文 Linux中安装vim编译器 ),具体就是两行命令行。安装完成之后命令行键入vim之后可以看到

    好了这个系统已经被更改了,接下来是把这个系统(容器)打包成镜像保存(换句话说就是没有办法更改原来的镜像的,但是可以保存修改后的容器为另一个镜像的方法来保存),主要的命令是

    docker commit 75eb300dd5b2 ubuntu:2.0

    上面这个命令就是docker commit 容器ID ubuntu:2.0(这里这个镜像新的TAG)。

    可以看到出现这个界面就说明已经保存成功了(主要到这个命令行以一定要在新的窗口中执行,不是在容器中执行这个储存命令行)

    最后我们可以看看我们刚刚新创建的镜像。

    可以看到我们的ubuntu:2.0镜像已经创建好了。如果我们进入ubuntu:2.0可以发现vim已经被安装好了。

    9、Docker镜像及容器的保存位置

    我们已经学会修改以及保存镜像,那我们会问那些下载到本地的镜像在哪里呢?我是一个对空间要求极高的人,在可以的情况下我希望知道所有的东西都放在哪里,因此无论安装什么包我都希望知道它的具体路径并设置好(特别是这种需要频繁下载东西的软件)。我们可以通过一下命令来查看。

    sudo docker info

    着张图片显示出来docker的信息,其中我们需要注意到的是:Docker Root Dir: /var/lib/docker,这就是docker镜像的存储路径(镜像的名字是不会显式的写在文件夹上的,具体的对应关系可以参看 这篇博文 )。

    接下来是我们需要知道该如何更改这个路径,比如把这些镜像放到另一个分区里面。

    1、把/var/lib/docker这个文件夹下的所有内容移动到另一个文件夹下,比如我这里移动到/data/docker这个文件里。

    2、修改配置文件,更改docker中镜像和容器的默认储存位置。(注意,刚安装docker的需要新建这个文件)

    sudo vim /etc/docker/daemon.json

    3、将文件中'data-root',改为‘data-root’:'/home/data/docker'

    4、重启docker服务

    参考网址:

    https://www.cnblogs.com/520yang/articles/8744454.html

    https://blog.csdn.net/woshimeihuo/article/details/90209779

    https://blog.csdn.net/acmman/article/details/84449092

    https://www.cnblogs.com/quanxiaoha/p/10542278.html

    https://www.cnblogs.com/linjiqin/p/8608975.html

    https://www.cnblogs.com/luengmingbiao/p/14742396.html

    以上内容如有错误,恳请指正