目录
Docker 概述
安装 Docker
Docker 架构
配置镜像加速器
Docker 命令
Docker 容器的数据卷
配置数据卷
数据卷容器
Docker 应用部署
Dockerfile
容器转为镜像
Dockerfile 概念
Dockerfile 部署 springboot 项目
服务编排
Dokcer Compose
Docker 私有仓库
Docker 容器虚拟化 与 传统虚拟机 比较
Docker 是一个开源的应用容器引擎
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
容器是完全使用沙箱机制的,相互隔离。
容器的性能开销极低
# 1. yum 包更新到最新
yum update
# 2. 安装需要的软件包,yum -util 提供yum-config-manager 功能,另外两个是 devicemapper 驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3. 设置 yum 源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(国内yum)
# 4. 安装 docker ,出现输入的界面都按 y
yum install -y docker -ce
# 5. 查看 docker 版本, 验证是否验证成功
docker -v
一开始用国外 yum 报错,切换成国内的就好使了。
镜像(Image): Docker 镜像(Image)就相当于是一个 root 文件系统。比如官方进行 ubuntu 16.04 就包含了完整的一套 Ubuntu 16.04 最小的系统的root 文件系统
容器(Container): 镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器时镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository): 仓库可堪称一个代码控制中心, 用来保存镜像。
登录阿里云,控制台,找到容器镜像服务,找到镜像加速器 获取自己的,在linux 机器上执行,我买的腾讯云 1核2G 58 一年。腾讯云没找到,好像是要收费。
Docker 服务相关命令
启动 docker 服务 systemctl start docker
停止 docker 服务 systemctl stop docker
重启 docker 服务 systemctl restart docker
查看 docker 服务状态 systemctl status docker
开机启动 docker 服务 systemctl enable docker
Docker 镜像相关命令
查看镜像 docker images
搜索镜像 docker search redis
拉取镜像 docker pull redis 或者加 冒号版本号 具体想下载那个去 hub.docker.com 搜
删除镜像 docker rmi + Image_id
删除所有镜像: docker rmi `docker images -q`
Docker 容器相关命令
查看容器 docker ps # (查看正在运行的容器) docker ps -a # (查看所有容器)
创建容器 docker run - 参数 --name=名字 镜像 : 版本 /bin/bash
参数说明:
-i : 保持容器运行。通常与 -t 同时使用。加入 it 这两个参数后,容器创建后自动
进入容器中。退出容器后,容器自动关闭。
-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-d : 以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用 docker
exec 进入容器。退出后,容器不会关闭。
-it : 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器。
--name : 为创建的容器命名。
进入容器 docker exec 参数 # 退出容器,容器不会关闭
启动容器 docker stop 容器名称
停止容器 docker start 容器名称
删除容器 dokcer rm 容器名称
查看容器信息 docker inspect 容器名称
数据卷概念及作用
思考:
Docker 容器删除后,在容器中产生的数据也会随之销毁
Docker 容器核外部机器可以直接交换文件吗
容器之间想要进行数据交互
数据卷:
数据卷是宿主机中的一个目录或文件
当容器目录核数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
数据卷作用:
容器数据持久化
外部机器和容器间接通信
容器之间数据交换
配置数据卷
配置数据卷容器
创建一个容器,挂载一个目录,让其他容器继承自该容器
通过简单方式实现数据卷配置
创建启动容器时,使用 -v 参数设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)...
注意事项:
1. 目录必须是绝对路径
2. 如果目录不存在,会自动创建
3. 可以挂载多个数据卷
多容器进行数据交换
1. 多个容器挂载同一个数据卷
2. 数据卷容器
配置数据卷容器
1. 创建启动 c3 数据卷容器,使用 -v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2. 创建启动 c1 c2 容器,使用 --volumes-from 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
MySQL 部署
在Docker 容器部署MySQL , 并通过外部 mysql 客户端操作 MySQL Server。
- 容器内的网络服务和外部机器不能直接通信。
- 外部机器和宿主机可以直接通信。
- 宿主机和容器可以直接通信
- 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机的该端口,从而间接访问容器的服务。
- 这种操作称为:端口映射。
搞半天照着搜的博客整没成功
Tomcat 部署
Nginx 部署
Redis 部署
- Docker 镜像是由特殊的文件系统叠加而成
- 最低端是 bootfs, 并使用宿主机的bootfs
- 第二层是root文件系统 rootfs, 称为 base image
- 然后再往上可以叠加其他的镜像文件
- 统一文件系统技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户角度看来,只存在一个文件系统。
- 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。
- 当从一个镜像启动容器时,Docker 会在最顶层加载一个读写文件系统作为容器。
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
Dockerfile 是一个文本文件
包含了一条条指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile 文件构建一个新的镜像开始工作了。
对于运维人员:在部署时可以实现应用的无缝移植。
实现步骤
1. 定义父镜像:FROM java:8
2. 定义作者信息:MAINTAINER itheima
3. 将 jar 添加到容器:ADD springboot.jar app.jar
4. 定义容器启动的执行的命令:CMD java -jar app.jar
5. 通过 dockerfile 构建镜像:docker build -f dockerfile 文件路径 -t 镜像名称:版本
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。
- 要从 Dockerfile build image 或者去 dockerhub 拉取 image
- 要创建多个 container
- 要管理这些 container (启动停止删除)
服务编排: 按照一定的业务规则批量管理容器
Docker Compose 是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:
1. 利用 Docker 定义运行环境镜像
2. 使用 docker-compose.yml 定义组成应用的各个服务
3. 运行 docker-compose up 启动应用
Docker 官方的 Docker hub 是一个用于公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们的镜像推送上去。但是,又时候我们的服务器不能访问互联网,或者你不希望将自己的镜像放到公网中,我们可以搭建自己的私有仓库来存储和管理我们的镜像。
1. 搭建
2. 上传镜像/拉取镜像
容器就是将软件打包成标准化单元,以用于开发、交付和部署。
容器镜像是轻量的、可执行的独立软件包,包含软件运行所需要的所有内容:代码、运行时环境、系统工具、系统库和设置。
容器化软件在任何环境中都能够始终如一的运行。
容器化赋予了软件独立性,使其 免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
相同:
容器和虚拟机具有相似的资源隔离和分配优势
不同:
容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。
传统虚拟机可以运行不同的操作系统,容器只能运行同一类操作系统·