docker是我最近工程开发上急需使用的一个开发工具,但是由于本人“深入沉浸”windows系统,并且对于Linux系统不太熟悉,所以学习docker很多困难,因此用这个博客来记录一下很简单的docker的常用操作。本文是以Linux系统为基础,windows系统对于docker的安装太繁琐了,而且有windows版本的限制,强烈推荐使用Linux系统。本文参考了很多博主的经验分享,如果大家要看原文可以到本文底部查看原网站。有众多的docker命令行可以参看 官方文档 ,我也在更新一些常用的docker命令的使用方式, 有需要的同学可以查看我的这篇博文 Docker系列学习(三)——docker镜像和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
其实一般说的关闭docker其实就是关闭docker的守护进程,一般来说可以不用管这个(我现在水平还不到探讨这个的水平)
service docker stop
查看现有镜像:
docker images
其实可以看到返回了现有镜像的列表,下面来解读以下返回的内容:
删除镜像有两种方法,一般是通过ID删除和通过TAG删除,刚才有提到TAG是可以重复的,对于同一个镜像可以有多个标签,所以如果采用指定标签的方法来删除镜像,只会删除你指定的REPOSITORY仓库名+TAG标签名的那个镜像。
docker rmi hello-world:latest
上面的命令就是删除hello-world这个仓库里的标签为latest的镜像。
不过要注意到这样删除是不能删除正在被容器使用的镜像,例如有以下报错:
这个时候可以使用 docker rmi -f hello-world:latest的命令强制删除,不过不推荐这样的方式,正确方法是:
对于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,就可以退出了。
查看正在运行的容器
docker ps
可以看到我们之前运行的容器已经显示出来了(这个是在新窗口执行的命令行,原来的那个窗口没有exit容器),如果exit容器之后,用这个命令行就看不到。如果想要查看所有的容器,可以使用下面的命令行。
docker ps -a #查看无论运行还是没有运行的容器
可以看到就算退出容器之后依然有可以查看到对应的容器信息。
刚才提到了在删除镜像以前,需要先删除引用着的容器,我们可以使用以下的命令行来进行。我们先看下有哪些容器存在。
然后使用docker rm dockerID的方法删除。
docker rm 3043893130d5
可以看到已经刚才存在的容器已经没有了,当然还有更多高级的删除容器的方法,可以参考( https://www.cnblogs.com/wholj/p/10396516.html )
对于镜像来说,每次进入镜像(容器)并且操作镜像里的内容之后,如果直接使用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已经被安装好了。
我们已经学会修改以及保存镜像,那我们会问那些下载到本地的镜像在哪里呢?我是一个对空间要求极高的人,在可以的情况下我希望知道所有的东西都放在哪里,因此无论安装什么包我都希望知道它的具体路径并设置好(特别是这种需要频繁下载东西的软件)。我们可以通过一下命令来查看。
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