文章目录
Docker概述
一、Docker是什么?
1、容器:一种轻量级的“虚拟机”
·在Linux容器里运行应用的开源工具
·每个容器共享宿主机内核 创建一个容器是秒级启动
·传统虚拟机:每台虚拟机拥有一个独立的内核 创建一个是分钟级别
容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离,如果虚拟机需要一分钟来启动,那容器只需要一秒钟甚至更短。容器使用宿主操作系统的内核,而虚拟机使用独立的内核,Docker的局限之一, 它只能运行在64的操作系统上。
安全:虚拟机安全级别高,容器安全级别弱
二、Docker优势
1、交付物标准化
·Docker是软件工程领域的"标准化"交付组件﹐最恰到好处的类比是"集装箱"。
·集装箱将零散、不易搬运的大量物品封装成一个整体﹐集装箱更重要的意义在于它提供了一种通用的封装货物的标准。
·标准化设计大大提高了物流体系的运行效率。
·传统的软件交付物包括∶应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件。
·Docker的标准化交付物称为"镜像",它包含了应用程序及其所依赖的运行环境﹐大大简化了应用交付的模式。
2、一次构建,多次交付
类似于集装箱的"一次装箱﹐多次运输" ,Docker镜像可以做到"一次构建﹐多次交付"。当涉及到应用程序多副本
部署或者应用程序迁移时,更能体现Docker的价值。
3、应用隔离
集装箱可以有效做到货物之间的隔离﹐使化学物品和食品可以堆砌在一起运输。Docker可以隔离不同应用程序
之间的相互影响﹐但是比虚拟机开销更小。
总之﹐容器技术部署速度快﹐开发、测试更敏捷﹔提高系统利用率﹐降低资源成本
Docker的核心概念及安装方式
一、Docker核心概念
Docker images——镜像 环境的压缩包
一个面向Docker容器引擎的只读模板
Docker registeries——容器 实例
从镜像创建的运行实例
Docker containers——仓库
集中保存镜像的地方
仓库里存的是镜像,镜像运行起来的是容器。容器可以被创建、启动、停止、删除、暂停等。
二、安装
安装Docker
systemctl stop firewalld.service
systemctl disable firewalld.serice
setenforce 0
安装最新版本Docker依赖版本环境
yum install -y yum-utils device-mapper-persistent-data lvm2
设置docker的镜像源
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装Docker并设置为开机自动启动
yum install docker-ce
systemctl start docker
systemctl enable docker
docker的中央仓库
1、docker官方的中央仓库,这个仓库镜像最全,但是下载速度较慢
http://docs.docker.com
2、国内的镜像网站
https://c.163yun.com/hub#/home
http://hub.daocloud.io (推荐使用)
配置阿里云镜像加速
登录阿里云官方网站
网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
Docker镜像
一、镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接运行起来。
·从远程仓库下载
·自己制作镜像 DockerFile
二、加载原理
UnionFS ( 联合文件系统)
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system),在bootfs之上。包含的就是典型Linux系统中的/dev, /proc,/bin, letc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu , Centos等等。
Docker基础命令详解
镜像操作
检查Docker版本查看Docker服务
docker version
搜索镜像
docker search关键字
获取镜像
docker pull 仓库名称[:标签]
查看镜像
docker images仓库名称[:标签]
docker inspect 镜像ID号
改标签
docker tag nginx:latest cw/nginx:web//用户名/仓库名:镜像名
查询镜像详细信息
docker inspect 镜像名称
删除镜像
通过镜像id删除
docker rmi 镜像的标识(image id)
删除全部镜像
docker rmi $(docker images -qa)
有镜像tag的时候,删除要用名称删除,用id删除不了
docker rmi 镜像名称
将本地的镜像导出
docker save -o 导出的路径 镜像id
docker save -o /opt/aaa cb6904dc71e1
加载本地镜像文件
方法一:docker load < 文件名
方法二:docker --input 文件名
docker的默认工作路径
/var/lib/docker
容器操作
容器创建
docker create -it nginx:latest /bin/bash
查看容器
docker ps [-qa]
选项:
-a:列出当前正在运行的容器+带出历史运行过的容器
-q:只查看容器的编号
-n=?:显示最近创建的容器
启动容器
docker start
进入到容器内部
docker exec -it 容器id bash
docker attach 容器id
区别:
docker exec:进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach:进入容器正在执行的终端,不会启动新的进程
删除容器
删除容器前,需要先停止容器
docker stop 容器id #停止指定的容器
docker stop $(docker ps -qa) #停止全部容器
docker rm 容器id #删除指定的容器
docker rm $(docker ps -qa) #删除全部容器
批量删除
docker ps -a | awk '{print "docker rm "$1}' | bash #只删除不运行的容器,保留只运行的容器
退出容器
exit #直接容器停止并退出
Ctrl+P+Q #容器不停止退出
将容器内文件拷贝到主机上
docker cp 容器id:容器内路径(绝对路径) 目的的主机路径
在主机上操作,不是在容器内
运行容器后执行命令
docker run centos:7 /usr/bin/bash -c ls*
持续在后台执行
docker run -d paigeeworld/centos7 /bin/bash -c "while true;do echo hello;done" #死循环
容器导出
docker export 6c9aabe7b1e5 > cwnginx
容器导入
会生成镜像,而不会创建容器
cat cwnginx | docker import - nginx:web
私有仓库
载registry镜像
docker pull registry
vim /etc/docker/daemon.json
"insecure-registries": ["192.168.195.70:5000"], #添加
"registry-mirrors": ["https://05vz3np5.mirror.aliyuncs.com"]
systemctl restart docker.service
docker create -it registry /bin/bash
docker ps -a
docker start 6f7497fcc8c2
宿主机的/data/registry自动创建挂载容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
更改标记为192.168.126.70:5000/nginx
docker tag nginx:latest 192.168.126.70:5000/nginx
上传
docker push 192.168.126.70:5000/nginx
获取私有仓库列表
curl -XGET http://192.168.126.70:5000/v2/_catalog
Docker 教据卷
'创建数据卷'
docker run -v 宿主机目录:容器内部目录 --name 数据卷名 -it 镜像名 /bin/bash
docker pull centos:7
# 宿主机目录/var/www挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
数据卷容器
创建数据卷容器
docker run --name web2 -v /data1 -v /data2 -it centos:7/bin/bash
新容器挂载数据卷容器web2
docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
端口映射
docker run -d -P nginx:latest #-P 随机映射端口
docker run -d -P 88:80 nginx:latest # -p指定映射端口
容器互联
使用centos镜像
docker run -itd -P --name web11 centos:7 /bin/bash
#创建并运行容器取名web11,端口号自动映射
docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash
#创建并运行容器取名web2,链接到web11和其通信进web22容器
docker exec -it ed3bde /bin/bash 进入web22容器
ping web11