什么是容器?

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

程序:代码,命令

进程:正在运行的程序

容器和虚拟化的区别

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

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

linux开机启动流程:

bios开机硬件自检

根据bios设置的优先启动项 网卡 硬盘 u盘 光驱

读取mbr引导 UEFI(gpt分区) mbr硬盘分区信息,内核加载路径

加载内核

启动第一个进程init systemd

系统初始化完成

运行服务

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

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

总结:

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

2、不需要指令级模拟;

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

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

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

容器技术的发展过程:

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

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

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

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

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

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

有一个相同函数名字:

. name1 sss.sh === name1.sss()

. xxxx.sh === name2.sss()

需要使用epel源

安装epel源

yum install epel-release -y

编译epel源配置文件

vi /etc/yum.repos.d/epel.repo

[epel]

name=Extra Packages for Enterprise Linux 7 - $basearch

baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch

failovermethod=priority

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - $basearch - Debug

baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=1

[epel-source]

name=Extra Packages for Enterprise Linux 7 - $basearch - Source

baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=1

安装lxc

yum install lxc-* -y

yum install libcgroup* -y

yum install bridge-utils.x86_64 -y

桥接网卡

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

echo 'TYPE=Ethernet

BOOTPROTO=none

NAME=eth0

DEVICE=eth0

ONBOOT=yes

BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0

echo 'TYPE=Bridge

BOOTPROTO=static

NAME=virbr0

DEVICE=virbr0

ONBOOT=yes

IPADDR=10.0.0.11

NETMASK=255.255.255.0

GATEWAY=10.0.0.254

DNS1=223.5.5.5' >/etc/sysconfig/network-scripts/ifcfg-virbr0

启动cgroup

systemctl start cgconfig.service

启动lxc

systemctl start lxc.service

创建lxc容器

方法1:

lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64

方法2:

lxc-create -t centos -n test

为lxc容器设置root密码:

[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd

Changing password for user root.

New password:

BAD PASSWORD: it is too simplistic/systematic

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updated successfully.

为容器指定ip和网关

vi /var/lib/lxc/centos7/config

lxc.network.name = eth0

lxc.network.ipv4 = 10.0.0.111/24

lxc.network.ipv4.gateway = 10.0.0.254

启动容器

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的安装

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

docker的主要组成部分

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

安装成功后可查看版本

命令:docker version

[root@controller ~]# docker version

Client:

Version:17.12.0-ce

API version:1.35

Go version:go1.9.2

Git commit:c97c6d6

Built:Wed Dec 27 20:10:14 2017

OS/Arch:linux/amd64

Server:

Engine:

Version:17.12.0-ce

API version:1.35 (minimum version 1.12)

Go version:go1.9.2

Git commit:c97c6d6

Built:Wed Dec 27 20:12:46 2017

OS/Arch:linux/amd64

Experimental:false

docker info(如果要做监控)

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

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

启动第一个容器

启动容器

systemctl start docker

开启自启

systemctl enable docker

配置docker镜像加速

vi /etc/docker/daemon.json

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

开启一个nginx服务的容器:

docker run -d -p 80:80 nginx

docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest

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

-d 放在后台

-p 端口映射

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

nginx docker镜像的名字

小技巧:

退出容器时使用 ctrl + p,ctrl +q 可以保证退出容器后 容器不被杀死

手动制作支持ssh登录的docker

启动一个基础容器

docker run -it -p 1022:22 centos:6.9

安装sshd服务

yum install openssh-server -y

service sshd start

echo '123456'|passwd --stdin root

把安装好软件的容器,提交为镜像

docker commit 7d40c868114a centos_ssh:v1

测试

docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D

手动制作bookManagerSystem的docker

启动一个基础容器

docker run -it -p 8080:8080 python:3.6 /bin/bash

容器部署bms项目

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django

cd /opt/

wget http://www.qstack.com.cn/bookManageSystem.zip

unzip bookManageSystem.zip

cd bookManageSystem

替换Debian源

echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib

deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib

deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib

deb-src http://mirrors.163.com/debian/ stretch main non-free contrib

deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib

deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib

deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib

deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list

apt-get update

apt-get install vim -y

vim bookManageSystem/settings.py

python manage.py migrate

python manage.py runserver 0.0.0.0:8080

把部署好bms项目的容器提交为镜像

docker commit 3e3313968bf7 bms:v1

测试

docker run -d -p 8080:8080 bms:v1 python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080

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

启动一个基础容器

docker run -it -p 8085:8080 -p 1024:22 bms:v1 /bin/bash

在容器中安装部署服务

apt-get install openssh-server

service ssh start

passwd root

修改配置文件

vim /etc/ssh/sshd_config

PermitRootLogin yes

service ssh restart

编写启动文件

vim /init.sh

#!/bin/bash

service ssh start

python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080

把部署好bms项目的容器提交为镜像

docker commit 6e44ab74fa5c bms_ssh:v4

测试

docker run -d -p 8085:8080 -p 1024:22 bms_ssh:v4 /bin/bash /init.sh

启动一个基础容器

docker run -it -p 1022:22 centos:6.9

安装sshd服务

yum install openssh-server -y

service sshd start

echo '123456'|passwd --stdin root

把安装好软件的容器,提交为镜像

docker commit 7d40c868114a centos_ssh:v1

测试

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

docker pull centos:6.8(没有指定版本,默认会下载最新版)

docker pull daocloud.io/huangzhichong/alpine-cn:latest

配置docker镜像加速

vi /etc/docker/daemon.json

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

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

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

查看镜像

docker images docker image ls

删除镜像

docker rmi 例子:docker image rm centos:latest

导出镜像

docker save 例子:docker image save centos > docker-centos7.4.tar.gz

导入镜像

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...]

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

