Docker介绍及使用
什么是容器?
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,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)
有一个相同函数名字:
. 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 介绍
docker 介绍 安装 sudo apt-get install docker.io sudo docker info 查看是否安装成功 hello world sodu docker run he ...
- Docker介绍基本概念(一)
Docker介绍基本概念 1.什么是Docker? 说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西. Docker是世界领先的软件容器平台. Docker使用 ...
- Docker 介绍及安装
Docker介绍 Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建.运行.分发容器). Docker基于go语言并遵从Apache2.0协议 ...
- Docker应用一:docker介绍
Docker介绍与安装 一.Docker与传统虚拟化区别 直接看下图: 传统虚拟化实现架构 doc ...
- Docker介绍及安装
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- docker介绍和简单使用
docker介绍 docker 为什么会有docker出现? 一款产品从开发到上线,从操作系统到运行环境,再到应用配置,作为开发+运维直接的协作我们需要关心很多东西,这也是互联网公司不得 不面对问题, ...
- docker介绍和安装(一)
虚拟化简介 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 ...
- Docker介绍及安装(一)
一.Docker简介 1.1 docker介绍 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 ...
- 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云
一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...
- docker 介绍及安装操作
docker 介绍及安装操作 1.docker概述 2.docker安装及操作 1.docker概述: Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在L ...
随机推荐
- Java对象在Hibernate持久化层的状态
-临时状态:刚用new语句创建对象,还没有被持久化,并且不处于Session缓存中.处于临时状态的java对象被称为临时对象. -持久化状态:已经被持久化,并且加入到Session的缓存中.处于持久化 ...
- MySQL中的EXPLAIN
使用EXPLAIN加上SELECT语句可以获取优化器的查询执行计划 MySQL会在查询上设置一个标记,当执行查询时,这个标记会返回关于在执行计划中每一步的信息,而不是执行它.它会返回一行或多行信息,一 ...
- Linux如何实现进程监控和守护
最近新搭建的亚马逊EC2服务器, 上面部署了一个静态的WEB, 启动了一个nginx做代理.最近发现一个问题: Nginx进程隔一段时间就莫名的挂掉了, 然后就出现了网站无法打开的窘境.. 为了防止这 ...
- linux下查询进程占用的内存方法总结
linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...
- vi命令撤销及恢复
u :插销上一步操作 Ctrl + r :恢复被撤销的上一步操作
- CF 219D 树形DP
CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ...
- 利用Oracle Database Resource Manager实现UNDO表空间的quota
1.查出当前使用的是哪个resource plan select * from GV$RSRC_PLAN 2.创建pending area begin dbms_resource_manager.c ...
- 如何执行shell命令
可使用 git 命令行来执行shell命令,如 D 盘下的一 shell 脚本 test.sh 如下: echo "Hello world" 打开命令行,输入命令执行: 转载请注明 ...
- SpringBoot整合Apache Shiro权限验证框架
比较常见的权限框架有两种,一种是Spring Security,另一种是Apache Shiro,两种框架各有优劣,个人感觉Shiro更容易使用,更加灵活,也更符合RABC规则,而且是java官方更推 ...
- Oarcle之group by关键字与having关键字
group by关键字 *group by :分组由 作用: 用于对于查询的数据进行分组并进行处理 例如:select deptno ,job from emp group by deptno, ...