什么是容器?

容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等,kvm虚拟机,linux,系统文件

程序:代码,命令

进程:正在运行的程序

容器和虚拟化的区别

linux容器技术,容器虚拟化和kvm虚拟化的区别

kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

linux开机启动流程:

  • bios开机硬件自检
  • 根据bios设置的优先启动项 网卡 硬盘 u盘 光驱
  • 读取mbr引导 UEFI(gpt分区) mbr硬盘分区信息,内核加载路径
  • 加载内核
  • 启动第一个进程init systemd
  • 系统初始化完成
  • 运行服务

容器:共用宿主机内核,运行服务,损耗少,启动快,性能高

容器虚拟化:不需要硬件的支持。不需要模拟硬件,共用宿主机的内核,启动时间秒级(没有开机启动流程)

总结:

1、与宿主机使用同一个内核,性能损耗小;

2、不需要指令级模拟;

3、容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;

4、避免了准虚拟化和系统调用替换中的复杂性;

5、轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。

容器技术的发展过程:

chroot技术,新建一个子系统(拥有自己完整的系统文件)

参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

chang root

linux容器(lxc) linux container(namespaces 命名空间 隔离环境 及cgroups 资源限制)

宿主机namespace ip地址 主机名 系统文件 进程

子系统namespace,ip地址 主机名 系统文件 进程

cgroups 限制一个进程能够使用的资源。cpu,内存,硬盘io

kvm虚拟机:资源限制(1c 1G 20G)

有一个相同函数名字:

  1. . name1 sss.sh === name1.sss()
  2. . xxxx.sh === name2.sss()

需要使用epel源

安装epel源

  1. yum install epel-release -y

编译epel源配置文件

  1. vi /etc/yum.repos.d/epel.repo
  2. [epel]
  3. name=Extra Packages for Enterprise Linux 7 - $basearch
  4. baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
  5. mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
  6. failovermethod=priority
  7. enabled=1
  8. gpgcheck=1
  9. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
  10. [epel-debuginfo]
  11. name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
  12. baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
  13. mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
  14. failovermethod=priority
  15. enabled=0
  16. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
  17. gpgcheck=1
  18. [epel-source]
  19. name=Extra Packages for Enterprise Linux 7 - $basearch - Source
  20. baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
  21. mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
  22. failovermethod=priority
  23. enabled=0
  24. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
  25. gpgcheck=1

安装lxc

  1. yum install lxc-* -y
  2. yum install libcgroup* -y
  3. yum install bridge-utils.x86_64 -y

