01-docker基础

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;
        }
}

②.下载静态页面代码

image.png

③.根据镜像起一个容器,并将目录挂载
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'

你可能感兴趣的:(01-docker基础)