Docker如何使用

  • Post author:
  • Post category:其他




目录



1、Docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。



1.1、Docker优点

1.简化配置

这是Docker初始目的,虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上。Docker提供同样类似VM的能力,但是没有任何副作用,它能让你将环境和配置放入代码然后部署,同样的Docker配置能够在各种环境中使用,这实际是将应用环境和底层环境实现了解耦。

2.代码管道化管理

能够对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。因为在这个流程中会有各种不同的环境,每个都可能有微小的区别,Docker提供了跨越这些异构环境以一致性的微环境,从开发到部署实现流畅发布。

3.开发人员的生产化

在一个开发环境,我们希望我们的开发环境能更加接近于生产环境,我们会让每个服务运行在自己的VM中,这样能模拟生产环境,比如有时我们并不总是需要跨越网络连接,这样我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。

4.应用隔离

有很多理由你需要在一台机器上运行多个应用,这就需要将原来铁板一块monolithic的应用切分为很多微服务。实现应用之间的解耦,将多个应用服务部署在多个Docker中能轻松达到这个目的。

5.服务合并

使用Docker也能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术Docker能以更加紧密资源提供更有效的服务合并。

6.多租户

Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。

7.快速部署

Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。

8.环境统一 docker将容器打包成镜像,创建符合docker hub规范的镜像,上传进个人的私有docker hub,转换环境时直接pull即可,最大程 度的保证了开发环境,正式环境统一



1.2、Docker缺点

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

1、Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用

2、LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的

3、隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库

4、网络管理相对简单,主要是基于namespace隔离

5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)

6、Docker对disk的管理比较有限

7、container随着用户进程的停止而销毁,container中的log等用户数据不便收集



2、Docker安装部署



2.1、安装

yum install docker



2.2、开启服务

systemctl start  docker.service



2.3、安装镜像(这里是以centos为例)

docker pull centos:7.2.1511

可以利用以下命令查看是否安装成功

docker images

在这里插入图片描述



3、开启该镜像的服务

一个镜像可以开启N多次,彼此操作之间不影响。也就是说你在A镜像中删除某文件,但是B镜像中的该文件还依然存在,不会影响。以下举个例子,其中4cbf是镜像IMAGE ID字段,前四位的缩写。

docker run -ti 4cbf /bin/bash

开启后会自动进入到镜像中,此时操作就是再镜像中了,查看是否真的是在镜像中

uname -a

在这里插入图片描述

记住按“ctrl + q + p”组合键退出该镜像,这样镜像并不会停止服务,可以通过该命令查看

docker ps

如果不小心结束了该服务,比如说按了exit等,还可以通过该命令查看

docker ps -a

在这里插入图片描述

如何再进入到开启的服务中呢?

直接输入以下命令即可(其中469a913f3c26是该Image的Container ID)

docker exec -it 469a913f3c26 /bin/bash

在这里插入图片描述



4、错误的解决方案



4.1、Docker出现“. Is the docker daemon running”的解决方案

执行docker ps命令,出现”Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running”问题。此时已确定Docker本身已经安装正常。

问题原因是因为docker服务没有启动,所以在相应的/var/run/ 路径下找不到docker的进程。

执行以下命令,启动docker服务

 service docker start 



4.2、Docker报错“Error response from daemon: Container *”的解决方案

例如:

现象:

docker exec -it 7c5a2350c4cb /bin/bash
Error response from daemon: Container * is not running。

原因:

因为这个exec跑不起来,那就用start

解决:

docker start 7c5a2350c4cb 



5、Docker实例



5.1、docker run

docker run -d -p 8082:80 --name nginx -v /usr/sinatra/nginx/www:/usr/share/nginx/html 
-v /usr/sinatra/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /usr/sinatra/nginx/logs:/var/log/nginx:ro  nginx
  • 挂载数据卷默认权限是rw,可以通过ro指定为只读
  • -d 开启Daemon模式
  • :左边是主机的配置,右边是docker里面的配置
  • -p 8082:80: 将容器的 80 端口映射到主机的 8082 端口
  • 记住进程是



5.2、docker cp

docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
  • 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列



版权声明:本文为egegerhn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。