docker的安装与使用详解程序员

docker的安装与使用

1. docker介绍

1.1 docker简介

Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。

Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux 自己的内核。和传统的虚拟机不同的是,一个 Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。

Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:

1.虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。

3.传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。

4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。

5.Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。

Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。

Docker 由下面这些组成:

1.Docker 服务器守护程序(server daemon),用于管理所有的容器。

2.Docker 命令行客户端,用于控制服务器守护程序。

3.Docker 镜像:查找和浏览 docker 容器镜像。

1.2 docker特性

文件系统隔离:每个进程容器运行在完全独立的根文件系统里。

资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。

网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。

写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

1.3 两个基础概念images与container

Container和Image 在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:

 

Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS 会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多 个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。

Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。 

2. docker安装

2.1 docker安装

参考地址:http://blog.csdn.net/kdchxue/article/details/50902580

安装过程:

#yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm

 

注:网上使用 yum install docker-io安装会因为GFW被墙找不到源无法安装。

2.2更改配置文件

[[email protected] /]# vi /etc/sysconfig/docker

other-args列更改为:

other_args=”–exec-driver=lxc –selinux-enabled”

2.3 docker启动

#service docker start

#chkconfig docker on

如果docker启动失败,并在/var/log/docker日志中提示如下信息:

 

则可以通过如下命令解决:

yum upgrade device-mapper-libs

3. Docker使用

3.1 docker基本信息查看

1)docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等 ;

 

(2)docker info :查看系统(docker)层面信息,包括管理的images, containers数等;

 

3.2 docker镜像的获取与删除

(1) docker pull centos :下载centos所有的镜像

 

(2)docker pull centos:centos6  下载centos6镜像

 

(3)docker images  查看本机所有的镜像包

 

 

 (4)docker images -a  列出所有的images(包含历史)

 

(5)docker 导入镜像

docker load –input ~/centos-7.3.tar

(6)docker挂载主机目录 -v

docker run -i -t -v /root/engine/:/root/engine centos /bin/bash

 (7)docker 容器镜像删除

①.停止所有的container,这样才能够删除其中的images

docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:

docker rm $(docker ps -a -q)

②.查看当前有些什么images

docker images

③.删除images,通过imageid来指定删除谁

docker rmi <image id>

想要删除untagged images,也就是那些id<None>image的话可以用

docker rmi $(docker images | grep “^<none>” | awk “{print $3}”)

要删除全部image的话

docker rmi $(docker images -q)

3.2 docker容器的使用

(1)docker命令帮助

docker的管理命令都是以docker开头,加上一个容易理解的单词,对一个命令的参数不熟悉,可以使用docker command –help查看相关参数意义,例如:

 

(2)docker使用教程

http://www.runoob.com/docker/docker-tutorial.html

4. Docker镜像导入导出

docker 提供把镜像导出export(保存save)为文件的机制,这样就可以把镜像copy到任意地方了。

4.1 方式一:容器export/import

格式:docker export CONTAINER(容器)

使用 docker ps -a 查看本机已有的容器.

4.2 方式一:镜像save/load

格式:docker save IMAGE(镜像)

使用  docker commit <CONTAIN-ID> <IMAGE-NAME>命令把一个正在运行的容器保存为镜像,如:

(1)首先查看所有的容器信息

 

(2)使用docker commit命令将指定容器保存为镜像

 

(3)使用docker images 查看刚才保存的镜像

 

(4)使用docker run 命令测试刚才保存的镜像是否正确

 

(5)使用docker save 命令将镜像导出成文件

 

现在就可以在任何装 docker 的地方加载 刚保存的镜像了。

 

查看加载的镜像

 

查看刚刚加载的镜像tag<none>,现在可修改下镜像的tag名称:

 

5. 利用dockerfile构建镜像

docker build命令会根据Dockerfile文件及上下文构建新Docker镜像。构建上下文是指Dockerfile所在的本地路径或一个URLGit仓库地址)。构建上下文环境会被递归处理,所以,构建所指定的路径还包括了子目录,而URL还包括了其中指定的子模块。

构建镜像

将当前目录做为构建上下文时,可以像下面这样使用docker build命令构建镜像:

$ docker build .

Sending build context to Docker daemon 6.51 MB

说明:构建会在Docker后台守护进程(daemon)中执行,而不是CLI中。构建前,构建进程会将全部内容(递归)发送到守护进程。大多情况下,应该将一个空目录作为构建上下文环境,并将Dockerfile文件放在该目录下。

在构建上下文中使用的Dockerfile文件,是一个构建指令文件。为了提高构建性能,可以通过.dockerignore文件排除上下文目录下,不需要的文件和目录。

Dockerfile一般位于构建上下文的根目录下,也可以通过-f指定该文件的位置:

$ docker build -f /path/to/a/Dockerfile .

构建时,还可以通过-t参数指定构建成后,镜像的仓库、标签等:

镜像标签

$ docker build -t shykes/myapp .

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/6617.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论