制作dockerfile

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

at dockerfile

FROM python:3.6

ADD bookManageSystem.zip /bookManageSystem.zip

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django

RUN unzip /bookManageSystem.zip

RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py

RUN python /bookManageSystem/manage.py migrate

CMD ["python","/bookManageSystem/manage.py","runserver","0.0.0.0:8080"]

下载项目

yum install wget -y

wget http://www.qstack.com.cn/bookManageSystem.zip

修改之前的dockerfile文件

FROM python:3.6

ADD bookManageSystem.zip /bookManageSystem.zip

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django

RUN unzip /bookManageSystem.zip

RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py

RUN python /bookManageSystem/manage.py migrate

ADD sources.list /etc/apt/sources.list

RUN apt-get update

RUN apt-get install openssh-server -y

RUN service ssh start

RUN echo 'root:123456'|chpasswd

RUN echo 'PermitRootLogin yes' >>/etc/ssh/sshd_config

ADD init.sh /init.sh

CMD ["/bin/bash","/init.sh"]

编写一个执行脚本

[root@docker01 bms_ssh]# cat init.sh

#!/bin/bash

service ssh start

python /bookManageSystem/manage.py runserver 0.0.0.0:8080

最后开启一个容器

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

传自己的镜像到私有仓库

docker login 在dockerhub上注册账号并且登录

docker images

docker push centos_ssh:v3

docker tag centos_ssh:v3 t29617342/centos_ssh:v3

docker push t29617342/centos_ssh:v3

静茹docker容器的几种方法_Docker介绍及使用相关推荐

  1. 静茹docker容器的几种方法_1-容器和docker基础知识

    [TOC] ## 一 容器的概念 ### 1.什么是容器: 容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等. 也可以说:容器是一种轻量级虚拟化的技 ...

  2. 进入Docker容器的4种方式

    进入Docker容器的4种方式 在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进 ...

  3. docker容器的四种网络模式

    容器的四种网络模式 docker容器的四种网络模式:bridge 桥接模式.host 模式.container 模式和 none 模式 启动容器时可以使用 –net 参数指定,默认是桥接模式. 以下是 ...

  4. docker 容器互访三种方式

    我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢.下面介绍三种方法解决容器互访问题. 方式一.虚拟ip访问 安装docker时,docker会默认创建一个内 ...

  5. 进入正在运行的Docker容器的4种方式

    进入Docker容器比较常见的几种做法如下: 使用docker attach 使用SSH 使用nsenter 使用exec 一.使用docker attach进入Docker容器 Docker提供了a ...

  6. 修改docker容器中的文件方法

    修改docker容器配置文件方法 昨天准备修改docker容器中的配置文件,由于是xml配置文件,不需要编译,想着直接编辑一下就ok了,但是进入容器发现竟然没有vi命令,一番查找,可以使用以下方法 1 ...

  7. 【docker】Docker容器的两种运行模式(Foreground、Detached)

    文章目录 Docker容器进程有两种运行模式. 后台模式就是在后台运行,不会让当前进程卡主,你可以做其他事情,而前台模式会导致当前卡住,并输出日志至当前控制台. Foreground 前台模式(默认) ...

  8. docker 容器端口访问不到_docker容器无法访问宿主机端口的解决

    最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通. 经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可. ...

  9. docker容器别人访问很卡_docker容器下远程访问jupyter的方式

    在有一个docker容器的情况下 首先连接docker [docker容器的端口 然后安装jupyter notebook(pip即可) 在服务器上打开jupyter notebook:命令如下所示: ...

最新文章

  1. Meta小冰英伟达一起搞事!亚洲首个元宇宙生态联合体来了
  2. 百篇大计敬本年之系统篇《八》—— Ubuntu16.04 挂载windows的 NTFS 文件系统时错误的解决方法...
  3. 机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构
  4. navicat怎么查看数据库的url_连接数据库url怎么写
  5. 守护进程之PHP实现
  6. Oracle数据库学习(二)
  7. hbase 操作指令集合
  8. 架构运维篇(三):Centos7/Linux安装部署Nginx+多Tomcat负载均衡入门实践
  9. vs 中代码的字体也颜色设置
  10. 数学与计算机相关的题目,数学与计算机毕业论文题目大全 数学与计算机毕业论文题目怎么定...
  11. 【MapGIS精品教程】005:MapGIS中间件的配置与使用
  12. 计算机上有哪些操作系统?
  13. 程序员找如何才能找到传说中的女朋友?
  14. 亚马逊封号潮不断,亚马逊封号最新进展,亚马逊账号关联要怎么解决?怎么使用vmlogin浏览做到账号防关联
  15. 线性系统粗浅认识——第七次作业
  16. 苹果屏幕上的小圆点_今天才发现,苹果手机点一下屏幕就能截图,还支持长截图学到了...
  17. 基于SpringBoot的个人博客系统设计与实现
  18. 百万调音师—Audition 压缩效果器
  19. opencv 轮廓放大_【走进OpenCV】这样腐蚀下来让我膨胀!
  20. 杰理6905A更改蓝牙名字

热门文章

  1. Spring boot 忽略对mybatis的配置
  2. 编写五子棋的完整python代码_python制作简单五子棋游戏
  3. CocoaPods私有库搭建的记录
  4. iOS 关于Blocks
  5. LeetCode-135-Candy
  6. 拜托,面试别再问我时间复杂度了!!!
  7. canvas烟花锦集
  8. 遇到大容量磁盘你该怎么办?
  9. linux下的文件和文件夹的权限问题
  10. 运用面向对象原则,设计一款音乐点唱机