Docker应用容器引擎

时间:2021-04-27 17:24:36

1.Docker概述

1.1.Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻
量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互
之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

· Docker应用场景

  • Web 应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用

使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。

Docker应用容器引擎

1.2. Docker容器与传统虚拟机比较

  • 传统虚拟机

Docker应用容器引擎

传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等),创建虚拟机(虚拟出
各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。

  • Docker

Docker应用容器引擎

Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚
拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

1.3. Docker组成部分

Docker应用容器引擎

Docker应用容器引擎

2. Docker安装与启动

Docker可以运行在MAC、Windows、CentOS、DEBIAN、UBUNTU等操作系统上,提供社区版和企业版,本课程基于CentOS安装Docker。CentOS6对docker支持的不好,使用docker建议使用CentOS7。

以下是在CentOS7中安装Docker的步骤:

 # 1、yum 包更新到最新
sudo yum update
# 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依
赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
# 3.1、方案一:使用ustc的(推荐)
sudo yum-config-manager --add-repo http://mirrors.ustc.edu.cn/dockerce/
linux/centos/docker-ce.repo
# 3.2、方案二:使用阿里云(可能失败)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/
linux/centos/docker-ce.repo
# 4、 安装docker;出现输入的界面都按 y
sudo yum install -y docker-ce
# 5、 查看docker版本
docker -v

    

2.2. 设置ustc镜像

  ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

      1、 编辑文件/etc/docker/daemon.json

# 执行如下命令:
mkdir /etc/docker
vi /etc/docker/daemon.json

      2、在文件中加入下面内容

      

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

2.3. Docker启动与停止命令      

 # 启动docker服务:
systemctl start docker
# 停止docker服务:
systemctl stop docker
# 重启docker服务:
systemctl restart docker
# 查看docker服务状态:
systemctl status docker
# 设置开机启动docker服务:
systemctl enable docker

3. Docker常用命令

3.1. 镜像相关命令

镜像:Docker镜像是由文件系统叠加而成(是一种文件的存储形式);是docker中的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜像到本地,比如开发人员可以从docker仓库拉取(下载)一个只包含centos7系统的基础镜像,然后在这个镜像中安装jdk、mysql、Tomcat和自己开发的应用,最后将这些环境打一个新的镜像。开发人员将这个新的镜像提交给测试人员进行测试,测试人员只需要在测试环境下运行这个镜像就可以了,这样就可以保证开发人员的环境和测试人员的环境完全一致。

Docker应用容器引擎

Docker提供的关于镜像的操作有:     

  • 查看镜像
  • 搜索镜像
  • 拉取镜像
  • 删除镜像

3.1.1. 查看镜像

Docker应用容器引擎

Docker应用容器引擎

REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期

SIZE:镜像大小

3.1.2. 搜索镜像

Docker应用容器引擎

NAME:镜像名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3.1.3. 拉取镜像

Docker应用容器引擎

3.1.4. 删除镜像

Docker应用容器引擎

3.2. 容器相关命令

容器,也是docker中的核心概念,容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同Java语言中类和对象的关系。

Docker提供的关于容器的操作有:

    • 查看容器
    • 创建容器
    • 启动容器
    • 停止容器
    • 文件拷贝
    • 目录挂载
    • 查看容器ip地址
    • 删除容器

3.2.1. 查看容器

查看正在运行的容器使用命令:docker ps
查看所有容器使用命令:docker ps -a

Docker应用容器引擎

3.2.2. 创建并启动容器

可以基于已有的镜像来创建和启动容器,创建与启动容器使用命令:docker run

参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件
映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t
两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

1)交互式容器

以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式
启动容器,如果退出容器,则容器会进入停止状态。

Docker应用容器引擎

2)守护式容器
创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称 
不能重复):

#创建并启动守护式容器
docker run -di --name=mycentos2 centos:7
#登录进入容器命令为:docker exec -it container_name (或者 container_id) /bin/bash(exit退出
时,容器不会停止)
docker exec -it mycentos2 /bin/bash

Docker应用容器引擎

3.2.3. 停止并启动容器

Docker应用容器引擎

3.2.4. 文件拷贝

  • 将linux宿主机中的文件拷贝到容器内可以使用命令:
 # docker cp 需要拷贝的文件或目录 容器名称:容器目录
# 创建一个文件abc.txt
touch abc.txt
# 复制abc.txt到mycentos2的容器的 / 目录下
docker cp abc.txt mycentos2:/
# 进入mycentos2容器
docker exec -it mycentos2 /bin/bash
# 查看容器 / 目录下文件
ll

