Docker 的安装配置与常用命令

835 阅读5分钟

什么是Docker ?

基本概念

简单来说就是一个装应用的容器,可以把你想装的统统打包丢进去。Docker 在容器的基础上,又进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,这使得 Docker 技术比虚拟机技术更为轻便、快捷。

Docker 与传统虚拟化方式的不同之处在于,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,再在该系统上运行所需的应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统的虚拟机更为轻便。

Docker三要素

镜像 :

Docker 镜像,相当于一个特殊的文件系统,可以提供用户提供空间支持。除了提供容器运行时所需的程序、库、资源配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建后也不会改变。

严格来说,镜像是一个分层存储的架构。它在构建时,会一层一层构建,前一层是后一层的基础。每层构建完成后就不会再发生改变,后一层上的任何改动仅发生在这一层。比如,删除前一层文件的操作,实际上只是在当前层做一个“上层已删除”的标记,而不会真正把上层文件删掉。在最终容器运行的时候,虽然不会看到这个文件,但实际上它将一直跟随着镜像。因此,在构建镜像时应该额外小心,不要把无用的数据留到下一层去清理。

容器 :

镜像容器 的关系,就像 Java 中 实例 的关系。镜像是静态的定义,容器是镜像运行时的实体。容器的本质是一个进程,是真正跑项目程序、消耗机器资源、提供服务的部分,相当于一个小虚拟机,为镜像提供隔离的运行环境。

和镜像相同,容器采用的也是分层存储架构,每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,即容器存储层。容器存储层的生命周期和容器一样,当容器消亡时,该存储层将随之消亡,保存于其中的信息也一同丢失。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷,或绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

仓库 :

Docker 的仓库用来存放镜像。与 Git 类似,它提供一个集中存储、分发镜像的服务,使得我们可以从中心仓库或个人仓库自由拉取镜像,也可以将制作好的镜像提交到远程仓库。

Docker的安装、换源、与扩权

安装

deepin 下直接安装就好啦,其他版本可以参考 官方文档

出现这个就说明安装成功 :

换源

因为docker的默认镜像源下载比较慢,所以一般会换成国内的镜像源。以阿里为例,进入它的 容器镜像服务,找到自己的镜像加速器。

然后将它添入 /etc/docker/daemon.json(没有就自己创建一个)。

最后重启一下,就可以正常使用了 :

扩权

默认情况下docker是只能通过root权限访问的,就像下图,或者是 sudo -s 之后再进行操作。

通过放大 docker.sock( Docker 守护进程 ( Docker daemon ) 默认监听的 Unix 域套接字,容器中的进程可以通过它与 Docker 守护进程进行通信 )的访问权限,可以使普通用户也能直接使用 docker 命令 :

常用的Docker命令

拉取镜像

docker pull [OPTIONS] IMAGE [:TAG]
  • OPTIONS :可选参数,-xx 这种
  • IMAGE :需要拉取的镜像的名称
  • TAG :可选项,可以指定镜像的某一个版本,不选就是默认版本

查看镜像

docker images [OPTIONS] [REPOSITORY[:TAG]]
  • REPOSITORY :可以指定查看某一个镜像的版本
  • 不过一般用 docker images 就够啦

运行镜像

docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG..]
  • IMAGE :镜像名称
  • COMMAND :镜像运行时可执行的命令
  • ARG :执行命令时可选的参数

在一个运行的容器中运行某些命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG..]
  • CONTAINER :容器名称或容器id
  • COMMAND :要运行的终端指令

命令补充

查看目前正在运行的容器

docker ps

前台运行与后台运行

docker run (-d) IMAGE
  • 比如说前台 :docker run nginx
  • 对应的后台 :docker run -d nginx
  • 注 :后台运行成功后返回的字符串是这个容器的 id

进入一个容器

docker exec -it [容器id] bash
  • -i :保证我们的输入有效
  • -t :分配一个伪终端
  • 然后就可以得到一个 linux 了!(大概

绑定端口

docker run -d -p [主机端口:容器端口] [容器名或id]
  • -p :开放一个容器的端口到主机上
  • 比如这样 :docker run -d -p 8080:8080 nginx

重启容器

docker restart [容器id]

停止容器

docker stop [容器id]

停止后再次运行容器

docker start [容器id]

删除容器

docker rm [容器id]

删除镜像

docker rmi [镜像id]

注意删除镜像前要先删除容器,而删除容器前要先停止容器。

删除全部容器

首先停止全部容器 :

docker stop $(docker ps -a -q)

然后进行删除 :

docker rm $(docker ps -a -q)

-- tbc --