docker与虚拟机(VMware)的区别,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 .

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小琪的成长记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值