docker介绍及入门使用

一、Docker简介

1.为什么会有Docker出现呢?

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验,Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。

之前在服务器配置一个应用的运行环境,要安装各种软件,就拿实际做过的项目的环境来说吧,Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。
 
传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

总结:解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

2.Docker技术的优点

VMvare是我们经常使用的虚拟机软件,其实虚拟机技术就是带环境安装的一种解决方案,但虚拟机是将硬件虚拟化后在此基础上运行一个操作系统。

虚拟机的缺点:
1    资源占用多               2    冗余步骤多                 3    启动慢

Docker容器虚拟化技术与传统虚拟化技术的区别

*传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
*而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
* 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

有了Docker,能更快速的应用交付和部署,更便捷的升级和扩缩容,更简单的系统运维,更高效的计算资源利用。

新浪、美团、蘑菇街等都使用了Docker容器。

3.Docker官网

docker官网:http://www.docker.com

Docker Hub仓库官网: https://hub.docker.com/

二、Docker的安装

1.了解一项技术的架构图是学习的关键,在安装之前我们先来看一下架构图。

1)从大到小来看,有客户端,服务端,仓库。是不是很像Git?

2)客户端发送指令到服务端,服务端去仓库下载镜像,然后在将镜像实例化为一个容器跑起来。

3)镜像:Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

4)容器: Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

5)仓库:仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等

总结:需要正确的理解仓储/镜像/容器这几个概念:Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
*  image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
 
*  一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
 
* 至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。
 

2.Centos7下安装

1)确定你的Linux是Centos7以上的版本

cat /etc/redhat-release

2)通过yum安装gcc相关组件(便于进行C语言编译)

yum -y install gcc
yum -y install gcc-c++

3)如果有旧版本,先写在旧版本

yum -y remove docker docker-common docker-selinux docker-engine

4)安装依赖的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

5)设置阿里云的docker镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6)安装yum软件包索引

yum makecache fast

7)安装docker-ce

yum -y install docker-ce

8)启动docker

systemctl start docker

9)测试

docker version

3.如果需要卸载docker

1)停止docker服务

systemctl stop docker 

2)

yum -y remove docker-ce

3)

rm -rf /var/lib/docker

4.阿里云镜像加速器的配置

去阿里云控制台

 

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://自己的标签.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

三、Docker常用命令

1.帮助命令

docker version
docker info
docker help

2.镜像命令

1)docker images:列出本机上的镜像

各个项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像

docker images 后可加选项参数  :-a :列出本地所有的镜像(含中间映像层)

-q :只显示镜像ID。

--digests :显示镜像的摘要信息

--no-trunc :显示完整的镜像信息

2)docker search [OPTIONS] 某个XXX镜像名字 

从docker仓库查找某个镜像将其显示

OPTION说明:--no-trunc : 显示完整的镜像描述

-s : 列出收藏数不小于指定值的镜像。

--automated : 只列出 automated build类型的镜像;

3)docker pull 某个XXX镜像名字

docker pull 镜像名字[:TAG]

不标注TAG,则默认为下载最新版本。

4)docker rmi 某个XXX镜像名字ID

删除单个镜像 docker -rmi -f 镜像id

删除多个镜像 docker rmi -f 镜像名1:TAG 镜像名2:TAG

删除全部镜像 docker rmi -f ${docker images -qa}

3.容器命令

有镜像才能创建容器,这是根本前提(下载一个CentOS镜像演示)    docker pull centos

1)新建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 OPTIONS说明(常用):有些是一个减号,有些是两个减号
 
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
      ip:hostPort:containerPort
      ip::containerPort
      hostPort:containerPort
      containerPort

如果我们要交互式的启动容器 就用 -it选项,如果我们要后台启动,就用-d,但一般情况下都要指明映射端口,因为docker容器内部有默认端口,我们需要把这个容器的端口暴露在我们的机器上,才可以被访问。

2)列出当前所有正在运行的容器

docker ps [OPTIONS]

-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。   docker ps -n 3
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。

3)退出容器:exit   容器停止并推出

ctrl+q+p   容器不停止,只退出。

4)

5)删除已停止的容器

docker rm 容器ID

6)启动守护式容器,即后台启动

#使用镜像centos:latest以后台模式启动一个容器
docker run -d centos


问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
 
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如
service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行

因为tomcat本身就有前台进程去输出日志,所以后台启动不会被docker强制停止。

7)查看容器日志

docker logs -f -t --tail 容器ID

*   -t 是加入时间戳

*   -f 跟随最新的日志打印

*   --tail 数字 显示最后多少条

8)查看容器内运行的进程

docker top 容器ID

9)进入正在运行的容器并以命令行交互

docker exec -it 容器ID bashShell

重新进入docker attach 容器ID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值