桥接网卡

  1. [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
  2. echo 'TYPE=Ethernet
  3. BOOTPROTO=none
  4. NAME=eth0
  5. DEVICE=eth0
  6. ONBOOT=yes
  7. BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0
  8. [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0
  9. echo 'TYPE=Bridge
  10. BOOTPROTO=static
  11. NAME=virbr0
  12. DEVICE=virbr0
  13. ONBOOT=yes
  14. IPADDR=10.0.0.11
  15. NETMASK=255.255.255.0
  16. GATEWAY=10.0.0.254
  17. DNS1=223.5.5.5' >/etc/sysconfig/network-scripts/ifcfg-virbr0

启动cgroup

  1. systemctl start cgconfig.service

启动lxc

  1. systemctl start lxc.service

创建lxc容器

  1. 方法1:
  2. lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64
  3. 方法2
  4. lxc-create -t centos -n test

为lxc容器设置root密码:

  1. [root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd
  2. Changing password for user root.
  3. New password:
  4. BAD PASSWORD: it is too simplistic/systematic
  5. BAD PASSWORD: is too simple
  6. Retype new password:
  7. passwd: all authentication tokens updated successfully.

为容器指定ip和网关

  1. vi /var/lib/lxc/centos7/config
  2. lxc.network.name = eth0
  3. lxc.network.ipv4 = 10.0.0.111/24
  4. lxc.network.ipv4.gateway = 10.0.0.254

启动容器

  1. lxc-start -n centos7

docker容器 (对lxc进行改进,当前流行)

Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率

namespace 资源隔离

cgroups 进程的资源限制

kvm 虚拟磁盘文件,资源隔离

kvm 资源限制,--cpus --memory

docker 初期把lxc二次开发,libcontainer

docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行

部署服务,环境问题

一次构建,处处运行

docker是一种软件的打包技术

构建:做一个docker镜像

运输:docker pull

运行:启动一个容器

每一个容器,他都有自己的系统文件rootfs.

kvm解决了硬件和操作系统之间的依赖

kvm独立的虚拟磁盘,xml配置文件

docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。

docker镜像有自己的文件系统。

docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

docker的安装

  1. rm -fr /etc/yum.repos.d/local.repo
  2. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
  4. sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
  5. yum install docker-ce -y

docker的主要组成部分

docker是传统的CS架构分为docker client和docker server,像Mysql一样

  1. 安装成功后可查看版本
  2. 命令:docker version
  3. [root@controller ~]# docker version
  4. Client:
  5. Version: 17.12.0-ce
  6. API version: 1.35
  7. Go version: go1.9.2
  8. Git commit: c97c6d6
  9. Built: Wed Dec 27 20:10:14 2017
  10. OS/Arch: linux/amd64
  11. Server:
  12. Engine:
  13. Version: 17.12.0-ce
  14. API version: 1.35 (minimum version 1.12)
  15. Go version: go1.9.2
  16. Git commit: c97c6d6
  17. Built: Wed Dec 27 20:12:46 2017
  18. OS/Arch: linux/amd64
  19. Experimental: false

docker info(如果要做监控)

docker主要组件有:镜像、容器、仓库, 网络,存储

启动容器必须需要一个镜像,仓库中只存储镜像 容器---镜像—仓库

启动第一个容器

  1. 启动容器
  2. systemctl start docker
  3. 开启自启
  4. systemctl enable docker
  5. 配置docker镜像加速
  6. vi /etc/docker/daemon.json
  7. {
  8. "registry-mirrors": ["https://registry.docker-cn.com"]
  9. }
  10. 开启一个nginx服务的容器:
  11. docker run -d -p 80:80 nginx
  12. docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
  13. run(创建并运行一个容器)
  14. -d 放在后台
  15. -p 端口映射
  16. -v 源地址(宿主机):目标地址(容器)
  17. nginx docker镜像的名字
  18. 小技巧:
  19. 退出容器时使用 ctrl + pctrl +q 可以保证退出容器后 容器不被杀死

手动制作支持ssh登录的docker

  1. 启动一个基础容器
  2. docker run -it -p 1022:22 centos:6.9
  3. 安装sshd服务
  4. yum install openssh-server -y
  5. service sshd start
  6. echo '123456'|passwd --stdin root
  7. 把安装好软件的容器,提交为镜像
  8. docker commit 7d40c868114a centos_ssh:v1
  9. 测试
  10. docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D

手动制作bookManagerSystem的docker

  1. 启动一个基础容器
  2. docker run -it -p 8080:8080 python:3.6 /bin/bash
  3. 容器部署bms项目
  4. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
  5. cd /opt/
  6. wget http://www.qstack.com.cn/bookManageSystem.zip
  7. unzip bookManageSystem.zip
  8. cd bookManageSystem
  9. 替换Debian
  10. echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib
  11. deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
  12. deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
  13. deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
  14. deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
  15. deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
  16. deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
  17. deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list
  18. apt-get update
  19. apt-get install vim -y
  20. vim bookManageSystem/settings.py
  21. python manage.py migrate
  22. python manage.py runserver 0.0.0.0:8080
  23. 把部署好bms项目的容器提交为镜像
  24. docker commit 3e3313968bf7 bms:v1
  25. 测试
  26. docker run -d -p 8080:8080 bms:v1 python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080

制作一个支持多服务的docker镜像

  1. 启动一个基础容器
  2. docker run -it -p 8085:8080 -p 1024:22 bms:v1 /bin/bash
  3. 在容器中安装部署服务
  4. apt-get install openssh-server
  5. service ssh start
  6. passwd root
  7. 修改配置文件
  8. vim /etc/ssh/sshd_config
  9. PermitRootLogin yes
  10. service ssh restart
  11. 编写启动文件
  12. vim /init.sh
  13. #!/bin/bash
  14. service ssh start
  15. python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080
  16. 把部署好bms项目的容器提交为镜像
  17. docker commit 6e44ab74fa5c bms_ssh:v4
  18. 测试
  19. docker run -d -p 8085:8080 -p 1024:22 bms_ssh:v4 /bin/bash /init.sh
  20. 启动一个基础容器
  21. docker run -it -p 1022:22 centos:6.9
  22. 安装sshd服务
  23. yum install openssh-server -y
  24. service sshd start
  25. echo '123456'|passwd --stdin root
  26. 把安装好软件的容器,提交为镜像
  27. docker commit 7d40c868114a centos_ssh:v1
  28. 测试
  29. docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D

docker的镜像管理

搜索镜像

docker search

选镜像的建议:

  • 优先考虑官方
  • stars数量多

获取镜像

docker pull(push)

镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com

  1. docker pull centos:6.8(没有指定版本,默认会下载最新版)
  2. docker pull daocloud.io/huangzhichong/alpine-cn:latest

配置docker镜像加速

  1. vi /etc/docker/daemon.json
  2. {
  3. "registry-mirrors": ["https://registry.docker-cn.com"]
  4. }

第三方docker镜像仓库,使用方法:

docker pull index.tenxcloud.com/tenxcloud/httpd:latest

  1. 查看镜像
  2. docker images docker image ls
  3. 删除镜像
  4. docker rmi 例子:docker image rm centos:latest
  5. 导出镜像
  6. docker save 例子:docker image save centos > docker-centos7.4.tar.gz
  7. 导入镜像
  8. docker load 例子:docker image load -i docker-centos7.4.tar.gz

docker的容器管理

docker run -d -p 80:80 nginx:latest

run(创建并运行一个容器)

-d 放在后台

-p 端口映射

-v 源地址(宿主机):目标地址(容器)

nginx docker镜像的名字

docker run -it --name centos6 centos:6.9 /bin/bash

-it 分配交互式的终端

--name 指定容器的名字

/bin/sh覆盖容器的初始命令

  • 启动容器

    docker run image_name

    docker run -it image_name CMD

docker run ==== docker create + docker start

  • 停止容器

    docker stop CONTAINER_ID

  • 杀死容器

    docker kill container_name

  • 查看容器列表

    docker ps

    docker ps –a

  • 进入容器(目的,调试,排错)

    *** docker exec (会分配一个新的终端tty)

    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

  1. docker exec -it 容器id或容器名字 /bin/bash(/bin/sh

制作dockerfile

首先创建一个dockerfile文件 写入内容

  1. at dockerfile
  2. FROM python:3.6
  3. ADD bookManageSystem.zip /bookManageSystem.zip
  4. RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
  5. RUN unzip /bookManageSystem.zip
  6. RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py
  7. RUN python /bookManageSystem/manage.py migrate
  8. CMD ["python","/bookManageSystem/manage.py","runserver","0.0.0.0:8080"]

下载项目

  1. yum install wget -y
  2. wget http://www.qstack.com.cn/bookManageSystem.zip

修改之前的dockerfile文件

  1. FROM python:3.6
  2. ADD bookManageSystem.zip /bookManageSystem.zip
  3. RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
  4. RUN unzip /bookManageSystem.zip
  5. RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py
  6. RUN python /bookManageSystem/manage.py migrate
  7. ADD sources.list /etc/apt/sources.list
  8. RUN apt-get update
  9. RUN apt-get install openssh-server -y
  10. RUN service ssh start
  11. RUN echo 'root:123456'|chpasswd
  12. RUN echo 'PermitRootLogin yes' >>/etc/ssh/sshd_config
  13. ADD init.sh /init.sh
  14. CMD ["/bin/bash","/init.sh"]

编写一个执行脚本

  1. [root@docker01 bms_ssh]# cat init.sh
  2. #!/bin/bash
  3. service ssh start
  4. python /bookManageSystem/manage.py runserver 0.0.0.0:8080

最后开启一个容器

  1. docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry

传自己的镜像到私有仓库

  1. docker login dockerhub上注册账号并且登录
  2. docker images
  3. docker push centos_ssh:v3
  4. docker tag centos_ssh:v3 t29617342/centos_ssh:v3
  5. docker push t29617342/centos_ssh:v3

Docker介绍及使用的更多相关文章

  1. docker 介绍

    docker 介绍 安装 sudo apt-get install docker.io sudo docker info 查看是否安装成功 hello world sodu docker run he ...

  2. Docker介绍基本概念(一)

    Docker介绍基本概念 1.什么是Docker? 说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西. Docker是世界领先的软件容器平台. Docker使用 ...

  3. Docker 介绍及安装

    Docker介绍 Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建.运行.分发容器). Docker基于go语言并遵从Apache2.0协议 ...

  4. Docker应用一:docker介绍

    Docker介绍与安装 一.Docker与传统虚拟化区别 直接看下图:                  传统虚拟化实现架构                                   doc ...

  5. Docker介绍及安装

    Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  6. docker介绍和简单使用

    docker介绍 docker 为什么会有docker出现? 一款产品从开发到上线,从操作系统到运行环境,再到应用配置,作为开发+运维直接的协作我们需要关心很多东西,这也是互联网公司不得 不面对问题, ...

  7. docker介绍和安装(一)

    虚拟化简介 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 ...

  8. Docker介绍及安装(一)

    一.Docker简介 1.1 docker介绍 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 ...

  9. 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云

    一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...

  10. docker 介绍及安装操作

    docker 介绍及安装操作 1.docker概述 2.docker安装及操作 1.docker概述: Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在L ...

随机推荐

  1. macOS 版微信小助手,支持微信多开、防撤回、远程控制mac、自动回复等等

    微信小助手 GitHub大牛提供的微信小助手是一款插件,该插件具备多开.防撤回.免手机认证登录.自动回复.远程控制自己的 macOS.群发等众多功能 GitHub网址:https://github.c ...

  2. Oracle控制文件冗余

    1.备份参数文件.检查控制文件.检查磁盘组名 sqlplus / as sysdba !echo "create pfile='$HOME/pfile_$ORACLE_SID_`date + ...

  3. Kali Hydra SSL issue, xHydra (GUI version of Hydra) works just fine

    First find the source code. (https://is.gd/LlS5Sy) - Example search Once located you must download i ...

  4. IMU 标定 | 工业界和学术界有什么不同?

    点击"计算机视觉life"关注,置顶更快接收消息! 由于格式问题最好在公众号上观看<IMU 标定-工业界和学术界有什么不同?> 本文主要介绍了IMU基本结构原理和误差的 ...

  5. PrintWriter write返回数据显示中文变问号"???"

    在response.getWriter();前加上这些就ok了 response.setContentType("text/html;charset=UTF-8"); respon ...

  6. Spring Boot入门 and Spring Boot与ActiveMQ整合

    1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无 ...

  7. 求你显示pdf

    123 <iframe src='http://km.shengaitcm.com/ADC/_layouts/15/WopiFrame.aspx?sourcedoc=%2FADC%2FDocLi ...

  8. Docker下配置双机热备PXC集群

    架构: 步骤: 1.安装centos7   ,设置宿主机IP:192.168.1.224 2.先更新yum软件管理器,再安装docker 1.yum -y update 2.yum install - ...

  9. Tarjan求LCA

    LCA问题算是一类比较经典的树上的问题 做法比较多样 比如说暴力啊,倍增啊等等 今天在这里给大家讲一下tarjan算法! tarjan求LCA是一种稳定高速的算法 时间复杂度能做到预处理O(n + m ...

  10. 安装percona-toolkit工具时遇到的问题

    1. 从这个链接https://www.percona.com/doc/percona-toolkit/3.0/index.html下载percona-toolkit安装包 2. 下载完成通过ftp工 ...