vmware
操作系统层的虚拟化,受本机机器的硬件资源限制,不能同时跑多个虚拟机,不能最大化利用资源。
docker
占用系统资源极低,可以同时运行几百个;
社区版docker-ce
免费,企业版docker-ee
收费
安装
问题
解决办法
#添加docker源、
sudo echo "deb https://download.docker.com/linux/ubuntu zesty edge" > /etc/apt/sources.list.d/docker.list
#添加GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 更新
apt-get update
基本操作
查看状态
systemctl status|stop|restart docker #状态|停止|重启
整体架构(客户端-->引擎-->镜像仓库)
常用命令
列出镜像docker images
拉取镜像docker pull centos:version
镜像仓库docker hub
可能拉取较慢,配置国内镜像地址
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://7ie6ficu.mirror.aliyuncs.com"]
}
#重启docker
systemctl daemon-reload
systemctl restart docker
搜索镜像仓库docker search nginx
删除镜像docker rmi docker-name|docker-id
创建交互式容器
docker run -it --name c1 ubuntu /bin/bash
-i:交互式容器
-t:tty终端(分配一个终端,操作容器)
--name:指定容器名称
查看正在运行的容器docker ps
退出容器exit
,交互式容器推出后停止
创建守护式容器(后台运行)
docker run -itd --name c2 ubuntu /bin/bash
进入容器
docker exec -it c3 /bin/bash
容器退出后继续运行
查看容器
docker ps -a #历史运行过的容器
docker ps -l #最后一次运行的容器
停止/启动容器docker start|stop docker-name
查看指定容器的详细信息docker inspect docker-name
删除容器(不能删除正在运行的容器):docker rm docker-name
文件拷贝
文件从宿主机拷贝到容器docker cp 1.txt c2:/root
文件从容器拷贝到宿主机docker cp c2:/root 1.txt
目录挂载(将宿主机的目录与容器目录建立映射关系)
在创建容器的时候指定映射关系
docker run -id --name=c4 -v /opt/:/usr/local/myyhtml ubuntu
docker进阶
docker hub的30%镜像都存在漏洞,所以在生产环境中需要自己制作容器
制作镜像两种方式
1、提交镜像docker commit container-name image-name
,进入容器中完成部署后,执行docker commit
可以生成新的镜像
2、docker builder
构建镜像
DSL语法
制作完成后对本地镜像|容器打包,进行移植
镜像打包
# 镜像打包
docker save -o /root/myubuntu.tar image-name
# 传入其他服务器
scp myubuntu.tar 其他服务器ip:/root
# 导入镜像
docker load -i /root/myubuntu.tar
容器打包
# 容器打包
docker export -o /root/c1.tar c1
# 导入容器
docker import c1.tar myubuntu:latest
端口映射
映射本机端口和容器的端口
docker run -itd --name=t1 -p 8888:80 myubuntu /bin/bash
docker间通信
Docker中默认的三种网络分别为bridge、host和none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加到这两个网络时不能与外界网络通信。
查看容器的网络使用情况
docker network inspect bridge
Error response from daemon: Get https://index.docker.io/v1/search?q=ubuntu&n=25: dial tcp: lookup index.docker.io: Temporary failure in name resolution
docker默认会调用这个文件的DNS
vim /etc/resolv.conf
nameserver 8.8.8.8
Error response from daemon: Get https://index.docker.io/v1/search?q=ubuntu&n=25: dial tcp 50.16.172.3:443: connect: connection refused
启动容易出现问题,可查看日志
docker logs -f container_name