linux应用之Docker

一、概念

linux应用之Docker_第1张图片

  • 在开发过程中我们的开发环境和测试环境以及生产环境很可能不一样,从而而会造成很多意想不到的错误,例如jdk版本的兼容性问题等等!故而如果我们将开发环境和代码全部交给我们测试以及运维这可避免,从而我们就需要一个装载的容器

Docker 概念

  • Docker还一个开源的应用容器引擎
  • 诞生于20103年初,基于Go语言实现,dotCloud公司出品(后更名其Docker inc)
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级的可移植的容器中,然后发布到任何流行的linux服务器上;
  • 容器是完全使用沙箱机子,相互隔离;
  • 容器性能开销极低。
  • Docker 从17.03版本之后分为CE社区版和EE企业版;
  • docker是一种容器技术,解软件跨环境迁移的问题
# 采用yum安装
# 首先更新yum 包 耗时大约10分钟左右取决于网络
yum update
# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker
yum install -y docker-ce
# 查看docker
docker -v
# 显示版本则安装成功

二、Docker架构

linux应用之Docker_第2张图片

  • Clients:客户端
    • 控制docker
  • Hosts:核心
    • localhost:本机
      • 当我们在本地安装好docker后, docker会以daemon(守护进程)的方式存在
        • 在这个daemon中包含两部分其中image则为镜像 ;container为容器
          • 镜像与容器类似我们java中的类和对象的关系,我们可以通过一个类(镜像)创建很多对象(容器)
    • remote:远端
  • Registries:仓库
    • 我们的镜像从仓库中来 :docker hub:docker官方的仓库(远程仓库);private registry:我们自己搭建的本地私人仓库(私服)

三、配置Docker镜像加速器

由于默认情况下我们从docker的官方仓库下载很慢所以我们需要配置镜像加速器

  • USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
  • 阿里云
  • 网易云
  • 腾讯云
    我这里采用的是阿里云
    • 登录阿里云打开控制台-搜索镜像服务-镜像加速器-选择自己的系统-复制粘贴命令
    • 成功:
      linux应用之Docker_第3张图片

四、Docker命令

  • 启动docker服务:
    • systemctl start docker
  • 查看状态:
    • systemctl status docker
  • 停止命令:
    • systemctl stop docker
  • 开机启动:
    • systemctl enable docker
  • 重启:
    • systemctl restart docker

镜像常用命令

  • 查看本地镜像:
    • docker images
      在这里插入图片描述
  • 搜索命令:
    • docker search
      linux应用之Docker_第4张图片
  • 拉取命令:
    • docker pull
      linux应用之Docker_第5张图片
      不知道有哪些版本可以登录官网:hub.docker.com查询
  • 删除镜像命令:
    • docker rmi + ID
  • 查看所有的镜像ID:
    • docker images -q
  • 删除所有的镜像:
    • docker imi docker images -q

容器常用命令

  • 创建容器
    • docker run + 参数
      linux应用之Docker_第6张图片
  • 查看容器:
    • docker ps 查看正在运行的容器
    • docker ps -a 查看所有容器
  • 进入容器:
    • docker exec 参数 :退出容器,容器不会关闭
  • 停止容器:
    • docker stop 容器名称
  • 启动容器:
    • docker start 容器名称
  • 删除容器:
    • docker rm 容器名称
  • 查看容器信息
    • docker inspect 容器名称

五、docker容器的数据卷

linux应用之Docker_第7张图片

1、数据卷
  • 数据卷是宿主机中的一个目录或者文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷
2、数据卷的作用
  • 容器数据持久化
  • 外部机器和容器之间间接通信
  • 容器之间的数据交换
3、配置数据卷

创建启动容器时,使用-v参数 设置数据卷

docker run ... -v 宿主机的目录/文件:容器内目录/文件 ...
docker run -id --name=test -v /root/data:/root/data centos:7
  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷
4、数据卷容器
//创建启动数据卷容器,使用-v参数 设置数据卷
docker run --it --name=test1 -v /volume centos:7 /bin/bash
//创建启动test2、test3容器,使用--volumes-from参数 设置数据卷
docker run -it --name=test2 --volumes-from test1 centos:7 /bin/bash
docker yun -it --name=test3 --volumes-from test1 centos:7  

六、docker应用部署

1、mysql部署
docker search mysql
docker pull mysql:5.7
#在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql

