文章目录
docker理论:
Docker概述
什么是Docker
●是一种轻量级的“虚拟机”;不需要装系统
●在Linux容器里运行应用的开源工具
●Docker是基于Go语言实现的云开源项目
●Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Docker与虚拟机的区别
●Cgroup:docker安全 资源分配 资源逻辑隔离
Docker的使用场景
●打包应用程序简化部署
●可脱离底层硬件任意迁移
●例:服务器从腾讯云迁移到阿里云
●docker是不安全的,因为要和虚拟机一起共享资源
Docker的功能
●简化配置
- Docker能实现从源代码到配置都打包成一个容器,所以简化了很多配置
●整合服务器
●代码流水线管理
●调试能力
●提高开发效率
- 配置简化当然就提高了开发效率。Docker还有一个特点就是可以做到测试环境,准生产环境和线上环境几乎保持一样的环境和配置。这个极大减少了开发调试错误和解决问题的效率
●多租户
●隔离应用
- 多个应用可以放在不同的容器中隔离开来,每一个容器互不干扰其他容器内部的应用
●快速部署
- 原来的运维人员需要配置很多在线上环境,现在部署软件,就是把所有数据打包成容器,把容器下载启动和简单配置就可以快速完成部署
Docker的核心概念及安装方式
Docker核心概念
●镜像
- 一个面向Dokcer容器引擎的只读模板
●容器
- 从镜像创建的运行实例
●仓库
- 集中保存镜像的地方
CentOS安装Docker的两种方式
●使用CURL获得Docker的安装脚本进行安装
●使用YUM仓库来安装Docker
docker基础命令:
一.安装docker
1.安装依赖包
[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
yum-utils 提供了yum-config-manager
Device mapper:存储驱动程序需要device-mapper-persistent-data lvm2
Device mapper是Liunx2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构
2.设置阿里云镜像资源,下载一个docker-ce
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker-ce,并启动
[root@localhost ~]# yum -y install docker-ce
[root@localhost ~]# systemctl start docker.service ##开启docker
4.配置镜像加速,用浏览器打开阿里云官网,先登录
回到虚拟机在/etc目录下配置镜像加速,并重新加载
[root@localhost docker]# systemctl daemon-reload ##重新加载系统
[root@localhost docker]# systemctl restart docker ##重启docker服务
5.配置网络优化
[root@localhost docker]# vim /etc/sysctl.conf ##开启路由功能
net.ipv4.ip_forward=1 ##底行加入
[root@localhost docker]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost docker]# service network restart ##重启网络功能
[root@localhost docker]# systemctl restart docker ##重启服务
到此docker就安装完成了
二.docker基础命令–镜像篇
1.查看版本信息
[root@localhost docker]# docker version
2.搜索nginx镜像
docker search nginx
3.下载nginx镜像
[root@localhost docker]# docker pull nginx
4.查看镜像列表信息
[root@localhost docker]# docker images ##查看下载镜像信息
单独查看某个镜像信息
下载后镜像保存在
[root@localhost overlay2]# cd /var/lib/docker/image/overlay2/
查看详细信息:docker inspect 镜像名称
[root@localhost overlay2]# docker inspect nginx:latest ##查看nginx镜像的详细信息
5.修改镜像标签,并不是修改了原有镜像的标签而是设置了一个别名
[root@localhost overlay2]# docker tag nginx:latest nginx:web ##给nginx镜像添加新标签
6.删除镜像
删除镜像加标签:Docker rmi 镜像名称:标签
[root@localhost overlay2]# docker rmi nginx:web ##删除nginx:web标签镜像
Untagged: nginx:web
删除镜像加ID号:Docker rmi image id
[root@localhost overlay2]# docker rmi 417af7dc28bc ##删除httpd镜像
Untagged: httpd:latest
注:这种加ID删除的方法前提是这个镜像文件必须只保留一个标签不能有多个标签;不然删除会报错
7.导出;导入镜像文件
导出镜像文件
[root@localhost overlay2]# docker save -o /opt/nginx nginx:web ##将nginx镜像文件导出到opt目录下
导入(载入)镜像文件
[root@localhost overlay2]# docker rmi nginx:web ##将原有的镜像文件删除
[root@localhost overlay2]# docker load < /opt/nginx ##将/opt目录下的nginx文件导入
三.docker基础命令–容器篇
1.创建容器
- -i:让容器的标准输入保持打开
- -t:让Docker分配一个伪终端
- /bin/bash:bash终端
[root@localhost overlay2]# docker create -it nginx:web /bin/bash ##基于nginx:web镜像创建容器,
88206a23f6a716807b230484ca8ec734d3464d0baf9c53f6e931da64d13c5b03 ##创建的容器序列号
2.查看容器(所有的容器都会被显示不管有没有创建)
[root@localhost overlay2]# docker ps -a
3.启动容器
docker start ID号
[root@localhost overlay2]# docker start 88206a23f6a7 ##开启nginx容器
88206a23f6a7 ##nginx镜像ID号
端口为内部端口不是对外的,外部访问这个端口号是没法访问到nginx服务的
这时查看网卡信息
[root@localhost overlay2]# ifconfig
两个网卡信息有区别的
可以依靠这副图去理解:
4.启动执行命令查看系统根目录(将下载镜像;创建容器;启动容器结合)
下载一个centos7的镜像
[root@localhost overlay2]# docker pull centos:7
为centos7创建一个容器
[root@localhost /]# docker create -it centos:7 /bin/bash
启动centos7容器
[root@localhost /]# docker start 0212f84535ce
5.想停止centos7容器的话:docker stop ID号
[root@localhost /]# docker stop 0212f84535ce
有一个命令可以直接将三个步骤结合
这边先将刚刚创建centos7的容器删除(镜像被创建为容器后,必须先删除容器,才能再将镜像删除)
[root@localhost /]# docker ps -a ##先用查看命令查到centos7容器的ID号
[root@localhost /]# docker rm 0212f84535ce ##用docker rm ID删除容器
用查看镜像信息的命令得到Centos7的镜像ID
[root@localhost /]# docker rmi 7e6257c9f8d8 ##删除Centos7的镜像文件
用docker run 镜像名称 bash环境 -c 运行命令(会先去下载镜像再运行)
[root@localhost /]# docker run centos:7 /bin/bash -c ls /
这时查看容器状态会发现,处于exitd状态,容器运行完毕后会自动释放资源,不会占用运行资源。
如果想持续在后台运行就输入
[root@localhost /]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
要是想停止这种运行状态
[root@localhost /]# docker stop 7923d96499cc ##用docker stop的方法停止
6.进入容器(必须保证容器处于up状态)
[root@localhost /]# docker create -it centos:7 ##先创建一个centos7的容器
[root@localhost /]# docker start cb75fd9fc67b ##启动容器
[root@localhost /]# docker exec -it cb75fd9fc67b /bin/bash #docker exec -it ID号 进入容器
[root@cb75fd9fc67b /]# yum -y install net-tools ##给容器安装ifconfig查看网卡信息的命令
7.退出容器
[root@cb75fd9fc67b /]# exit ##直接退出
exit
8.容器的导入和导出
导出容器:
[root@localhost /]# docker export 88206a23f6a7 > /opt/nginx_c ##将nginx的容器导出到/opt目录下
导入容器(会生成镜像,但是不会生成容器)
[root@localhost opt]# docker rm 88206a23f6a7 ##先删除容器
[root@localhost opt]# docker rmi 3f6b82c3706c ##再删除镜像
Untagged: nginx:web
[root@localhost opt]# cat nginx_c | docker import - nginx:web ##导入nginx的容器
9.删除容器
首先必须保证这个容器的状态是exitd的状态不然是删除不了的
[root@localhost opt]# docker rm 88206a23f6a7 ##删除容器
批量删除容器
输入批量删除命令(注意容器不能是up状态,不然会删除报错,那就需要将服务停止,再删除;或者是created状态)
[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash