Docker 从安装到微服务部署

Docker 介绍

官网地址:https://www.docker.com

什么是 Docker?

  • Docker 是世界领先的软件容器平台,基于 Go 语言 进行开发实现。
  • Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放开发人员。
  • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
  • Docker可以对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

为什么要用 Docker?

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

  • 更高效的利用系统资源
  • 更快速的启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • 更轻松的维护和扩展

Docker 中的几个概念

镜像

镜像就是一个只读的模板,镜像可以用来创建 Docker 容器,一个镜像可以创建多个容器

容器

容器是用镜像创建的运行实例,Docker 利用容器独立运行一个或一组应用。它可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。可以把容器看作是一个简易的 Linux 环境和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的

仓库

仓库是集中存放镜像文件的场所。仓库和仓库注册服务器是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是 DockerHub,存放了数量庞大的镜像供用户下载,国内的公开仓库有阿里云、网易云等

总结

通俗点说,一个镜像就代表一个软件;而基于某个镜像运行就是生成一个程序实例,这个程序实例就是容器;而仓库是用来存储 Docker 中所有镜像的。

其中仓库又分为远程仓库和本地仓库,和 Maven 类似,倘若每次都从远程下载依赖,则会大大降低效率,为此,Maven 的策略是第一次访问依赖时,将其下载到本地仓库,第二次、第三次使用时直接用本地仓库的依赖即可,Docker 的远程仓库和本地仓库的作用也是类似的。

安装Docker

在Linux中安装Docker可以参考官方文档:https://docs.docker.com/install/linux/docker-ce/centos/,主要分为下面这几步:

  1. 卸载旧版本Docker(如果系统之前没安装过Docker,可以跳过):
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装Docker所需要的包:
yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  1. 设置稳定的仓库:
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装最新版的Docker引擎:
yum install docker-ce docker-ce-cli containerd.io

查看是否安装成功:docker -v

  1. 启动Docker:
systemctl start docker
  1. 推荐设置开机自启,执行指令:
systemctl enable docker

安装Docker Compose

安装好Docker后,我们接着安装Docker Compose,官方安装教程 https://docs.docker.com/compose/install/,主要步骤为:

  1. 获取Docker Compose的最新稳定版本:
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 对二进制文件授予可执行权限:
chmod +x /usr/local/bin/docker-compose
  1. 创建连接:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. 查看是否安装成功:
docker-compose -v

服务Docker化

创建相关目录:

mkdir -p /febs/febs-monitor-admin/ \
/febs/febs-register

为了后续操作方便,运行下面这条命令,授权:

chmod 777 -R /febs

然后将可执行jar包上传到相关目录下,上传好后,运行一下目录,看是否都上传成功:

ls /febs/febs-monitor-admin/ /febs/febs-register/

接着我们通过这些jar一一构建Docker镜像。
因为构建过程都是一样的,所以这里以febs-monitor-admin模块为例子。

/febs/febs-monitor-admin模块下创建一个Dockerfile

vim /febs/febs-monitor-admin/Dockerfile
FROM openjdk:8u212-jre
MAINTAINER xxx xxxxxxxxx@qq.com

COPY febs-monitor-admin-1.0-SNAPSHOT.jar /febs/febs-monitor-admin-1.0-SNAPSHOT.jar
ENTRYPOINT ["java", "-Xmx256m", "-jar", "/febs/febs-monitor-admin-1.0-SNAPSHOT.jar"]

上面脚本包含4条命令:

  1. FROM openjdk:8u212-jre表示由openjdk:8u212-jre基础镜像构建。因为我们的项目使用的是JDK 1.8,所以我们要依赖于1.8版本的JDK镜像构建,openjdk官方Docker镜像仓库为https://hub.docker.com/_/openjdk?tab=tags,我挑了个体积相对较小的openjdk:8u212-jre
  2. MAINTAINER xxx xxxxxxxxx@qq.com指定镜像的作者及联系方式;
  3. COPY febs-monitor-admin-1.0-SNAPSHOT.jar /febs/febs-monitor-admin-1.0-SNAPSHOT.jar表示将当前目录(/febs/febs-monitor-admin)下的febs-monitor-admin-1.0-SNAPSHOT.jar拷贝到openjdk:8u212-jre镜像里的/febs目录下,名称也为febs-monitor-admin-1.0-SNAPSHOT.jar
  4. ENTRYPOINT ["java", "-Xmx256m", "-jar", "/febs/febs-monitor-admin-1.0-SNAPSHOT.jar"]表示运行java -jar运行镜像里的jar包,JVM内存最大分配为256m(因为要运行的服务较多,所以内存分配小了点,实际可以根据宿主服务器的配置做出相应调整)。