Docker应用容器引擎

  • 将文件从容器内拷贝出来到linux宿主机使用命令:
 # docker cp 容器名称:容器目录 需要拷贝的文件或目录
#进入容器后创建文件cba.txt
touch cba.txt
# 退出容器
exit
# 在Linux宿主机器执行复制;将容器mycentos2的/cba.txt文件复制到 宿主机器的/root目录下
docker cp mycentos2:/cba.txt /root

Docker应用容器引擎

3.2.5. 目录挂载

可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器时添加-v参数,后边为宿主机目录:容器目录,例如: docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7

 # 创建linux宿主机器要挂载的目录
mkdir /usr/local/test
# 创建并启动容器mycentos3,并挂载linux中的/usr/local/test目录到容器的/usr/local/test;也就是在
linux中的/usr/local/test中操作相当于对容器相应目录操作
docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7
# 在linux下创建文件
touch /usr/local/test/def.txt
# 进入容器
docker exec -it mycentos3 /bin/bash
# 在容器中查看目录中是否有对应文件def.txt
ll /usr/local/test

Docker应用容器引擎

3.2.6. 查看容器ip

可以通过以下命令查看容器运行的各种数据 docker inspect 容器名称(容器ID)

Docker应用容器引擎

Docker应用容器引擎

3.2.7. 删除容器

删除指定的容器:docker rm 容器名称(容器ID) 删除所有容器:docker rm `docker ps -a -q`

Docker应用容器引擎

4. Docker应用部署

4.1. MySQL部署

4.1.1. 拉取镜像

Docker应用容器引擎

Docker应用容器引擎

4.1.3. 操作容器MySQL

Docker应用容器引擎

Docker应用容器引擎

4.1.4. 远程登录MySQL

Docker应用容器引擎

使用Navicat在windows中进行远程登录在docker容器中的mysql。

Docker应用容器引擎

4.2. Tomcat部署

Docker应用容器引擎

4.2.2. 创建容器

Docker应用容器引擎

Docker应用容器引擎

Docker应用容器引擎

4.4.4. 远程连接redis

可以使用redis图形界面客户端工具连接redis,端口也是6379。

5. Docker Compose

5.1. Compose简介

5.1.1. 概念

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。

使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务。

5.1.2. 组成

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工
程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参
数,依赖。一个服务当中可包括多个容器实例。

  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。每个服务都有自己的名
    字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等,即以容器为粒度,用户需要Compose
    所完成的任务。

  • 项目(project):由一组关联的应用容器组成的一个完成业务单元,在docker-compose.yml中定义。即是
    Compose的一个配置文件可以解析为一个项目,Compose通过分析指定配置文件,得出配置文件所需完成的所
    有容器管理与部署操作。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配
置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器
相互配合来完成某项任务的情况。例如:要部署一个Web项目,除了Web服务容器,往往还需要再加上后端的数据
库服务容器,甚至还包括负载均衡容器等。

5.2. 安装与卸载

Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我
们以编译好的二进制包方式安装在Linux系统中。

5.2.1. 安装

Docker应用容器引擎

5.2.2. 卸载

Docker应用容器引擎

5.3. Compose常用命令参考

使用Compose前,可以通过执行docker-compose --help|-h 来查看Compose基本命令用法。
也可以通过执行docker-compose [COMMAND] --help 或者docker-compose --help [COMMAND] 来查看某个具体的使
用格式。

可以知道Compose命令的基本的使用格式为:

Docker应用容器引擎

Docker应用容器引擎

5.3.1. up

格式为:

Docker应用容器引擎

up命令十分强大,它尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一些列操
作。链接的服务都将会被自动启动,除非已经处于运行状态。
多数情况下我们可以直接通过该命令来启动一个项目。
选项包括:

Docker应用容器引擎

5.3.2. ps

格式为:

Docker应用容器引擎

列出项目中目前的所有容器。
选项包括:

Docker应用容器引擎

5.3.3. stop

格式为:

Docker应用容器引擎

停止已经处于运行状态的容器,但不删除它。
选项包括:

Docker应用容器引擎

5.3.4. down

格式为:

Docker应用容器引擎

停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除 容器 网络,可以
通过指定 rmi 、volumes参数删除镜像和卷。
选项包括:

Docker应用容器引擎

Docker应用容器引擎

Docker应用容器引擎

Docker应用容器引擎

Docker应用容器引擎

5.4. Compose模版文件

模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与docker run 相关参数的含义都是类
似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式。
比如一个Compose模板文件:

