Docker(一):简介和常用命令
一、Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- DockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
二、Docker能做什么
- 搭建测试环境
- 搭建各类基础服务
- 搭建测试执行环境
三、Docker和虚拟机的区别
- VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用
- Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用。
3.1、优缺点对比
- VM虚拟化一个完整的内核;启动慢;内存占用大;
- Docker容器共享宿主机内核;启动更快;内存占用小;
- Docker缺点:一个容器将内核搞坏,整个宿主机都会挂;挑内核的应用不应使用docker容器【兼容性测试(2B的企业应用,对操作系统内核有要求)、编译如C++】
启动时间:Docker秒级启动,虚拟机分钟级启动。
轻量级:docker镜像大小通常以M为单位,虚拟机以G为单位。容器资源占用小,要比虚拟机部署更快速。
性能:docker共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,性能基本接近物理机; 虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
安全性:由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,docker具有一定权限访问宿主机内核,存在一定安全隐患。
使用要求:VM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持; docker共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。
总结:虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。
四、Docker的关键技术
- Namespace
- 联合文件系统
- Cgroups
五、Docker的安装
- yum install -y docker
- systemctl enable docker && systemctl start docker
- sysctl net.bridge.bridge-nf-call-iptables=1
- 配置:/etc/systemd/system/docker.servicem
- /lib/systemd/system/docker.service
- http://www.docker.org.cn/book/install/install-docker-on-rhel-29.html
六、Docker的基本使用命令
6.1、镜像管理命令
- docker pull {image_name} (拉取镜像)
- docker push {image_name} (推送镜像)
- docker images (查看当前机器的所有镜像)
- docker rmi {image_name} (删除当前机器的一个镜像)
- docker tag {source_images_name:tag your_image_name:tag}为一个镜像打tag
- docker save busybox > busybox.tar
- docker load < busybox.tar.gz
6.2、容器管理命令
- docker run --name={your_name} --d {image_name} (运行容器)
- docker ps -s -a
- docker stop {container_name} (停止容器)
- docker kill (container_name)
- docker rm -f {container_name} (容器如果运行中,-f强制删除容器;容器不在运行,可不加-f)
6.3、查信息相关命令
- docker logs -f {容器名称} (查看容器日志)
- docker info (查看docker服务的信息)
- docker inspect {容器名称} (查看容器的元数据)
6.4、与容器交互的命令
- docker exec -it {容器名称} bash进入容器,exec的意思是在容器中运行一个命令。如果是bash
并且指定了-it就会打开容器的shell交互 - docker cp {container:name}:{container_path} {host_path} 把宿主机上的一个文件copy到容器中
6.5、容器运行命令的一些参数 (docker run)
- --name指定容器名称
- -d后台运行
- -port指定端口映射规则
- --network指定容器运行的网路模式
- -v指定需要挂载的数据卷
- -env 指定需要传递给容器的环境变量