一、docker介绍
容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,
容器的隔离环境,拥有自己的IP地址,系统文件,主机名,进程管理
(一)、容器和虚拟机的区别
虚拟机
硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
启动流程
bios开机自检--根据bios启动项--读取硬盘第一个扇区grub,uefi, centos7, 加载内核,启动系统第一个进程/sbin/init systemd
容器
不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程
(二)、docker主要内容
docker是一个cs架构, docker主要内容:镜像 容器 仓库 网络 存储 监控
docker是一个软件的打包技术
docker镜像官方仓库
Docker Hub
(三)、docker 命令分组
docker image 镜像命令
docker container 容器命令
docker volume 卷命令
docker network 网络命令
(四)、容器的作用
![be1a3a667d9585fbedefe2d70f055ac6.png](https://i-blog.csdnimg.cn/blog_migrate/05f4c529805d55b5ec0c519bd772abfa.jpeg)
docker使用客户端-服务端(C/S)架构模式,使用远程API来管理和创建docker容器
docker容器通过docker镜像来创建
(五)、容器优势
启动快,性能高,损耗少,轻量级
持续集成、版本控制、可移植性、隔离性和安全性
二、docker系统架构
镜像(images)
Docker镜像是用于创建Docker容器的模板。
容器(Container)
容器是独立运行的一个或一组应用。
客户端(Client)
docker客户端通过命令行或者其他工具使用Docker API与Docker的守护进程通信。
主机(Host)
一个物理或者虚拟机的机器用于执行Docker守护进程和容器。
仓库(Registry)
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub提供了庞大的镜像集合供使用。
Docker Machine
Docker Machine是一个简化Docker安装命令的命令行工具,
通过一个简单的命令行即可在相应的平台上安装Docker,
比如VirtualBox、Digital Ocean、Microsoft Azure。
![2cc715fe1d923ef499db3486383deaab.png](https://i-blog.csdnimg.cn/blog_migrate/d782cf3ad68e62afabbc794de2dea4e0.jpeg)
三、docker安装
环境准备
![98bea620739c5bee2ed6f598b07b9cc2.png](https://i-blog.csdnimg.cn/blog_migrate/838b3c216694f10bc3a3a4e75b013c07.png)
第一步:安装docker-ce
1、下载yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
2、优化yum源
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
3、下载docker
yum install docker-ce -y
第二步:启动docker
systemctl enable docker
systemctl start docker
第三步:验证(查看docker版本信息)
docker version
四、docker日常管理
(一)、docker镜像管理
docker镜像加速
1、编写指定文件daemon.json(默认不存在)
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
2、重启docker服务
systemctl restart docker
2、管理命令
搜索镜像(优先选官方,stars数量多)
docker search php
#命令 镜像名称
拉取镜像(下载镜像,注意版本)
docker pull httpd:latest
#命令 镜像名称:版本
推送镜像(上传镜像)
docker container commit nginx centos6.9_nginx:v1
#命令 容器 名称 镜像名称:版本
查看镜像属性
docker image inspect centos:6.9
#命令 镜像名称
导入镜像
docker image load -i docker_nginx.tar.gz
#命令 导入 镜像路径
docker image import docker_nginx.tar.gz
#命令 导入
import导入: 不会导入镜像的名称和版本
load导入 : 会导入镜像的名称和版本
导出镜像
docker save centos:7 -o /tmp/docker_centos7.tar.gz
#命令 镜像 导出 导出位置
查看本地镜像列表
docker image ls
删除镜像
docker image rm centos:6.9
#命令 镜像名称
删除所有镜像
docker rmi -f $(docker images -q)
给镜像打标签
docker image tag 026818835a64 oldboy:v1
#命令 镜像ID 镜像名称:版本
清理镜像
docker image prune
(二)、docker容器管理
创建并启动容器
docker run -d -p 80:80 --name web01 nginx:latest
-d #后台运行容器
-p #进行端口映射(宿主机端口:容器服务端口)
--name #指定容器名称
nginx:latest #镜像名称:版本
创建并进入容器
docker run -it centos:6.9 /bin/bash
-it #分配一个交互式终端
创建容器
docker container create --name web04 nginx:latest
--name #创建容器时指定容器名称,如果不指定,系统自动生成
nginx:latest #镜像名称:版本(必须指定)
启动容器
docker container start web03
#命令 容器名称
停止容器
docker container stop web03
重启容器
docker container restart web03
强制停止容器
docker container kill web03
显示容器相对于镜像的改变
docker diff web01
查看容器列表
docker ps -a -q
-a #查看所有容器,长格式显示
-q #只显示容器ID
-l #只显示最后一个容器
不加-a只查看挂起或者启动状态的容器
查看容器状态
docker stats
--no-stream #只显示一次的状态信息
删除容器
docker container rm web03
docker container rm -f web03
-f #强制删除
批量删除所有容器:docker rm -f `docker ps -a -q`
清理容器
docker container prune
查看容器状态
docker inspect web02
查看容器日志
docker logs web02
进入正在运行的容器(分配一个新终端)
docker exec -it web /bin/bash
进入正在运行的容器(使用相同的终端)
偷偷离开的快捷键ctrl +p松开再按ctrl +q
docker container attach web01
docker端口映射
-p 宿主机端口:容器端口
docker run -d -p 80:80 --name web01 nginx:latest
-p 宿主机ip1:宿主机端口:容器端口 (多个容器同时使用80端口)
docker run -d -p 10.0.0.12:85:80 nginx:latest
-p 宿主机ip1::容器端口 随机端口映射
docker run -d -p 10.0.0.12::80 --name web01 nginx:latest
-p 宿主机ip1::容器端口/udp 使用udp协议做随机端口映射
docker run -d -p 10.0.0.12::80/udp nginx:latest
-p 80:80 -p 3306:3306
docker run -d -p 10.0.0.12::80 -p 10.0.0.13::8080 --name web03 nginx:latest
-p 1111-1119:1111-1119 端口范围映射
docker run -d -p 90-95:70-75 --name web04 nginx:latest
-P 自动随机端口映射
docker run -d -P --name web05 nginx:latest