Docker应用容器引擎

Docker应用容器引擎

5.5. Compose应用

需求:编写compose模版文件,实现同时启动tomcat、mysql和redis容器。

5.5.1. 编写模版文件

Docker应用容器引擎

docker-compose.yml文件内容如下(文件内容请从 资料\配置文件\docker-compose.yml 复制):

Docker应用容器引擎

上面我们声明了3个服务;分别是:redis1、mysql1、web1;并且对3个服务都指定了对应的docker 镜像和端口。

5.5.2. 启动

Docker应用容器引擎

5.5.3. 测试

在windows下访问启动的3个服务进行测试都可以;如下面访问9090的tomcat如下:

Docker应用容器引擎

6. 迁移与备份

Docker应用容器引擎

其中涉及到的命令有:

  • docker commit 将容器保存为镜像
  • docker save 将镜像备份为tar文件
  • docker load 根据tar文件恢复为镜像

6.1. 将Docker容器保存为镜像

使用docker commit命令可以将容器保存为镜像。
命令形式:docker commit 容器名称 镜像名称

Docker应用容器引擎

此镜像的内容就是当前容器的内容,接下来你可以用此镜像再次运行新的容器

6.2. 镜像备份

使用docker save命令可以将已有镜像保存为tar 文件。
命令形式:docker save –o tar文件名 镜像名

Docker应用容器引擎

6.3. 镜像恢复与迁移

使用docker load命令可以根据tar文件恢复为docker镜像。
命令形式:docker load -i tar文件名

Docker应用容器引擎

Docker应用容器引擎

7. Dockerfile文件

7.1. 什么是Dockerfile文件

前面的课程中已经知道了,要获得镜像,可以从Docker仓库中进行下载。那如果我们想自己开发一个镜像,那该如
何做呢?答案是:Dockerfile
Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文
件的描述来构建镜像。
Dockerfile文件内容一般分为4部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行的指令

7.2. Dockerfile常用命令

Docker应用容器引擎

7.3. 使用Dockerfile创建镜像

Docker应用容器引擎

Docker应用容器引擎

7.4. 基于镜像创建容器

基于刚刚创建的镜像 jdk1.8 创建并启动容器进行测试;

Docker应用容器引擎

8. Docker私有仓库

8.1. 私有仓库搭建与配置

Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像
到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜
像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

私有仓库搭建步骤:

# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://宿主机ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库
搭建成功
# 4、修改daemon.json
vi /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将宿主机ip修改为自己宿主
机真实ip
{"insecure-registries":["宿主机ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry

Docker应用容器引擎

Docker应用容器引擎

8.2. 将镜像上传至私有仓库

操作步骤:

# 1、标记镜像为私有仓库的镜像
docker tag jdk1.8 宿主机IP:5000/jdk1.8
# 2、再次启动私有仓库容器
docker restart registry
# 3、上传标记的镜像
docker push 宿主机IP:5000/jdk1.8
# 4、输入网址查看仓库效果

Docker应用容器引擎

8.3. 从私有仓库拉取镜像

8.3.1. 私有仓库所在服务器拉取镜像

若是在私有仓库所在的服务器上去拉取镜像;那么直接执行如下命令:

# 因为私有仓库所在的服务器上已经存在相关镜像;所以先删除;请指定镜像名,不是id
docker rmi 服务器ip:5000/jdk1.8
#拉取镜像
docker pull 服务器ip:5000/jdk1.8
#可以通过如下命令查看 docker 的信息;了解到私有仓库地址
docker info

Docker应用容器引擎

执行 docker info 命令之后显示内容:

Docker应用容器引擎

8.3.2. 其它服务器拉取私有仓库镜像

大多数情况下,都是某台服务器部署了私有镜像仓库之后;到其它服务器上从私有仓库中拉取镜像,若要拉取私有仓
库镜像需要去修改docker的配置文件,设置启动时候的仓库地址。

# 打开配置文件
vi /usr/lib/systemd/system/docker.service
# 在打开的上述文件中按照下面的图,添加如下的内容;注意修改下面内容中的ip地址
--add-registry=192.168.12.135:5000 --insecure-registry=192.168.12.135:5000 \
# 修改完后需要重新加载docker配置文件并重启docker
systemctl daemon-reload
systemctl restart docker

Docker应用容器引擎

在重启之后;那么则可以去拉取私有仓库中的镜像:

# 执行拉取镜像命令并查看
docker pull jdk1.8
docker images

Docker应用容器引擎

整体docker的私有仓库运作形如下图:

Docker应用容器引擎