Docker 从安装到微服务部署
- Docker 介绍
- 什么是 Docker?
- 为什么要用 Docker?
- Docker 中的几个概念
- 镜像
- 容器
- 仓库
- 总结
- 安装Docker
- 安装Docker Compose
- 服务Docker化
- Docker 镜像
- 查看所有镜像:
- 删除镜像
- Docker 容器
- 查看所有容器:
- 进入容器:
- 退出容器:
- 启动、重启、停止、杀死、删除`一个容器`:
- 启动、重启、停止、杀死、删除`所有容器`:
- 删除所有停止的容器:
- 使用Docker Compose部署
- docker-compose常用命令
Docker 介绍
什么是 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/,主要分为下面这几步:
- 卸载旧版本Docker(如果系统之前没安装过Docker,可以跳过):
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装Docker所需要的包:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 设置稳定的仓库:
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装最新版的Docker引擎:
yum install docker-ce docker-ce-cli containerd.io
查看是否安装成功:docker -v
- 启动Docker:
systemctl start docker
- 推荐设置开机自启,执行指令:
systemctl enable docker
安装Docker Compose
安装好Docker后,我们接着安装Docker Compose,官方安装教程 https://docs.docker.com/compose/install/,主要步骤为:
- 获取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
- 对二进制文件授予可执行权限:
chmod +x /usr/local/bin/docker-compose
- 创建连接:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 查看是否安装成功:
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条命令:
-
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
; -
MAINTAINER xxx xxxxxxxxx@qq.com
指定镜像的作者及联系方式; -
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
; -
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命令一次性创建了两个容器。
- 新建一个目录,用于存放Docker Compose文件:
mkdir -p /febs/febs-cloud
- 然后在
/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
-
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