一、DOCKER基本知识介绍
1.docker是什么?
Docker 是 采用Linux Container技术的高级容器引擎,它能够提供轻量级的虚拟化,它的源代码托管在 Github 上,它是 基于go语言开发并遵从Apache2.0协议开源的一种软件。
2.docker三大金刚
镜像:(image) 运行环境的集合,镜像运行为容器
启动镜像后会增加一个空白层,所有操作都会写入到空白层上,空白层会覆盖下方的配置和操作。只能读取不能写入
仓库:(repository) 存放镜像
容器:(container) 已运行的环境
不同的容器工作在相对独立的空间,由namespace隔离,一个镜像可以启动多个容器
如果一个容器可以稳定工作,它在前端需要 有一个守护进程
3.docker网络管理
docker一开启会自动创建一个叫做docker0的网桥,可以使各个容器之间可以相互通信,容器没有自己的内核容器与容器之间采用network-namespace进行网络隔离:vethX
每一个容器会连接到自己的namespace-- vethX上,vehtX是通过网桥设备创建的,彼此之间可以相互通信,因此容器之间也是可以相互通信。
网桥设备与真实网卡之间通过NAT实现通信
4.Docker的4种网络模式
- host模式,使用--net=host指定。
- container模式,使用--net=container:NAME_or_ID指定。
- none模式,使用--net=none指定。
- bridge模式,使用--net=bridge指定,默认设置。
4.1 host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
4.2 container模式
container模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
4.3 none模式
这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
4.4 bridge模式
bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。下面着重介绍一下此模式。
二、docker安装
1.安装前准备工作:
centos7.0以上内核版本
关闭selinux与iptables,配置yum源,可以连外网:ping www.baidu.com
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl disable firewalld.service
systemctl stop firewalld.service
重启 reboot
2.docker安装
2.1脚本直接安装最新版本docker
yum clean all
yum makecache
yum -y upgrade
#升级后内核版本为7.4-1708 或 7.5-1804
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker
docker run hello-world
docker version #必须有client端与server端!!
2.2 yum安装
2.2.1、更新yum源
yum clean all
yum makecache
yum -y update
2.2.2、卸载旧版本(如果安装过旧版本的话)
yum remove docker docker-common docker-selinux docker-engine
2.2.3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum -y install yum-utils device-mapper-persistent-data lvm2
2.2.4、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2.2.5、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
2.2.6、安装docker
安装最新版本的docker: yum -y install docker-ce
安装指定版本的docker:如-------> yum -y install docker-ce-17.12.0.ce
2.2.7、启动并加入开机启动
systemctl start docker
systemctl enable docker
2.2.8、验证安装是否成功
docker version
##有client和service两部分表示docker安装启动都成功了
2.2.9 别名设置 根据个人情况而定
vim /root/.bashrc
alias vi='vim'
alias dp='docker ps -a '
alias di='docker images'
alias dr='docker rm -f $(docker ps -a -q)'
. /root/.bashrc
三、docker基本命令
docker images #查看镜像
docker ps #查看当前已经运行的容器
docker ps -a #查看当前所有的容器
docker ps -a -q #只显示当前运行的容器的ID号
docker rm -f +前4位容器ID号
docker rm -f $(docker ps -a -q) #删除当前运行的所有容器
docker pull #下载镜像 docker pull hub.c.163.com/public/centos:6.7-tools
docker run #从镜像运行为容器
docker start/stop 容器启动停止
docker rmi +别名或ID号 Docker 镜像的删除
dockers images -a -q #显示镜像所有的ID号
docker rmi -f $(docker images -a -q) #强制删除所有镜像
单一容器管理命令 :
docker ps --no-trunc #查看容器详细信息
docker stop/start CONTAINERID #通过容器id启动/停止
docker run --restart=always #容器的自动启动
docker start/stop MywordPress #通过容器别名启动/停止
docker inspect MywordPress #查看容器所有基本信息
docker logs MywordPress #查看容器日志
docker stats MywordPress #查看容器所占用的系统资源
docker exec 容器名 容器内执行的命令 # 容器执行命令
docker exec -it 容器名 /bin/bash #登陆容器的bash
其他命令 :
1.docker info 守护进程的系统资源设置
docker history 镜像名 查询镜像的分层
--no-trunc 显示完整的历史命令
2.容器打包成镜像
docker commit 93f2e50a3439/centos6 pqj/jingxiang:v1.0
打包命令 容器ID/容器名 谁的/镜像名字:版本号
3.docker-compose 多容器编排工具
docker-compose up -d 创建启动项目
docker-compose start 启动项目
docker-compose stop 关闭项目
4.镜像改标签
docker tag 镜像ID pqj/test:1.0(xx/xx/xx:xx) #一般情况下要上传镜像的时候才需要改标签!
docker tag peng/tomcat:v1.0 docker.pqj.com/library/tomcat:v1.0
5.镜像导出入导入
docker save -o /root/pqj.tar pqj/jingxiang:v1.0 #镜像导出
docker load -i test.tar #镜像导入
6.Docker程序将读取Dockerfile,根据指令生成定制的image。
docker build -t wangyang/jdk-tomcat .