1.什么是容器
容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。隔离的环境,拥有自己的系统文件,ip地址,主机名。
程序:代码,命令。
进程:正在运行的程序。
2.容器和虚拟机的区别
容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统
虚拟机运行服务,需要经过linux开机启动流程。而容器第一个进程直接启动服务。
3.docker容器
docker是通过进程虚拟化技术来提供容器的资源隔离与安全保障等。docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要额外的操作系统开销
4.docker的安装
rm -fr /etc/yum.repos.d/local.repo
curl- o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
5.docker的主要组成部分
docker是传统的CS架构分为docker client和docker server,像mysql一样
docker主要部件有:镜像、容器、仓库、网络、存储
启动容器必须需要一个镜像,仓库存储镜像 容器--镜像--仓库
6.启动第一个容器
官方镜像网址:
- http://hub.docker.com/
配置docker镜像加速
vi/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
docker run -d -p 80:80 nginx
run(创建)
-d 放在后台
-p 端口映射
nginx docker镜像里的名字
7.docker的镜像管理
查看镜像列表 docker images(docker image ls)
删除镜像 docker rmi 例子(docker image rm centos:latest)
导出镜像 docker save 例子 (docker image save 被导出的镜像名字 -o 导出后的压缩包名字)
导入镜像 docker load 例子 (docker image load -i 要导入的镜像压缩文件)
docker search 镜像名 搜索镜像
docker pull 镜像名 没有指定版本,下载最新版镜像
docker pull 镜像名:版本 下载指定版本镜像
docker pull 域名/用户名/镜像/版本 下载私有仓库镜像
8.docker的容器管理
docker run -d -p 80:80 nginx:latest
run 创建并运行一个容器
-d 放在后台
-p 端口映射
-v 源地址(宿主机):目标地址(容器)
nginx:latest docker镜像的名字
docker run -it --name centos6 centos:6.9 /bin/bash
-it 分配交互式的终端interactive tty
--name 指定容器的名字
/bin/sh 覆盖容器的初始命令
创建运行容器
docker run image_name
docker run ==== docker create + docker start
启动容器
docker start
停止容器
docker stop CONTAINER_ID
杀死容器
docker kill container_name
查看容器列表
docker ps (-a -l -q) -a:查看全部 -l:查看最近的一条 -q:只显示ID号
进入正在运行的容器(目的,调试,排错)
docker exec (会分配一个新的终端tty)
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)
docker attach(使用同一个终端)偷偷离开ctrl+p;ctrl+q
删除容器
docker rm
批量删除容器
docker rm -f `docker ps -a -q`
总结:docker容器内的第一个进程必须一致处于前台运行的状态,否则会处于退出状态
nginx的:nginx -g 'daemon off;'
zabbix的:/usr/sbin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf
9.docker容器的网络访问(端口映射)
指定映射(docker会自动添加一条iptables规则来实现端口映射)
-p 容器端口:宿主机端口
-p 不同容器ip:容器端口:宿主机端口 多个容器都想使用同一个端口
-p 宿主机ip:空(宿主机随机端口):容器端口
-p 宿主机端口:容器端口/udp
-p 10.0.0.100::50/udp 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
-p 81:80 –p 443:443 可以指定多个-p
-P 随机端口映射
10.docker的数据卷管理
查看卷:docker volume ls
删除容器不会删除卷
-v 卷名:/data 启动一个随机的卷存放数据 (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)
-v src(宿主机的目录):dst(容器的目录)
数据卷容器
--volumes-from(跟某一个已经存在的容器挂载相同的卷)
11.手动将容器保存为镜像
1:启动一个基础容器,安装服务(部署项目)
docker run -it -p 80:80 centos:6.9
####
echo "
192.168.37.200
mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y
yum install unzip -y
cd /usr/share/nginx/html/
rm -fr *
curl -o yiliao.zip
http://192.168.37.200/191127/everyxiaoqiang-yiliao-master.zip
unzip yiliao.zip
mv yiliao/* .
####
2:把安装好服务的容器,提交成镜像
docker commit 9f366f3988cd yiliao:v1
3:测试,刚才提交的镜像
docker run -d -p 81:80 yiliao:v1 nginx -g 'daemon off;'
总结
1.什么是容器
容器就是在隔离的环境中运行的一个进程.如果进程结束,容器退出. 这个隔离的环境,有自己的系统文件,ip地址,主机名,进程管理
2:容器和虚拟机的区别
容器: 不依赖硬件cpu支持共用宿主机内核,轻量级,启动快,性能高,损坏少
虚拟化: 依赖硬件cpu支持,拥有自己的内核,
docker用的多: 节省成本
3:docker-ce的安装
centos base源 docker engine 1.13
docker.repo
yum install docker-ce 17.03 1903
4:docker主要内容
容器 镜像 仓库 网络 存储 监控
5:docker镜像常用命令
docker image:
docker image ls 查看镜像列表
docker image rm 删除镜像
docker image load 导入镜像
docker image save 导出镜像
docker image pull 下载镜像(拉取镜像)
docker image push 上传镜像
6:docker容器的常用命令
docker run 创建并启动容器
docker kill 强制关闭容器
docker rm 删除容器
docker ps 查看容器列表
docker start 启动容器
docker stop 关闭容器
docker restart 重启容器
docker exec 进入正在运行的容器(分配一个新的端口)(排查错误)
docker attach 进入正在运行的容器(同一个终端)
docker logs 查看容器的终端输出(排查错误)
7:docker端口映射
docker run -p
宿主机端口:容器端口 最常见
ip1:宿主机端口:容器端口 ip2:宿主机端口:容器端口
ip1::容器端口 随机端口
ip1::容器端口/udp
-p 宿主机端口1:容器端口1 -p 宿主机端口2:容器端口2
docker run -P 自动随机端口映射
8:docker数据卷
docker run -v 宿主机目录:容器目录 -v 宿主机文件:容器文件
9:手动制作镜像
a:启动一个基础容器,在容器安装自己的服务
b:把安装好服务的容器提交为镜像
c:测试镜像是否可用