docker和虚拟机的区别

虚拟机

服务器—操作系统—虚拟化服务—虚拟机操作系统—各类类库—应用

docker

服务器—操作系统—docker engine—各类类库—应用

最大的区别

虚拟机需要虚拟guest os,而docker容器是共享宿主机内核

后端兼容性测试

To B业务需要在不同客户环境下安装我们的应用软件,因为虚拟机可以虚拟出操作系统,所以能够模拟在宿主机为ubuntu,虚拟机为centos的情况下应用程序的兼容情况,而docker是共享宿主机内核,即便docker采用的是centos镜像,其仍旧共享宿主机的ubuntu内核,无法模拟在不同操作系统上的兼容性测试。

资源消耗

虚拟化内核是很费系统资源的,所以一台服务器可能可以同时挂上百个docker,但十几个虚拟机就挂了。

docker如何保证环境之间相互隔离

Namespace网络名称空间

完全隔离网络的一种机制,处于两个网络名称空间中的应用进程是完全无法通信的。可以使用虚拟网络设备对打破这个限制

联合文件系统

文件隔离,每个容器提供一个单独的视图,只能访问本容器的文件

Cgroups

资源隔离,可以限制容器使用的资源,超出限制资源的容器将会被操作系统干掉

docker命令

docker相关

systemctl start docker 启动

systemctl daemon-reload 守护进程重启

systemctl restart docker 重启

systemctl stop docker 关闭

镜像管理

docker pull xx:aa 拉取镜像,xx代表镜像名称或全路径,aa代表镜像版本号,省略默认拉取最新镜像

docker images 查看当前所有镜像

docker rmi xx:aa 删除镜像,xx代表镜像名称或id,aa表示版本号

docker load < xx 加载本地镜像到docker中,xx表示本地镜像tar包

docker save xx > aa 保存docker镜像到本地,xx表示docker中的镜像,aa表示本地保存的tar包

docker tag xx:aa newxx:newaa 给镜像打一个新的版本,但无法创建新的镜像,xx:aa表示原来的镜像名称:版本,newxx:newaa表示新的镜像名称:版本,省略aa默认为latest,删除tag镜像只是解除了该tag,原来的镜像仍旧存在

容器启动

docker run xx:aa 启动容器,xx代表镜像名称或全路径,aa表示镜像版本号

docker run -d xx:aa -d表示后台运行该容器

docker run -d –name myjenkins -p 9999:8080 jenkins –name表示重命名该容器名称为myjenkins,-p表示将容器的8080端口映射到主机的9999端口

docker run -d –name myjenkins -p 9999:8080 -v /etc/docker/jenkins_home:/var/jenkins_home jenkins -v表示将本地/ect/docker/jenkins_home目录挂载到容器的/var/jenkins_home目录下,如果不挂载本地目录保存容器运行过程中的数据,容器删除后数据就没了,保存以后再次启动容器之前的数据就还在

sudo chown -R 1000:1000 /etc/docker/jenkins_home 修改挂载权限(非常重要,不同镜像uid不同)上一句命令出错的话很大原因是没有挂载权限导致的

docker run -d –name myjenkins –net host jenkins 以host模式启动容器,使用宿主机网络

docker logs -f xxx 查看容器启动日志,xx代表容器启动id或名称,和tail -f效果一致

docker run –name mysql-test -v /etc/docker/mysql_home:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 8888:3306 -d mysql -e表示启动容器时指定参数,此例是将mysql启动过程中root密码置为123456

容器删除

docker stop xx 停止容器

docker kill xx 杀死容器

docker rm xx 删除容器

docker rm -f xx 强制删除容器

docker container prune -f 强制删除所有容器,慎用

查看信息

docker info 查看docker整体状态

docker ps 查看所有正在运行的docker进程

docker ps -a 列出所有,包含已经退出的,-s参数可以列出当前容器占用的空间大小

docker inspect xx 查看镜像的元信息

容器交互

docker exec -it xx bash 进入容器,xx代表容器名称,启动虚拟交互去执行bash窗口登录到容器中

docker exec xx echo "hello world"

docker exec -d xx ping www.baidu.com

docker cp pwd/test.txt xx:/home 将主机当前目录下的test.txt文件复制到容器/home目录下

制作镜像

docker commit xx aa 将容器做出的改变叠加到原镜像之上,xx表示容器名称,aa表示新镜像名称

开启/关闭Hyper-V虚拟化服务

bcdedit /set hypervisorlaunchtype off

bcdedit /set hypervisorlaunchtype auto

升级jenkins

1.打开jenkins网页,右键复制需要更新下载的war包地址

2.进入jenkins容器,docker container exec -u 0 -it myjenkins bash

3.在容器内下载war包,wget http://updates.jenkins-ci.org/download/war/2.164.1/jenkins.war

4.移动war包,mv jenkins.war /usr/share/jenkins/

5.修改权限,chmod 777 /usr/share/jenkins/jenkins.war

6.退出容器并重启,exit docker container restart myjenkins


1 条评论

匿名 · 2019-04-18 23:48

温故而知新,可以为师矣。

匿名进行回复 取消回复

电子邮件地址不会被公开。