docker与虚拟机(VMware)的区别,docker基础知识与命令
docker与虚拟机(VMware)的差别1.VMware是属于完全虚拟机化,而docker则是轻量级虚拟化(只虚拟出来容器所需要的资源)2.传统的虚拟机是虚拟一整套硬件后,在其运行一个完整的操作系统,而容器内的应用进程直接运行于宿主的内核,容器没有自己的内核并且也没有进行硬件虚拟。3.VMware对硬件的利用率在30%左右,而docker对硬件的利用率在60%-80%左右。4.但是docker相
docker与虚拟机(VMware)的差别
1.VMware是属于完全虚拟机化,而docker则是轻量级虚拟化(只虚拟出来容器所需要的资源)
2.传统的虚拟机是虚拟一整套硬件后,在其运行一个完整的操作系统,而容器内的应用进程直接运行于宿主的内核,容器没有自己的内核并且也没有进行硬件虚拟。
3.VMware对硬件的利用率在30%左右,而docker对硬件的利用率在60%-80%左右。
4.但是docker相当对于虚拟机来说安全性没有那么高
可以这么理解docker本身他不是容器,他只是负责管理容器。
dockers基础知识
镜像(images):静态文件, 默认拉取镜像是采用的是http/https(加了一层安全协议)协议
容器(container):动态,有生命周期(启动就有没启动就没有,up)容器与容器之间是相互隔离的(共享资源)
仓库(registry):有几十万个镜像(公共仓库,都是大家推上去的镜像然后共享)dockerhub从这里拉取镜像会非常慢(因为是国外的网站) 阿里云注册(建议可以注册一个方便学习使用)获得阿里云加速器(daemon.json) 。
企业版:EE(收费)
社区版:CE(不花钱)
一个完整的Docker有以下几个部分组成:
dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
Docker引擎Docker Engine是C/S架构,主要有以下部件组成:
服务器(Docker daemon),后台运行的Docker daemon进程。Daemon进程用于管理Docker对象,包括镜像(images)、容器(containers)、网络(networks)、数据卷(data volumes)。
docker 基础命令
*相反的两个作用命令pull&push*
pull:从远程镜像仓库拉取镜像
push:推送一个镜像到一个镜像仓库
*相反的两个作用命令save&load*
save:导出一个镜像到一个tar的归档文件
load:将一个tar归档文件导入到镜像库中
*相反的两个作用命令export&import*
export:导出容器文件系统到tar归档文件
import:导入tar归档文件创建镜像
docker ps 查看正在运行的容器
#-a 查看正在运行的容器和已经停止的容器
#-q只列出容器的id
docker create :创建一个新的容器但不启动它
docker exec :在运行的容器中执行命令
docker run :创建一个新的容器并运行一个命令
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
-d: 后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与 -t 同时使用
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="nginx-lb": 为容器指定一个名称
--device-read-bps:限制读某个设备的bps
--device-write-bps:限制写某个设备的bps
--device-read-iops:限制读某个设备的iops
--device-write-iops:限制写某个设备的iops
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致
-h "mars": 指定容器的hostname
-e username="ritchie": 设置环境变量
--env-file=[]: 从指定文件读入环境变量
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行
-m :设置容器使用内存最大值
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
--link=[]: 添加链接到另一个容器
--expose=[]: 开放一个端口或一组端口
--volume , -v: 绑定一个卷
举例1:利用nginx:latest镜像运行一个无网络环境的容器
docker run -it -d --net=none nginx:latest /bin/bash
举例2:使用nginx镜像创建一个名为nginx1的容器,只能使用0这个内核,镜像使用nginx:latest
docker run -dit --name nginx1 --cpuset-cpus="0" nginx:latest /bin/bash
举例3:运行mysql:8.0镜像,设置数据库密码为xd_root,将宿主机13307端口作为容器3306端口映射
docker run -itd -e MYSQL_ROOT_PASSWORD=xd_root -p 13307:3306 mysql:8.0 /bin/bash
举例4:运行centos:latest镜像,限制容器写/dev/sda 的速度速率为1MB/s
docker run -itd --device-write-bps /dev/sda:1MB centos/latest /bin/bash
举例5:使用centos:latest镜像创建一个名为centos-7的容器,并且将宿主机的/var/www 目录挂载到容器的/data目录上
docker -d -name centos-7 -v /var/www:/data centos:latest
docker start 容器ID或容器名 :启动容器
docker restart 容器ID或容器名:重启容器
docker stop 容器ID或容器名:停止容器
docker kill 容器ID或容器名:强制停止容器
docker rm 容器ID或容器名:删除已停止的容器
docker logs 容器ID:查看容器日志
docker top 容器ID:查看容器内运行的进程
docker inspect 容器ID :查看容器自身详细信息
docker commit :从容器创建一个新的镜像。 作用:提交容器的副本,使之成为新的镜像
docker images:列出本地镜像
docker rmi 镜像ID:删除镜像(可以一个也可多个)
docker tag:标记本地镜像(表示同类软件不同版本的镜像,版本前面一般为冒号)
Dockerfile文件
dockerfile构建步骤:
1)根据规则编写dockerfile文件
2)docker build:命令用于使用 Dockerfile 创建镜像
dockerfile基础知识:
1)#表示注释,与shell注释用法一样。
2)指令从上到下依次执行。
3)每条保留字指令都必须是大写字母。
4)每条指令都会创建新的镜像层,并对镜像进行提交。
dockerfile构建过程解析:
1)先从FROM基础镜像启动为一个容器
2)执行第一条镜像操作指令,开始对容器作出修改
3)执行类似docker commit操作提交一个新的镜像层
4)docker再基于刚提交的镜像运行一个新容器。
5)执行第二条指令,依次类推直到所有的指令都执行完成。
Dockerfiel常见 指令
FROM:构建的新镜像是基于哪个基础镜像
例如:FROM centos-7:latest
MAINTAINER :镜像维护者姓名
例如:MAINTAINER XianDian
RUN:运行linux 命令。
例如:RUN yum install -y vim
ADD:增加文件或目录。
EVN:设置容器内环境变量。
例如:ENV MYSQL_ROOT_PASSWORD 000000
CMD:运行进程。
EXPOSE:声明容器运行的服务端口.
例如:EXPOSE 8080
vOLUME:为RUN,CMD和ENTRYPOINT执行命令指定运,行的用户,设置容器登录进去的用户
例如: USER ambari
WORKDIR:为RUN,CMD,ENTRYPOINT,COPY和ADD,设置工作目录,或者设置容器登录后的落脚点。
例如:WORKDIR/usr/local
使用 Dockerfile 创建镜像过程举例
题目要求:编写构建的centos:latest镜像为基础镜像,构建数据库服务,Dockerfile要求删除镜像的yum源,使用当前系统的yum源文件,完成后安装mariadb服务,使用mysql用户初始化数据库,添加MYSQL_USER=xiandian、MYSQL_PASS=xiandian环境变量,暴露端口9093
1.新建一个目录
#mkdir mydockerfile
#cd mydockerfile
2.编辑Dockerfile文件
#vi Dockerfile
FROM 192.168.182.50:5000/centos:latest
MAINTAINER Xiandian
RUN rm -fv /etc/yum.repos.d/*
ADD docker.repo /etc/yum.repos.d/
RUN yum install -y mariadb-server
RUN mysql_install_db --user=mysql
ENV MYSQL_USER xiandian
ENV MYSQL_PASS xiandian
EXPOSE 9093
3.把yum文件拷贝到mydockerfile目录下
#cp /etc/yum.repos.d/docker.repo /root/mydockerfile
4.开始构建
docker build -t 192.168.182.50:50000/centos-maeiadb:v1.0 .
更多推荐
所有评论(0)