一、docker学习教程记录

Docker简介

   Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

   Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台

Docker通常用于如下场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker常用概念

  • Docker 引擎 管理 Docker 的地方,比如 Docker 镜像、容器和其他配置文件。
  • Docker 客户端是我们操作 Docker 命令的地方。
  • Docker Images Docker 镜像 是操作系统中各种软件的”安装包”,比如 nginx、mysql、tomcat,注意是安装包 ,但是这个安装包内容不一定是初始化的,如果你有安装过操作系统的经历就很容易理解这一点,比如纯净版操作系统镜像,安装好了各种软件的操作系统镜像。是的,Docker 镜像是可以自定义的。
  • Docker Registry 是存储 Docker 镜像的地方,这个位置默认是 Docker Hub ,即官方的,你也可以自己建一个,可以联想一个git hub和开源中国。
  • Docker Container Docker 容器是安装好配置好的软件,即 镜像可以被用来产生具体的容器,比如一个 nginx 镜像可以用来生成一个 容器,你可以配置端口号等等。当然,这个镜像可以用于产生多个容器。
  • Docker daemon Docker 引擎用于处理整个 Docker 业务的一个后台驻留程序 。

Docker架构

一、docker学习教程记录

  • Docker daemon ( Docker 守护进程 )
    Docker daemon 是一个运行在宿主主机(DOCKER_HOST)的后台进程。可通过客户端与之通信。
  • Client ( Docker 客户端 )
    Docker 客户端是 Docker 的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon 通信。
  • Images (Docker 镜像)
    Docker 镜像是一个只读模板,它包含创建 Docker 容器的说明。
  • Container ( 容器 )
    容器是镜像的可运行实例。镜像合并容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API 或者 CLI 命令来启动、移动、删除容器。
  • Registry
    Docker Registry 是一个集中存储与分发镜像的服务。构建完 Docker 镜像后,就可以在当前宿主机上运行。但是如果想在其他机器上运行这个镜像,就要手动复制。而 Docker Registry 可以用于替代手动替换。
    一个 Docker Registry 可包含多个 Docker 仓库,每个仓库可包含多个镜像标签,每个标签对应一个Docker 镜像。
    Docker Registry 可分为公有 Docker Registry 和私有 Docker Registry。最常用的 Docker Registry 莫过于官方的 Docker Hub,这也是默认的 Docker Registry。

Docker Image 概述

一、docker学习教程记录

  • 文件和meta data的集合(root filesystem)
    
  • 分层的,并且每一层都可以添加改变删除文件,成为一个新的image
    
  • 不同的image可以共享相同的layer
    
  • Image本身是read-only 的
    
  • image 里面是一层层文件系统,叫做 Union FS(联合文件系统)。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。虚拟文件系统的目录结构就像普通 linux的目录结构一样,docker 通过这些文件再加上宿主机的内核提供了一个 linux的虚拟环境。每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是docker 镜像中每一层文件系统都是只读的。
    
  • 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
    

docker安装官方文档 | docker image 命令 | docker hub | 镜像加速

初识Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

Dockerfile 具体的指令请参考:官方文档
下面编写一个构建vue项目的一个Dockerfile示例:

FROM nginx:1.15-alpine
COPY tsm-server.conf  /etc/nginx/conf.d/default.conf
WORKDIR /app
COPY dist /app/dist

其中dist为vue 通过 npm run build 得到的静态文件、tsm-server.conf为项目ngnix为反向代理配置文件

 server {
        listen       80;
        location / {
            root   /app/dist;
            try_files $uri $uri/ /index.html; 
            index  index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 }
通过运行如下命令执行构建镜像: docker build -t  自定义镜像名 .

基于上述安装mysql及熟悉docker常用命令

docker安装mysql

docker run -d -p 3306:3306 --name mysql -v /root/docker-mysql/conf:/etc/mysql/conf.d -v /root/docker-mysql/logs:/logs -v /root/docker-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e TZ='Asia/Shanghai' -d mysql:5.7.22

参数介绍:
一、docker学习教程记录
构建镜像过程如下:
一、docker学习教程记录
查看镜像命令:
一、docker学习教程记录
查看容器命令:
一、docker学习教程记录
查看日志命令:
一、docker学习教程记录
验证是否连接成功:
一、docker学习教程记录