一. 简介
Docker是一套轻量级操作系统虚拟化解决方案,它由go语言编写。它基于Linux容器技术(LXC),依赖Namespace,Cgroup,UnionFS(联合文件系统)等技术。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。Docker本质上应该算是一种新型的App分发、安装、运行平台。Docker的logo很形象地解释了Docker的功能:
①把App与环境封装在一起(集装箱)
②封装后可以被整体搬运(小鲸鱼扛集装箱)
③App不再直接依赖于环境、操作系统,简化了接口(集装箱里面的货物不再杂七杂八堆放在甲板上,而是井井有条,大大提高空间利用率;而且集装箱是个标准件,集装箱与甲板之间的接口是规范而统一的,移植性强)
有了Docker,就可以以集装箱(镜像,Image)为单位整体式地管控App的开发、运维流程。Docker之于App,正如JVM之于Java,可以帮助开发者实现一处开发、多处运行;以后我们不再交付与运维App,我们交付与运维容器。
二. 相关概念
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
Docker的生命周期包含三个部分:镜像、容器、仓库。
镜像:镜像是用于创建容器的模板。镜像实际上是由一层一层的文件系统组成,这种层级的文件系统就是UnionFS(联合文件系统)。在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。Docker在bootfs之上的一层是rootfs(根文件系统)。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。镜像层级结构图如下:
容器:容器是独立运行的一个或一组应用。镜像实例化就成了容器。容器与镜像的关系类似于面向对象编程中的对象与类。
仓库:仓库就是一个存储和共享镜像文件的地方。
下面这张图展示了三者之间的关系:
三.Docker基本操作
使用docker version查看本机是否已安装Docker并且查看相应版本:
使用docker pull命令来从镜像想哭拉取下载镜像,为了能更快拉取镜像,通常是从国内的一些仓库拉取,比如我是用网易蜂巢(https://c.163.com/hub#/m/home/)。在镜像中心查询相应镜像,找到左上角有Docker logo的镜像,就是跟Docker官方一模一样的镜像:
docker pull hub.c.163.com/library/nginx:latest
docker images列出镜像列表:
使用docker ps 查看正在运行的容器:
使用docker run运行镜像。
当然还可以自己制作镜像。制作镜像首先需要编写一个叫做“Dockerfile”的文件,比如要制作自己的java web应用项目镜像,文件内容如下:
from hub.c.163.com/library/tomcat
MAINTAINER linguodan linguodan@gmail.com
COPY a.war /usr/local/tomcat/webapps
当然具体需要执行的操作需要根据自己的需要修改,然后使用docker build命令创建新镜像:
docker build -t name:latest .
上传镜像分别执行下面操作(登录、加tag、上传):
docker login -u yourusername@yeah.net -p yourpassword hub.c.163.com
docker tag friendlyhello hub.c.163.com/lingd3/friendlyhello:part2
docker push hub.c.163.com/lingd3/friendlyhello:part2
四.常用命令
本人在学习Docker总结了一些常用命令,如下:
docker version
docker pull [OPTIONS] NAME[:TAG] 拉取镜像
docker images [OPTIONS] [REPOSITORY[:TAG]] 查看本机的镜像
docker run [OPTIONS] IMAGE [:TAG] [COMMAND] [ARG…] 运行镜像
docker run -d 在后台运行
docker run -d -p 8080:80 hub.c.163.com/library/nginx
docker run -d -P 开放所有端口映射
docker ps 查看正在运行的容器
docker exec -it CONTAINER bash 进入容器内部
docker stop CONTAINER 停止容器
docker restart CONTAINER 重启容器
docker rmi IMAGE 删除镜像
docker rm CONTAINER 删除容器
docker tag imageName1 imageName2 命名镜像
docker push image 上传自己的镜像 (先登录 docker login)
docker -v 挂载目录
制作自己的镜像:
vi Dockerfile:
from hub.c.163.com/library/tomcat
MAINTAINER lingd3 lingd3@abc.com
COPY a.war /usr/local/tomcat/webapps
docker build -t name:latest .(当前目录)
上传镜像:
·docker login -u username@yeah.net -p password hub.c.163.com
·docker tag friendlyhello hub.c.163.com/lingd3/friendlyhello:part2
·docker push hub.c.163.com/lingd3/friendlyhello:part2