赞
踩
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
传统虚拟机与Docker的架构对比
传统虚拟机与Docker的特性对比
特性 | 虚拟机 | 容器 |
---|---|---|
启动时间 | 慢 | 快速 |
容量占用 | 大(GB级别) | 小(MB级别) |
系统 | 逻辑隔离 | 依赖于内核(共享) |
系统支持量 | 一般几十个 | 单机支持上千个容器 |
性能 | 弱于原生 | 接近原生 |
安全 | 强 | 弱 |
这里虚拟机打双引号是因为容器中不需要安装系统
打包应用程序简化部署
可脱离底层硬件任意迁移(例:服务器从腾讯云迁移到阿里云)
在docker的网站上提到了docker的典型场景:
Automating the packaging and deployment of applications(使应用的打包与部署自动化)
Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
1)更高效的利用系统资源
2)更快速的启动时间
3)一致的运行环境
4)持续交付和部署
5)更轻松的迁移
6)更轻松的维护和扩展
SAAS(应用即服务) devops CI/CD 持续交付/持续集成 极速迭代产品(亚马逊11.6秒)
PAAS(平台即服务) 环境(架构) docker kubernets mysql
IAAS(基础设施即服务) 硬件(服务器、网络设备、防火墙等)虚拟化、网络虚拟化——>大二层
1)Docker的核心概念
2)CentOS安装Docker的两种方式
iptables -F
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2 #在线源安装
#yum-utils提供了yum-config-manager
#Device Mapper 存储驱动程序需要device-mapper-persistent-data和lvm2
#Device Mapper是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
建立元数据缓存
更新yum源或者出现配置yum源之后,通常都会使用yum makecache 生成缓存;
这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度。
yum makecache fast
yum -y install docker-ce
cd /etc/docker #这里因为还没启动docker所以还没生成目录
systemctl start docker
systemctl enable docker
cd /etc/docker
ls
ifconfig
docker version
阿里云官网:https://account.aliyun.com/
登录阿里云–>控制台–>在上面搜索容器镜像服务–>左下角点击“镜像工具”下拉再点击“镜像加速器”
配置好加速器再重新加载服务
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["阿里云镜像加速地址"]
}
EOF
systemctl daemon-reload
systemctl restart docker
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
查看docker版本信息
docker version
docker search 服务名
例如:
docker search nginx
docker pull 服务名
例如:
docker pull nginx
docker images
docker inspect 镜像的ID
例如
docker images
docker inspect f6d0b4767a6c
注:打标签后其镜像ID不变
docker tag 仓库名:原镜像名 仓库名:新镜像名
例如:
docker tag nginx:latest nginx:test
docker images
docker images | grep nginx
docker rmi 镜像的ID
docker rmi 仓库名:镜像名
例如:
docker rmi f6d0b4767a6c
docker images
docker rmi nginx:test
docker images
docker save -o 存放镜像的位置 仓库名:镜像名
例如:
docker save -o /opt/nginx_latest nginx:latest
方法一:
docker load < 本地导出的镜像名
方法二:
docker --input 本地导出的镜像名
例如:
docker load < nginx_latest
docker load --input nginx_latest
docker push [OPTIONS] NAME[:TAG]
例如:按照下面的流程就可以上传到公有云,有兴趣的可以上传
#改标签
docker tag 仓库名:镜像名 用户名/仓库名:镜像名
#登录
docker login
Username: #用户名
Password: #密码
#上传
docker push 用户名/仓库名:镜像名
查看容器运行状态
容器的STATUS状态
up是正在运行的
Exited (0)是正常停止的容器
Exited (非0)异常停止的容器
docker ps #查看运行中的容器
docker ps -a #加-a 列出所有的容器,包括未运行的容器
docker create [选项] 镜像运行的程序
-i:让容器的标准输入保持打开
-t:让Docker分配一个伪终端
例;
docker create -it nginx:latest /bin/bash
docker start 容器ID:启动一个或多个已经被停止的容器
docker stop 容器ID:停止一个运行中的容器
docker restart 容器ID:重启容器
例:
docker start 25827a2ed368
docker ps -a
docker stop 25827a2ed368
docker ps -a
docker restart 25827a2ed368
docker run [选项] 镜像 [命令] [变量]
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-c 命令表示后面的参数将会作为字符串读入作为执行的命令
-v: 绑定一个卷
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="名称": 为容器指定一个名称
--link name:alias 添加链接到另一个容器,格式“--link容器名:别名”
例如:
docker run nginx
docker run -d nginx
docker run -d nginx /bin/bash -c "ls" #命令表示后面的参数将会作为字符串读入作为执行的命令
注意:开始第一次可以使用run,后面维护尽量使用start/stop/restart
注:容器要是运行状态,才可进入
docker exec [选项] 容器 命令
例:
docker exec -it 22550a179349 /bin/bash
docker exec -it 344fb940bebf /bin/bash
exit//退出容器
#容器导出
docker export 容器ID > 备份文件名
#容器导入(会生成镜像,而不会创建容器)
cat 备份文件名 | docker import - 仓库名:镜像名
例如:
docker export 22550a179349 > nginx_up
docker export 344fb940bebf > nginx_exited
cat nginx_up | docker import - nginx:web
docker rm 容器ID
例如:
docker rm 4d8dcf51a4ef
//批量删除容器
docker ps -a | awk '{print "docker rm "$1}' | bash
修改/etc/docker/daemon.json配置文件
注意:上面的中括号后一定要加个英文符号的逗号,否则会报错
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.2.4:5000"], 这里添加
"registry-mirrors": ["阿里云加速地址"]
}
systemctl restart docker.service
docker create -it registry /bin/bash
docker ps -a
docker start 8480e3f87c8e
注意:docker run 会自动创建相关目录,而且会重新创建容器
docker run -d -p 宿主机端口:容器内部端口 -v 宿主机目录:容器内目录 镜像
例:
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
docker tag nginx:latest 192.168.2.4:5000/nginx
docker push 192.168.2.4:5000/nginx
curl -XGET http://192.168.2.4:5000/v2/_catalog
//显示上传成功
(""repositories":[""nginx"")
先移除原有的
docker rmi 192.168.2.4:5000/nginx
再下载测试下
docker pull 192.168.2.4:5000/nginx
执行docker run命令会自动创建相关目录
docker run -v /var/www:/data1 --name test -it centos:7 /bin/bash
cd /data1/
touch test01
返回宿主机进行查看
ls /var/www/
//数据卷容器
docker run --name sjj -v /data1 -v /data2 -it centos:7 /bin/bash
//新容器挂载数据卷容器juan
docker run -it --volumes-from sjj --name test2 centos:7 /bin/bash
注:
数据卷与数据卷容器的区别
数据卷是挂载在宿主机上的
数据卷容器是通过–volumes-from实现容器与容器之间的挂载
docker run -d -P nginx
在浏览器访问
192.168.2.4:49153
可直接访问到nginx首页
docker run -d -p 40000:80 nginx
//创建并运行容器取名web1,端口号自动映射
docker run -itd -P --name web1 centos /bin/bash
//创建并运行容器取名web2,链接到web1和其通信进web22容器 ping web1
docker run -itd -P --name web2 --link web1:web1 centos /bin/bash
--link name:alias --link容器名:别名
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。