DockerFile创建好后,在/febs/febs-monitor-admin目录下运行以下命令构建镜像:

docker build -t febs-monitor-admin .

docker build 命令用于使用 Dockerfile 创建镜像。
使用参数说明:

  • -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

第一次构建的时候因为要下载openjdk:8u212-jre镜像,所以速度较慢,耐心等待即可。

创建容器并以后台的方式运行:

docker run -p 8401:8401 -d --name febs-monitor-admin febs-monitor-admin:latest

docker run 命令用于创建一个新的容器并运行一个命令。
使用参数说明:

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -d: 后台运行容器,并返回容器ID
  • –name: 为容器指定一个名称

等待一段时间过后,使用浏览器访问http://192.168.81.140:8401,查看服务是否启动成功。

Docker 镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。

查看所有镜像:

docker images

在这里插入图片描述
结构说明:

  • REPOSITORY:仓库名称
  • TAG:标签名称
  • IMAGE ID:镜像ID
  • CREATED:创建时间
  • SIZE:所占用的空间

删除镜像

  • 删除指定镜像:docker rmi [IMAGE ID]
  • 删除所有不使用的镜像:docker image prune -f -a
  • 删除所有镜像:docker rmi $(docker images -aq)
  • 强制删除所有镜像:docker rmi -f $(docker images -aq)

Docker 容器

简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

查看所有容器:

docker ps -a

在这里插入图片描述
结构说明:

  • CONTAINER ID:容器ID
  • IMAGE:镜像名:标签
  • COMMAND:环境变量
  • CREATED:创建时间
  • STATUS:状态
  • PORTS:端口
  • NAMES:容器名

进入容器:

docker exec -it <CONTAINER ID> /bin/bash

退出容器:

exit

启动、重启、停止、杀死、删除一个容器

  • docker start [CONTAINER ID]
  • docker restart [CONTAINER ID]
  • docker stop [CONTAINER ID]
  • docker kill [CONTAINER ID]
  • docker rm [CONTAINER ID]

启动、重启、停止、杀死、删除所有容器

  • docker start $(docker ps -aq)
  • docker restart $(docker ps -aq)
  • docker stop $(docker ps -aq)
  • docker kill $(docker ps -aq)
  • docker rm $(docker ps -aq)

删除所有停止的容器:

docker container prune

使用Docker Compose部署

部署一个应用可能需要用到多个Docker容器,比如MySQL,Redis,Nginx等,单独的去管理每个容器可能会比较麻烦。Docker Compose可以通过一个yml文件来统一管理这些容器,可以极大简化我们的应用部署过程。
本次例子中我们通过一个docker-compose.yml文件,运行docker-compose up命令一次性创建了两个容器。

  1. 新建一个目录,用于存放Docker Compose文件:
mkdir -p /febs/febs-cloud
  1. 然后在/febs/febs-cloud目录下新建一个docker-compose.yml文件:
vim /febs/febs-cloud/docker-compose.yml
version: '3'

services:
  febs-register:
    build:
      context: /febs/febs-register #指定 Dockerfile 所在文件夹的路
      dockerfile: Dockerfile #指定 Dockerfile 文件名
    container_name: febs-register #容器名称
    restart: always #指定容器退出后的重启策略为始终重启
    environment:
      TZ: Asia/Shanghai
    volumes:
      - "/febs/log:/log" #日志挂载
    command:
      - "--febs-register=192.168.81.140" #通过command指定地址变量值
      - "--febs-monitor-admin=192.168.81.140"
    ports:
      - 8001:8001 #端口映射
  febs-monitor-admin:
    build:
      context: /febs/febs-monitor-admin
      dockerfile: Dockerfile
    container_name: febs-monitor-admin
    restart: always
    environment:
      TZ: Asia/Shanghai
    volumes:
      - "/febs/log:/log"
    ports:
      - 8401:8401

  1. docker-compose.yml创建好后,在/febs/febs-cloud目录下运行以下命令构建镜像:
docker-compose up -d

在这里插入图片描述
等待一段时间过后,使用浏览器访问服务地址,查看是否启动成功,
febs-register服务访问地址:http://192.168.81.140:8001/register
febs-monitor-admin服务访问地址:http://192.168.81.140:8401

docker-compose常用命令

  • 创建并并以后台方式启动容器:docker-compose up -d
  • 停止并删除(删除创建的network,volume,container):docker-compose down
  • 查看运行中的容器:docker-compose ps
  • 启动:docker-compose start
  • 停止:docker-compose stop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值