//后台长期运行
docker run -id \ 
//端口映射
-p 3307:3306 \ 
//指定容器名字
--name=mysql_test \ 
//配置文件映射
-v $PWD/conf:/etc/mysql/conf.d \ 
//日志文件映射
-v $PWD/log:/logs \ 
-v $PWD/data:/var/lib/mysql \ 
-e MYSQL_ROOT_PASSWORD=123456 \ 
msyql:5.7
//进入容器
docker exec -it mysql_test /bin/bash
2、tomcat
docker search tomcat
docker pull tomcat
mkdir root/tomcat
cd ~/tomcat

docker run -id --name=tomcat_test -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps tomcat
3、Nginx
docker search nginx
docker pull nginx
mkdir root/nginx
cd root/nginx
mkdir conf

docker run -id --name=Nginx_test -p 80:80 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx

找一个Nginx的配置文件放到conf下,或者直接复制粘贴

其他应用基本类似参考部署!

七、Dockerfile

1、Docker镜像原理
  • 操作系统组成部分
    • 进程调度子系统
    • 进程通信子系统
    • 内存管理子系统
    • 设备管理子系统
    • 文件管理子系统
    • 网络通信子系统
    • 作业控制子系统
  • linux文件系统由bootfs和rootfs两部分组成
    • bootfs:包含BootLoader(引导加载程序)和内核
    • rootfs:root文件系统,包含的我就是典型linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
    • 不同的linux发行版,bootfs基本一样,尔rootfs不同,Ubuntu,centos等
Docker镜像原理
  • docker 镜像是由特殊的文件系统叠加而成
  • 最底端是bootfs,并且用宿主机的bootfs
  • 第二层是root文件系统rootfs,称为base image
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统(union file system)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。文位于下面的镜像称为父镜像,最底层的镜像称为基础镜像。
  • 当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器
    linux应用之Docker_第8张图片
2、镜像制作
2.1 容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
3、Dockerfile 概念
  • Dockerfile 是一个文本文件
  • 包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发测试人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
  • 对于运维人员:在部署时,可以实现应用的无缝移植
  • 常用命令解析可以看看这篇文章:https://blog.csdn.net/yang_kaiyue/article/details/88794585
    linux应用之Docker_第9张图片
    linux应用之Docker_第10张图片
4、定义dockerfile 发布Springboot项目
  • 准备一个Springboot项目
  • 上传到服务器
  • 编写dockerfile
定义父镜像
FROM java:8
定义作者信息
MAINTAINER TheBestBadGuy
将jar包添加到容器
ADD Springboot.jar app.jar
定义容器启动执行的命令
CMD java -jar app.jar
通过dockerfile构建镜像
docker build -f dockerfile文件路径 -t 镜像名称:版本

八、服务编排

  • 微服务架构的应用系统中一般包含很多的微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动,维护的工作量会很大。
  • 要从Dockerfile build image 或者去dockerhub拉取image
  • 要创建多个container
  • 要管理这些container(start or stop)
    服务编排:按照一定的业务规则批量管理容器
1、Docker Compose
  • Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理化应用的完整开发周期,包括服务构建,启动和停止。
    • 利用Dockerfile定义运行环境镜像
    • 使用docker-compose.yml定义组成应用的各个服务
    • 运行docker-compose up 启动应用
1.1 安装Docker Compose

linux应用之Docker_第11张图片

卸载Docker Compose

在这里插入图片描述

1.2 docker-compose目录
mkdir root/docker-compose
cd root/docker-compose
1.3 编写docker-compose.yml文件
version:‘3’
services:
	nginx:
		image:nginx
		ports:
			-80:80
		links:
			-app
		volumes:
			- ./ngginx/conf.d:/etc/nginx/conf.d
	app:
		image:app
		expose:
			-"8080"
1.5 创建父目录
mkidr -p ./nginx/conf.d
1.6 编写conf文件

linux应用之Docker_第12张图片

1.7 在root/docker-compose目录下使用docker-compose启动容器
docker-compose up

接下来就可以测试访问

九、Docker私有仓库

1、搭建私有仓库

linux应用之Docker_第13张图片

2 上传镜像到私有仓库

linux应用之Docker_第14张图片

3、从私有仓库拉取镜像
docker pull 私有仓库ip:5000/centos:7

十、虚拟机与容器

linux应用之Docker_第15张图片

你可能感兴趣的:(服务器,docker)