docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
docker可以做到启动一个容器可以像启动一个进程一样快速
2.什么是docker:Docker是完整的一套容器管理系统
Docker提供了一组命令,让用户更加方便的使用容器技术,而不需要过多关系底层的内核技术
3.docker的优点:1)相比于传统的虚拟化技术,容器单位更小,创建起来更迅速
2)传统虚拟机需要给每个虚拟机安装操作系统
3)容器使用共享的库与程序
4)虚拟化技术要三层支持,OS(操作系统)->库支持(Libs)->应用层(App)
而Docker容器只需要两层,省略操作系统,库支持(Libs)->应用层(App)
4.docker的不足:1) 容器的隔离性没有虚拟化强
2) 公用Linux内核,安全性有缺陷
3) SELinux难驾驭
4) 监控容器和容器拍错比较困难
二、 docker容器安装1、安装宿主机操作系统,可以安装任意的操作系统,以下教程以centos操作系统为例
2、 Docker要求centos系统内核版本高于3.1.0,需要查看当前安装的centos操作系统是否支持,输入uname -r查看内核版本
3、使用root权限登录centos系统,确保yum包更新到最新,如果没有yum命令可以去163镜像下载一个进行安装
Sudo yum update
4、如果之前安装过docker需要进行卸载
yum remove docker docker-common docker-selinux docker-engine
5、安装需要的软件包,yum-util提供yum-config-manager功能
yum install -y yum-utils
6、安装docker的devicemapper驱动依赖的软件包
yum install –y device-mapper-persistent-data lvm2
7、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
8、查看所有仓库中的docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
9、安装docker
yum install docker-ce-版本号
10、启动并加入开机启动
Syste mctl start docker
Syste mctl status docker
Systemctl enable docker
11、验证安装是否成功
docker version
三、 容器及镜像命令1、docker容器是基于镜像启动的,镜像是启动容器的核心,第一步需要下载或上传一个镜像
2、搜索镜像,docker search 镜像名
3、下载镜像
docker pull 镜像名
4、查看镜像
docker images 可以查看当前安装的所有镜像
5、导出镜像
docker save 镜像名:标签 –o 导出文件名
6、导入镜像
docker load -i 文件名
7、删除镜像
docker rmi 镜像名:标签
8、启动容器
直接运行:docker run -it 镜像名:标签 执行脚本 (退出后容器会自动关闭)
后台运行:docker run -itd 镜像名:标签 执行脚本 (退出后容器不会关闭)
9、查看运行中的容器
docker ps
查看所有创建的容器:docker ps -a
10、修改tag标签
docker tag 原名:原标签名 新名称:新标签
11、连接容器attach,exec
区别:attach进入容器,exit退出时会关闭容器
exec进入容器,exit退出时不会关闭容器,仍会放到后台
格式:docker attach -it 容器id /bin/bash (ctrl+p+q可以进行保存)
docker exec -it 容器id /bin/bash
12、启动容器流程
docker ps -a 找到要启动的容器id
docker start 容器id 给容器启动起来
docker exec –it 容器id /bin/bash 进入容器
注意:使用docker run –it 镜像 使用该命令相当于使用镜像新建一个容器,连接容器时使用docker exec –it 容器id 命令。
13、将现有容器制作成镜像
docker commit 容器name 新镜像名
14、指定宿主机和容器端口的映射
docker run –it –p p1:p1 –p p2:p2 镜像名 /bin/bash
15、进入docker容器带特权(可以让容器内的root拥有宿主机root的权限,例如可以使用systemctl)
docker run -itd --privileged=true -p 80:80 镜像 /usr/sbin/init
16、拷贝本地的文件到容器
docker cp 本地路径/文件 容器ID:容器路径
17、将宿主机目录挂载到容器中
docker run -it -v /宿主机目录:/容器目录 镜像名 /bin/bash
18、查看容器内部的日志输出
docker logs 容器ID或name
19、查看容器内部的进程
docker top 容器ID
20、安装portainer.io
portainer是轻量的docker环境管理UI
docker search portainer 查找portainer的镜像
docker pull portainer/portainer 下载镜像
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/docker/portainer:/data portainer/portainer 创建容器,映射9000端口
浏览器输入:http://宿主机IP+9000端口便可登录到portainer的UI界面,可以查看到创建的镜像,容 器,在界面可以新建容器,导入导出镜像,配置网络等操作
四、docker网络- 实现原理:docker使用Linux桥接技术,在宿主机虚拟一个docker容器网桥docker0,docker启动一个容器时会根据docker网桥的网段分配给容器一个IP地址container-ip,同时docker网桥是每个容器的默认网关。因为在同一个宿主机内的容器都接入同一个网桥,容器之间就能通过容器的container-ip直接通信。docker网桥是宿主机虚拟出来的,不是真实存在的网络设备,外部网络无法通过container-ip直接访问容器,如果容器希望外部能够访问到,可以通过映射容器的端口到宿主机网络,例如映射22端口便可以直接通过xshell进行连接容器。
docker的四类网络模式:
| host模式 | -net=host | 容器和宿主机共享network namespace |
| container模式 | -net=container:name or ID | 容器和另一个容器共享network namespace |
| none模式 | -net=none | 容器有独立的network namespace,没有对其进行任何的网络配置,没有网桥连接,配置IP等 |
| Bridge模式 | -net=bridge | 默认为该模式 |



