Docker概念:
- Docker 是一个开源的应用容器引擎,诞生于2013年初,基于 Go 语言 并遵从Apache2.0协议开 源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任 何流行的
- Linux 机器上,也可以实现虚拟化
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)
- 更重要的是容器性能开销极低。
小结:docker是一种容器技术,解决软件跨环境迁移的问题
Docker应用场景:
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
LXC(linux container)与dockers关系
- Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和控制资源分配
- Docker并不是LXC的替代品,Docker的底层就是使用了LXC来实现的。LXC将Linux进程沙盒化,使得进程之间 相互隔离,并且能够控制各进程的资源分配。
- 在LXC的基础之上,Docker提供了一系列更强的功能。 Linux容器(lxc) linux container(namespaces命名空间 隔离环境 及cgroups资源限制) cgroups 限制一个进程能够使用的资源 cpu 内存 硬盘 IO kvm虚拟机: 资源限制(1核 1G 20G)
容器的核心技术:
容器的核心技术是 Cgroup + Namespace
容器 = cgroup + namespace + rootfs + 容器引擎
• Cgroup: 资源控制
• namespace: 访问隔离
• rootfs:文件系统隔离。镜像的本质就是一个rootfs文件 • 容器引擎:生命周期控制
Docker中的三个基本概念
- Image(镜像) ---IOS
- Container(容器) ---镜像运行
- Repository(仓库)
镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
Docker引擎
docker引擎是一个c/s结构的应用,
主要组件:
• Server是一个常驻进程
• REST API 实现了client和server间的交互协议
• CLI 实现容器和镜像的管理,为用户提供统一的操作界
Docker安装
环境准备:
由于 Docker-CE 支持 64 位版本的 CentOS 7 ,并且要求内核版本不低于 3.10
进行检查命令:
在进行安装之前,我们先删掉其旧版本
命令:yum remove docker
安装依赖包:
[root@model ~]# yum install -y yum-utils device-mapper-persistent-data vm2
安装docker:
root@gitlab-server harbor]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#注 意源 [root@gitlab-server yum.repos.d]# sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/ yum.repos.d/docker-ce.repo
查看安装版本:
安装docker-ce ,社区版
查看docker版本
启动docker-ce
显示docker镜像信息以及容器数量
Docker进程相关命令
启动 docker 服务 :systemctl start docker
停止 docker服务 :systemctl stop docker
重启 docker 服务 :systemctl restart docker
查看 docker 服务状态: systemctl status docker
开机启动 docker 服务: systemctl enable docker
配置镜像加速器:
在进行一下命令,守护线程,重启docker
Docker镜像相关命令:
查看镜像:查看本地所有的镜像 docker images docker images -q # 查看所用镜像的id 搜索镜像:从网络中查找需要的镜像 docker search 镜像名称 拉取镜像 :从Docker仓库下载镜像到本地,镜像名称格式为名称 :版本号,如果不指定则是最新的版 本,如果不知道 镜像版本,可以去 docker hub搜索对应的镜像查看 docker pull 镜像名称 删除镜像:删除本地镜像 docker rmi 镜像id # 删除指定本地镜像 docker rmi 'docker images -q' # 删除所有本地镜像 镜像导出:[root@model ~]# docker save docker.io/nginx:latest>docker_nginx.tar.gz 镜像导入:[root@model ~]# yum -y install bash-completion ##智能补齐 [root@model ~]# docker load -i docker_nginx.tar.gz [root@model opt]# docker image load -i docker_nginx.tar.gz |
Docker容器相关命令:
创建启动镜像:
run (创建并运行一个容器)
-d 后台
-p 端口映射
-v 源地址( 宿主机):目标地址(容器) nginx 镜像的名字
查看容器:可以看得到就有刚刚我们在上面启动的nginx镜像
访问nginx
查看容器:
启动容器: 可以看到上面的tomcat2有关闭变成启动了
删除容器:
删除所有容器:docker rm `docker ps -a -q`
关闭容器:
进入某个容器:注意的是只有当启动运行的时候,才能进入它内部
容器的数据卷:
数据卷的作用及概念:
问题一:docker容器删除后,容器的数据还在吗?
问题二:docker容器和外部机器可以直接交换文件吗?
问题三:容器之间如何进行数据交换?
这些问题接下来,下面的图片可以清晰明了地告诉你们:
数据卷:
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以被多个容器挂载
- 一个容器也可以挂载多个数据卷
数据卷的作用
- 容器数据持久化
- 外部机器和容器间接通信
- 容器之间数据交换
. 数据卷容器
多容器进行数据交换
1. 多个容器挂载同一个数据卷
2. 数据卷容器
docker小总结:
docker其实就是一种容器技术,解决软件跨环境迁移的问题,我们软件有几个环境,分别是开发环境,测试环境以及生产环境,在没有使用docker之前,开发环境需要将应用达成war先交由测试环境测试,再交由生产环境,这期间会产各种意想不到的问题,“水土不服”,而docker容器就很好解决这个问题,将开发者的应用以及各种依赖包放到一个轻量级,可移植的容器中,然后就可以在各个环境中很好进行测试,很好解决软件跨环境的问题。
docker的三大组件就是镜像(image),容器(container),仓库(repository)。
镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。容器的核心技术就Cgroup资源控制,以及namespace进程隔离。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务