1:什么是容器?
容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。隔离的环境拥有自己的系统文件,ip地址,主机名等
image.png
kvm虚拟机,linux,系统文件
程序:代码,命令 进程:正在运行的程序
2:容器和虚拟化的区别
linux容器技术,容器虚拟化和kvm虚拟化的区别:
-
linux开机启动流程
image.png
- 容器启动流程: 共用宿主机内核: 第一个进程直接启动服务(nginx,httpd,mysql)
kvm虚拟化:需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统
- 3:容器技术的发展过程:
1):chroot技术,新建一个子系统(拥有自己完整的系统文件)
2):linux容器(lxc) linux container(namespaces 命名空间 隔离环境 及cgroups 进程资源限制)
3:docker容器
- docker是一种软件的打包技术
centos7.6 2G 10.0.0.11 docker01 host解析 centos7.6 2G 10.0.0.12 docker02 host解析
Docker是通过进程虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。 namespace 资源隔离 cgroups 进程的资源限制 kvm 虚拟磁盘文件,资源隔离 kvm 资源限制,--cpus --memory
docker 初期把lxc二次开发,libcontainer
4:docker的安装
10.0.0.11:修改主机名和host解析
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 version
[root@docker01 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:25:41 2019
OS/Arch: linux/amd64
Experimental: false
- docker主要组件有:镜像、容器、仓库, 网络,存储
6:启动第一个容器
- 启动容器必须需要一个镜像,仓库存储镜像 容器---镜像---仓库
- docker初次体验: 安装Nginx步骤: 官网下载Nginx源码包wget
tar 创建Nginx用户
1.配置docker镜像加速
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
2.docker启动nginx
docker run -d -p 80:80 nginx
run(创建并启动一个容器) 等于
-d 放在后台
-p 端口映射
nginx docker镜像的名字
7:docker的镜像管理
搜索镜像 docker search 选镜像的建议: 1,优先考虑官方 2,stars数量多
官方镜像仓库地址:hub.docker.com
获取镜像 docker pull(push)
镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
官方pull docker pull centos:6.8(没有指定版本,默认会下载最新版)
私有仓库pull docker pull daocloud.io/huangzhichong/alpine-cn:latest
- 镜像管理相关命令
查看镜像列表 docker images 或者 docker image ls
删除镜像 docker rmi 例子:docker image rm centos:latest
导出镜像 docker save 例子:docker image save centos -o docker-centos7.4.tar.gz
导入镜像 docker load 例子:docker image load -i docker-centos7.4.tar.gz
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)
删除容器
docker rm
批量删除容器
docker rm -f `docker ps -a -q`
9:docker容器的网络访问(端口映射)
- 首先要开启宿主机的内核转发参数,通过iptables来实现的端口映射
[root@docker01 ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
- 指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort 宿主机端口映射到容器
-p ip:hostPort:containerPort 多个容器都想使用80端口
-p 10.0.0.100::53/udp 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
-p 81:80 –p 443:443 可以指定多个-p
10:docker的数据卷管理
nginx 站点 /usr/share/nginx/html
持久化 数据卷(文件或目录)
-v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中) -v src(宿主机的目录):dst(容器的目录) 数据卷容器 --volumes-from(跟某一个已经存在的容器挂载相同的卷)
-
基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现静态页面
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站点
①.编写nginx.conf文件
[root@docker01 ~]# cat nginx/nginx.conf
server {
listen 80;
root /usr/share/nginx/html;
location / {
index index.html;
}
}
server {
listen 81;
root /opt;
location / {
index index.html;
}
}
②.下载静态页面代码
③.根据镜像起一个容器,并将目录挂载
docker run -d -p 80:80 -p 81:81 -v /root/yiliao:/opt -v /root/nginx:/etc/nginx/conf.d/ nginx:latest
11:手动将容器保存为镜像
docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]
- 1:基于容器制作镜像
①.根据镜像启动一个容器
[root@docker01 ~]# docker run -it centos6.9
②.将代码防止nginx的默认目录下
配源(centos6)
配源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
安装nginx
yum install -y nginx
删除原来的默认页面并加入新的页面
rm -f /usr/share/nginx/html/ *
vi /usr/share/nginx/html/index.html
重启nginx
nginx -s reload
③.将安装好的服务器提交为镜像
docker container commit optimistic_brahmagupta yiliao:v1
④.使用镜像启动容器访问
docker run -d -p 88:80 yiliao:v1 nginx -g 'daemon off'
网友评论