快速了解使用Docker
Docker
Docker是一个用于开发,交付和运行应用程序的开放平台。 Docker能够将应用程序与基础架构分开,从而可以快速交付软件。 借助Docker,可以以与管理应用程序相同的方式来管理基础架构。 通过利用Docker的快速交付,测试和部署代码的方法,可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker属于Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
简单概括来说:
-
使用最广泛的开源容器引擎
-
一种操作系统级的虚拟化技术
-
依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
-
一个简单的应用程序打包工具
Docker设计目标
-
提供简单的应用程序打包工具
-
开发人员和运维人员职责逻辑分离
-
多环境保持一致性
Docker基本组成
Docker Client:客户端,输入docker的一些操作指令
Ddocker Daemon:守护进程, Docker是C/S架构的程序,Docker的客户端向守护进程发起请求,守护进程处理完成后返回结果。Docker客户端既可以在本地访问守护进程,也可以远程访问守护进程。
Docker Images:镜像, 镜像是容器的基石,容器基于镜像启动,镜像就像是容器的源代码,保存了用于容器启动的各种条件 。
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/<storage-driver>中。
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
Docker Container:容器,通过镜像启动:容器是docker的执行单元。
启动和执行:镜像如果是构建和打包阶段,则容器是启动和执行阶段。
容器启动过程:启动时在镜像的最顶层加一个可写的文件系统,即可写层。Docker中运行的程序就是在这个层中执行的。docker第一次启动一个容器时,可写层是空的,当文件系统发生变化,都会应用到这一层。如果想修改一个文件,该文件首先会从可读写层下边的只读层复制到该读写层,该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。这个是docker的重要机制,写时复制(copy on write),当创建一个新容器时,docker构建出一个镜像栈,在栈的最顶层添加可写层,这个读写层加上下边的镜像层及配置数据就构成了一个容器。
Docker Registry:镜像仓库,存放用户构建的镜像,仓库分为公有和私有,共有是指Docker Hub。
Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
请点击输入图片描述
容器 VS 虚拟机
请点击输入图片描述
VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
请点击输入图片描述
Docker应用场景
-
应用程序打包和发布
-
应用程序隔离
-
持续集成
-
部署微服务
-
快速搭建测试环境
-
提供PaaS产品(平台即服务)
Docker安装
docker版本:
-
社区版(Community Edition,CE),白嫖版
-
企业版(Enterprise Edition,EE),收费版
支持平台:
-
Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
-
Mac
-
Windows
这里介绍CentOS7.x安装Docker:
官网也有安装步骤:https://docs.docker.com/engine/install/centos/
关闭防火墙:
systemctl stop firewalld
systemctl disabled firewalld
关闭selinux:
vim /etc/selinux/config
改成,SELINUX=disabled,然后重启系统。
如果安装其他版本可以先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker软件包源:
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安装Docker CE:
yum install -y docker-ce
启动Docker服务并设置开机启动:
systemctl start docker systemctl enable docker
修改配置国内镜像仓库:
vi /etc/docker/daemon.json
#添加如下配置
{
"registry-mirrors": [ "https://registry.docker-cn.com"]
}
重启docker:
systemctl restart docker
至此docker安装完成了,运行命令查看安装的docker的信息:
docker info
请点击输入图片描述
运行一个hello world:
请点击输入图片描述
Docker指令
镜像管理的常用指令:
请点击输入图片描述
容器管理常用指令:
请点击输入图片描述
创建容器常用选项:
请点击输入图片描述
拉取一个nginx镜像:
docker pull nginx
查看下载的镜像:
docker images
查看镜像的详细信息:
docker image inspect nginx
创建一个容器:
docker container run -itd nginx
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
查看运行的容器:
docker ps -a
进入容器,在运行的容器中执行命令:
docker container exec -it 6905cb519547 bash
6905cb519547:容器id
运行容器,映射端口80到宿主机端口8080上面:
docker container run -itd -p 8080:80 --name nginx01 nginx
请点击输入图片描述
查看容器负载情况:
docker stats nginx01
查看容器日志:
docker logs nginx01
查看容器的端口:
docker port nginx01
删除所有容器:
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
删除所有镜像:
docker rmi -f `docker images -q`
删除已存在的镜像:
docker image rm nginx:lastest
容器日志保存地址:
ls /var/lib/docker/containers/