Nacos安装与Dokcerfile,Docker-Compose

Nacos安装与Dokcerfile,Docker-Compose

  • Nacos安装与Dokcerfile,Docker-Compose
    • 1 Nacos安装
      • 1.1 Dockerfile
      • 1.2 Docker-Compose
      • 1.3 Nacos安装
        • 1.3.1 Nacos Derby安装
        • 1.3.2 Nacos MySQL版安装
        • 1.3.3 Docker安装Nacos

Nacos安装与Dokcerfile,Docker-Compose

1 Nacos安装

关于Nacos安装,可以直接参考官网安装 https://nacos.io/zh-cn/docs/quick-start.html,我们接下来学习基于Docker实现Nacos单机安装和基于Docker实现Nacos集群安装。
采用Docker-Compose安装Nacos要更方便,所以大家可以先学习一下Docker-Compose。

1.1 Dockerfile

dockerfile介绍
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取 Dockerfile 中的指令自动生成镜像。
Docker远程API开放
Docker 服务端开放 Remote API,Docker服务器默认只支持本地访问,所以需要开发远程调用权限。

#编辑daemon.json 
vi /etc/docker/daemon.json 
#往daemon.json中添加远程端口和地址 
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] 
#添加完后的内容 
{ 
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"], 
"registry-mirrors":["https://almtd3fa.mirror.aliyuncs.com"] 
}

上面配置了Docker API远程访问端口,我们接下来配置自动启动:

#创建(或修改)文件/etc/systemd/system/docker.service.d/override.conf,添加内容如下 
##Add this to the file for the docker daemon to use different ExecStart 
parameters (more things can be added here) 
[Service] 
ExecStart= 
ExecStart=/usr/bin/dockerd 
#执行systemctl命令使得配置生效 
systemctl daemon-reload 
#重启Docker服务 
systemctl restart docker 

执行命令 netstat -ntlp 查看相应 2375 端口是否开启监听状态。

#安装net-tools 
yum install net-toolsDockerfifile文件说明 
#端口查看 
netstat -ntlp 
#结果 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program 
name 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 9470/sshd 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 9702/master 
tcp6 0 0 :::11111 :::* LISTEN 
35562/docker-proxy 
tcp6 0 0 :::2375 :::* LISTEN 
34869/dockerd 
tcp6 0 0 :::5672 :::* LISTEN 
35894/docker-proxy

Dockerfile文件说明
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为Dockerfile 中的注释。
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以 # 字符开头则被视为注释。可以在Docker文件中使用 RUN , CMD , FROM , EXPOSE , ENV 等指
令。

FROM:指定基础镜像,必须为第一个命令

格式:
FROM <image> 
FROM <image>:<tag> 
FROM <image>@<digest> 
示例:
FROM mysql:5.6 
注:
tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像 

MAINTAINER: 维护者信息

格式:
MAINTAINER <name> 
示例:
MAINTAINER Jasper Xu 
MAINTAINER [email protected] 
MAINTAINER Jasper Xu <[email protected]>

RUN:构建镜像时执行的命令

RUN用于在镜像容器中执行命令,其有以下两种命令执行方式: 
shell执行 
格式:
RUN <command> 
exec执行 
格式:
RUN ["executable", "param1", "param2"] 
示例:
RUN ["executable", "param1", "param2"] 
RUN apk update 
RUN ["/etc/execfile", "arg1", "arg1"] 
注:
RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建 
时指定--no-cache参数,如:docker build --no-cache 

ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

格式:
ADD <src>... <dest> 
ADD ["",... ""] 用于支持包含空格的路径 
示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件 
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt" 
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/ 
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/ 

COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

CMD:构建容器后调用,也就是在容器启动时才进行调用。

格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先) 
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数) 
CMD command param1 param2 (执行shell内部命令) 
示例:
CMD echo "This is a test." | wc - 
CMD ["/usr/bin/wc","--help"] 
注: 
CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的 
命令

ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

格式:
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先) 
ENTRYPOINT command param1 param2 (shell内部命令) 
示例:
FROM ubuntu 
ENTRYPOINT ["top", "-b"] 
CMD ["-c"] 
注: 
ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而 
docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有 
一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。 

LABEL:用于为镜像添加元数据

格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ... 
示例:
LABEL version="1.0" description="这是一个Web服务器" by="IT笔录"properties 
注:
使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之 
间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。 

ENV:设置环境变量

格式:
ENV <key> <value> #之后的所有内容均会被视为其的组成部分,因此,一次只能 
设置一个变量 
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"="的键值对, 
如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行 
示例:
ENV myName John Doe 
ENV myDog Rex The Dog 
ENV myCat=fluffy

EXPOSE:指定于外界交互的端口

格式:
EXPOSE <port> [<port>...] 
示例:
EXPOSE 80 443 
EXPOSE 8080 
EXPOSE 11211/tcp 11211/udp 
注:
EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发 
布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

VOLUME:用于指定持久化目录

格式:
VOLUME ["/path/to/dir"] 
示例:
VOLUME ["/data"] 
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2" 
注:一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能: 
1 卷可以容器间共享和重用 
2 容器并不一定要和其它容器共享卷 
3 修改卷后会立即生效 
4 对卷的修改不会对镜像产生影响 
5 卷会一直存在,直到没有任何容器在使用它 

WORKDIR:工作目录,类似于cd命令

格式:
WORKDIR /path/to/workdir 
示例:
WORKDIR /a (这时工作目录为/a) 
WORKDIR b (这时工作目录为/a/b) 
WORKDIR c (这时工作目录为/a/b/c) 
注:
通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等 命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录

USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

格式:
USER user 
USER user:group 
USER uid 
USER uid:gid 
USER user:gid 
USER uid:group 
示例:
USER www 
注:
使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构 
建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。 

ARG:用于指定传递给构建运行时的变量

格式:
ARG <name>[=<default value>] 
示例:
ARG site 
ARG build_user=www 

ONBUILD:用于设置镜像触发器

格式:
ONBUILD [INSTRUCTION] 
示例:
ONBUILD ADD . /app/src 
ONBUILD RUN /usr/local/bin/python-build --dir /app/src 
注:
当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发

以下是一个小例子

# This my first nginx Dockerfile 
# Version 1.0 
# Base images 基础镜像 
FROM centos 
#MAINTAINER 维护者信息 
MAINTAINER tianfeiyu 
#ENV 设置环境变量 
ENV PATH /usr/local/nginx/sbin:$PATH 
#ADD 文件放在当前目录下,拷过去会自动解压 
ADD nginx-1.8.0.tar.gz /usr/local/ 
ADD epel-release-latest-7.noarch.rpm /usr/local/ 
#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm 
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && 
yum clean all 
RUN useradd -s /sbin/nologin -M www 
#WORKDIR 相当于cd 
WORKDIR /usr/local/nginx-1.8.0 
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with- 
http_ssl_module --with-pcre && make && make install 
RUN echo "daemon off;" >> /etc/nginx.conf 
#EXPOSE 映射端口 
EXPOSE 80 
#CMD 运行以下命令
CMD ["nginx"]

下面是一个很形象的总结:
Nacos安装与Dokcerfile,Docker-Compose_第1张图片
项目集成Dockerfile
项目中可以直接使用Dockerfile,基于 docker-maven-plugin 插件使用非常方便,我们在项目中首先引入依赖:

#配置奖项REPOSITORY,例如 hailtaxi/driver 可以按照如下配置添加到pom.xml中 
<properties> 
#镜像前部分 
<docker.image.prefix>hailtaxidocker.image.prefix> 
#镜像后部分 
<docker.image.name>driverdocker.image.name> 
properties> 
#引入插件依赖 
<plugin> 
<groupId>com.spotifygroupId> 
<artifactId>docker-maven-pluginartifactId> 
<version>1.0.0version> 
<configuration> 
 
<dockerHost>http://192.168.211.145:2375dockerHost> 
<imageName>${docker.image.prefix}/${docker.image.name}imageName> 
 
<dockerDirectory>src/main/dockerdockerDirectory> 
<resources> 
<resource> 
<targetPath>/targetPath> 
<directory>${project.build.directory}directory> 
<include>${project.build.finalName}.jarinclude> 
resource> 
resources> 
configuration> 
plugin>

关于插件更多参数,大家可以参考下面列表:
Nacos安装与Dokcerfile,Docker-Compose_第2张图片
引入插件之后,我们需要在项目中创建 Dockerfile 配置文件,创建
src/main/docker/Dockerfile ,配置如下:

#基础镜像 
FROM java:8 
#挂载目录 
VOLUME /tmp 
#将hailtaxi-driver-1.0-SNAPSHOT.jar添加到容器中 
ADD hailtaxi-driver-1.0-SNAPSHOT.jar /driver.jar 
#指定容器启动程序及参数 
ENTRYPOINT ["java","-jar","/driver.jar"]

我们需要把自己的项目创建成镜像并发布,需要先安把当前工程打包(或者安装到Maven本地仓库):
Nacos安装与Dokcerfile,Docker-Compose_第3张图片
我们接下来在maven面板中找到 Plugins>docker>docker:build ,双击它,此时会创建容器。
Nacos安装与Dokcerfile,Docker-Compose_第4张图片控制台会输出镜像信息:
Nacos安装与Dokcerfile,Docker-Compose_第5张图片
此时我们可以看到IDEA的 Services 中有Docker信息,可以看到服务器上的Docker镜像和容器,如下图
Nacos安装与Dokcerfile,Docker-Compose_第6张图片
我们可以选择 hailaxi/driver:lastest 右键创建容器
在这里插入图片描述
此时我们需要填写容器名字以及创建容器所需的额外参数,如下图
Nacos安装与Dokcerfile,Docker-Compose_第7张图片
容器创建后,在Containers中会显示当前已经创建好的容器,点击容器,可以选择 Show Log 查看日志,如下图:
Nacos安装与Dokcerfile,Docker-Compose_第8张图片
Idea插件集成Dockerfile
上面集成Dockerfile用到了插件包,我们可以直接使用Idea插件集成Dockerfile要更简单,操作如下
Nacos安装与Dokcerfile,Docker-Compose_第9张图片
配置完成后,点击执行,如下图:
在这里插入图片描述
执行完成后,在Idea的Services中会显示容器和镜像,如下图:
Nacos安装与Dokcerfile,Docker-Compose_第10张图片

1.2 Docker-Compose

我们上面使用Dockerfile的时候,发现比较麻烦,需要在每个项目中单独配置Dockerfile、单独执行构建,效率比较低,我们可以使用Docker-Compose快速实现容器编排。

docker-compose简介
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层:

1:工程(project) 
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件 等,工程配置文件默认为docker-compose.yml)组成一个工程,若无特殊指定工程名即为当前目录名。 
2:服务(service) 
一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。 
3:容器(container) 
一个服务当中可包括多个容器实例。 

docker-compose安装

下载最新版的docker-compose文件

二进制文件安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

测试安装结果

docker-compose --version

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理,安装docker-compose需要借助python-pip,安装命令如下:

#Python-pip安装 
yum -y install python-pip 
#docker-compose安装 
pip install docker-compose

安装完成后查看版本信息:

#版本查看 
docker-compose -v 
#显示信息 
docker-compose version 1.25.0, build 0a186604 

docker-compose常用命令
docker-compose命令:

#命令格式 
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] 
#参数说明 
-f --file FILE指定Compose模板文件,默认为docker-compose.yml 
-p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名 
--verbose 输出更多调试信息 
-v,-version 打印版本并退出 
--log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL) 

docker-compose up命令:

#命令格式 
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...] 
#参数说明 
-d 在后台运行服务容器 
-no-color 不用颜色来区分不同的服务的控制输出 
-no-deps 不启动服务所链接的容器 
--force-recreate 强制重新创建容器,不能与-no-recreate同时使用 
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 
–no-build 不自动构建缺失的服务镜像 
–build 在启动容器前构建服务镜像 
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用 
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) 
–remove-orphans 删除服务中没有在compose文件中定义的容器

docker-compose ps命令:

#命令格式 
docker-compose ps [options] [SERVICE...] 
#命令说明:列出项目中所有的容器

docker-compose stop命令:

#命令格式 
docker-compose stop [options] [SERVICE...] 
#参数说明 
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) 
docker-compose stop停止正在运行的容器,可以通过docker-compose start 再次启动 

docker-compose -h命令:

#命令格式 
docker-compose -h 
#命令说明:查看帮助 

docker-compose down命令:

#命令格式 
docker-compose down [options] 
#命令说明:停止和删除容器、网络、卷、镜像。 
#参数说明: 
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为 
空的镜像 
-v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷 
–remove-orphans,删除服务中没有在compose中定义的容器

docker-compose logs命令:

#命令格式 
docker-compose logs [options] [SERVICE...] 
#命令说明 
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通 
过–no-color来关闭颜色。 
#参数说明 
-f 跟踪日志输出

docker-compose build命令

#命令格式 
docker-compose build [options] [--build-arg key=val...] [SERVICE...] 
#命令说明 
构建(重新构建)项目中的服务容器。 
#参数说明–compress 通过gzip压缩构建上下环境 
–force-rm 删除构建过程中的临时容器 
–no-cache 构建镜像过程中不使用缓存 
–pull 始终尝试通过拉取操作来获取更新版本的镜像 
-m, –memory MEM为构建的容器设置内存大小 
–build-arg key=val为服务设置build-time变量 
服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新 
构建服务

docker-compose pull命令:

#命令格式 
docker-compose pull [options] [SERVICE...] 
#命令说明 
拉取服务依赖的镜像。 
#参数说明 
–ignore-pull-failures,忽略拉取镜像过程中的错误 
–parallel,多个镜像同时拉取 
–quiet,拉取镜像过程中不打印进度信息 

docker-compose restart命令:

docker-compose restart [options] [SERVICE...] 
#命令说明 
重启项目中的服务。 
#命令参数 
-t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒) 

docker-compose rm命令:

#命令格式 
docker-compose rm [options] [SERVICE...] 
#命令说明 
删除所有(停止状态的)服务容器。 
#命令参数 
–f, –force,强制直接删除,包括非停止状态的容器 
-v,删除容器所挂载的数据卷 

docker-compose start命令

#命令格式 
docker-compose start [SERVICE...] 
#命令说明 
启动已经存在的服务容器。 

docker-compose run命令:

#命令格式 
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE 
[COMMAND] [ARGS...] 
#命令说明 
在指定服务上执行一个命令。 
#命令案例 
docker-compose run itheima ping www.itheima.com 
在指定容器(itheima)上执行一个ping命令

docker-compose scale命令:

#命令格式 
docker-compose scale web=3 db=2 
#命令说明 
设置指定服务运行的容器个数。通过service=num的参数来设置数量

docker-compose pause 命令:

#命令格式 
docker-compose pause [SERVICE...] 
#命令说明 
暂停一个服务容器 

docker-compose kill命令:

#命令格式 
docker-compose kill [options] [SERVICE...] 
#命令说明 
通过发送SIGKILL信号来强制停止服务容器,支持通过-s参数来指定发送的信号。 
#命令案例 
例如通过如下指令发送SIGINT信号: 
docker-compose kill -s SIGINT

docker-compose config命令:

#命令格式 
docker-compose config [options] 
#命令说明 
验证并查看compose文件配置。 
#命令参数 
–resolve-image-digests 将镜像标签标记为摘要 
-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息 
–services 打印服务名,一行一个 
–volumes 打印数据卷名,一行一个

docker-compose create命令:

#命令格式 
docker-compose create [options] [SERVICE...] 
#命令说明 
为服务创建容器。 
#参数说明 
–force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数 
–no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数 
–no-build:不创建镜像,即使缺失 
–build:创建容器前 ,生成镜像 

docker-compose exec命令:

#命令格式 
docker-compose exec [options] SERVICE COMMAND [ARGS...] 
#命令参数 
-d 分离模式,后台运行命令。 
–privileged 获取特权。 
–user USER 指定运行的用户。 
-T 禁用分配TTY,默认docker-compose exec分配TTY。 
–index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker- 
compose exec –index=1 web /bin/bash ,web服务中包含多个容器

docker-compose port命令

#命令格式 
docker-compose port [options] SERVICE PRIVATE_PORT 
#命令说明 
显示某个容器端口所映射的公共端口。 
#命令参数 
–protocol=proto,指定端口协议,TCP(默认值)或者UDP 
–index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1) 

docker-compose push命令:

#命令格式 
docker-compose push [options] [SERVICE...] 
#命令说明 
推送服务依的镜像。 
#命令参数 
–ignore-push-failures 忽略推送镜像过程中的错误 

docker-compose stop命令:

#命令格式 
docker-compose stop [options] [SERVICE...] 
#命令说明 
停止运行的容器 

docker-compose unpause 命令:

#命令格式 
docker-compose unpause [SERVICE...] 
#命令说明 
恢复处于暂停状态中的服务。

docker-compose模板文件
docker-compose 允许用户通过一个 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联 的应用容器为一个项目(project)。 docker-compose 模板文件是一个定义服务、网络和卷的YAML文
件。 Compose 模板文件默认路径是当前目录下的 docker-compose.yml ,可以使用.yml或.yaml作为文件扩展名。 docker-compose 标准模板文件应该包含 version 、 services 、 networks 三大部分。
docker-compose 目前有三个版本分别为 Version 1 , Version 2 , Version 3 , docker-compose 区分 Version 1 和 Version 2 ( Compose 1.6.0 +, Docker Engine 1.10.0 +)。 Version 2 支持更多的指令。 Version 1 将来会被弃用。
示例:

version: '2' 
services: 
  web:
    image: dockercloud/alibaba 
    ports: 
      - 8080 
    networks: 
      - front-tier 
      - back-tier 
  redis: 
    image: redis 
    links: 
      - web 
    networks: 
      - back-tier 
  lb:
     image: dockercloud/haproxy 
     ports: 
       - 80:80 
     links: 
       - web 
     networks: 
       - front-tier 
       - back-tier 
      volumes: 
        - /var/run/docker.sock:/var/run/docker.sock 
networks: 
  front-tier: 
     driver: bridge 
  back-tier: 
    driver: bridge 

docker-compose属性

#image 
image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。 
#build 
服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是 build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。 
例如: build: /path/to/build/dir 
也可以是相对路径,只要上下文确定就可以读取到Dockerfile。
例如: build: ./dir 
#context 
context选项可以是Dockerfile的文件路径,也可以是到链接到git仓库的url,当提供的值是相对路径 
时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context 
例如:build: 
       context: ./dir 
#dockerfile 
使用dockerfile文件来构建,必须指定构建路径 
例如:build: 
       context: . 
         dockerfile: Dockerfile-alternate 
#commond 
使用command可以覆盖容器启动后默认执行的命令。 
例如:command: bundle exec thin -p 3000 
#container_name 
Compose的容器名称格式是:<项目名称><服务名称><序号> 
可以自定义项目名称、服务名称,但如果想完全控制容器的命名,可以使用标签指定:container_name: app 
#depends_on 
在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题 
例如:定义容器先启动redis和db两个服务,最后才启动web 服务: 
     version: '2' 
     services: 
      web:
        build: . 
        depends_on: 
          - db 
          - redis 
      redis: 
        image: redis 
      db:
        image: postgres 
#PID 
pid: "host" 
将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用pid标签将能够访问和操纵其他 容器和宿主机的名称空间。 
#ports 
ports用于映射端口的标签,使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端 
口。
当使用HOST:CONTAINER格式来映射端口时,如果使用的容器端口小于60可能会得到错误得结果,因为 YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。 
例如:
    ports: 
     - "3000" 
     - "8000:8000" 
     - "49100:22" 
     - "127.0.0.1:8001:8001" 
#extra_hosts
添加主机名的标签,会在/etc/hosts文件中添加一些记录。 
例如:
     extra_hosts: 
      - "somehost:192.168.211.145" 
      - "otherhost:192.168.211.146" 
启动后查看容器内部hosts: 
192.168.211.145 somehost 
192.168.211.146 otherhost 
#volumes 
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用 [HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。 
Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。 
数据卷的格式可以是下面多种形式 
例如:
    volumes: 
     // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。 
      - /var/lib/mysql 
    // 使用绝对路径挂载数据卷 
      - /opt/data:/var/lib/mysql 
    // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。 
      - ./cache:/tmp/cache 
    // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。 
     - ~/configs:/etc/configs/:ro 
    // 已经存在的命名的数据卷。 
     - datavolume:/var/lib/mysql 
如果不使用宿主机的路径,可以指定一个volume_driver,volume_driver: mydriver。 
#volumes_from 
从另一个服务或容器挂载其数据卷: 
例如:
    volumes_from: 
       - service_name 
         - container_name 
#dns 
自定义DNS服务器。可以是一个值,也可以是一个列表。 
例如:
    dns:8.8.8.8 
    dns:
       - 8.8.8.8 
         - 9.9.9.9 
#expose 
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数。 
例如:
     expose: 
        - "3000" 
        - "8000" 
#links 
链接到其它服务中的容器。使用服务名称(同时作为别名),或者“服务名称:服务别名”(如 SERVICE:ALIAS) 
例如:
    links:
         - db 
         - db:database 
         - redis
         - #net 
设置网络模式。 
例如:
    net: "bridge" 
    net: "none" 
    net: "host"

项目集成Docker-compose
我们首先需要为IDEA配置Docker tool工具,Docker tool工具在资料中 DockerToolbox.exe ,双击安1装即可,安装后在Idea中引入指定对象即可,如下图:
Nacos安装与Dokcerfile,Docker-Compose_第11张图片
在IDEA中使用Docker-Compose,需要创建一个DockerCompose文件,再到每个工程中创建Dockerfile文件,完成创建后效果如下
Nacos安装与Dokcerfile,Docker-Compose_第12张图片
创建 docker-compose.yml 文件,配置内容如下:

version: '2'
services:
  hailtaxi-driver:
    build:
      #设置Dockerfile的路径
      context: ../hailtaxi-driver
      #设置Dockerfile的文件名字
      dockerfile: Dockerfile
    #设置容器名字
    container_name: hailtaxi-driver
    #网络设置
    networks:
      - hailtaxi-net
    #映射端口
    ports:
      - 18081:18081
  hailtaxi-gateway:
    build:
      context: ../hailtaxi-gateway
      dockerfile: Dockerfile
    container_name: hailtaxi-gateway
    networks:
      - hailtaxi-net
    ports:
      - 8001:8001
  hailtaxi-order:
    build:
      context: ../hailtaxi-order
      dockerfile: Dockerfile
    container_name: hailtaxi-order
    networks:
      - hailtaxi-net
    ports:
      - 18082:18082
#网络配置
networks:
  hailtaxi-net:
    driver: bridge

三个Dockerfile文件:

#hailtaxi-driver项目中的Dockerfile 
FROM java:8 
VOLUME /tmp 
ADD target/hailtaxi-driver-1.0-SNAPSHOT.jar /driver.jar 
EXPOSE 18081 
ENTRYPOINT ["java","-jar","driver.jar"] 
#hailtaxi-gateway项目中的Dockerfile 
FROM java:8 
VOLUME /tmp 
ADD target/hailtaxi-gateway-1.0-SNAPSHOT.jar /gateway.jar 
EXPOSE 8001 
ENTRYPOINT ["java","-jar","gateway.jar"] 
#hailtaxi-order项目中的Dockerfile 
FROM java:8 
VOLUME /tmp 
ADD target/hailtaxi-order-1.0-SNAPSHOT.jar /order.jar 
EXPOSE 9001 
ENTRYPOINT ["java","-jar","order.jar"] 

点击 Edit Configuration ,如下操作:
在这里插入图片描述
接下来创建 Docker-compose ,操作如下:
Nacos安装与Dokcerfile,Docker-Compose_第13张图片
接下来选择上面创建的Docker-compose,点击运行,如下操作:
在这里插入图片描述
执行后,效果如下,可以看到dockercompose下有3个容器在运行,并且增加了3个镜像。
Nacos安装与Dokcerfile,Docker-Compose_第14张图片

1.3 Nacos安装

Nacos安装模式有多种:

单机模式 Derby: 
这种模式是极简模式,数据没法持久化存储,适合开发环境。 
单机模式 MySQL:(支持MySQL5.7和MySQL5.8,我们这里学习MySQL5.7安装模式,因为当前主流还是 MySQL5.7) 
这种模式支持数据持久化,数据会存储到MySQL中,适合生产环境。 
集群模式: 
这种模式适合生产环境并且服务节点个数较多,不存在单点故障问题

克隆项目:

#克隆项目 
git clone https://github.com/nacos-group/nacos-docker.git 
#进入nacos-docker目录 
cd nacos-docker 
#查看文件列表 
ce example 
ll

文件列表如下:
Nacos安装与Dokcerfile,Docker-Compose_第15张图片

1.3.1 Nacos Derby安装

安装Nacos生产环境会结合prometheus和grafana实现对Nacos的监控,我们这里不做它们的监控操作,需要将docker-compose的配置注释掉,修改 example/standalone-derby.yaml ,配置如下:
Nacos安装与Dokcerfile,Docker-Compose_第16张图片
安装命令如下:

docker-compose -f example/standalone-derby.yaml up

安装完成后,我们可以直接访问它的控制台 http://192.168.211.145:8848/nacos ,账号密码都是nacos,效果如下:
Nacos安装与Dokcerfile,Docker-Compose_第17张图片
关于控制台的使用,我们在后面详细讲解。

1.3.2 Nacos MySQL版安装

我们先停掉之前安装的服务,并删掉之前的容器

#停掉容器 
docker stop nacos-standalone 
#删掉容器 
docker rm nacos-standalone

我们首先需要导入数据库,数据库脚本在nacos的nacos\config\src\main\resources\META-INF 工程中有对应脚本,也可以通过下面的网址获取SQL:
https://github.com/alibaba/nacos/blob/develop/config/src/main/resources/META- INF/nacos-db.sql
创建数据库 nacos_config ,并执行初始化操作,初始化脚本后,数据库数据如下:
Nacos安装与Dokcerfile,Docker-Compose_第18张图片
我们需要让Nacos链接我们安装好的MySQL,需要修改example/standalone-mysql-5.7.yaml 文件,该文件主要配置MySQL信息以及Nacos监控信息,关于Nacos监控配置我们不在这里实现,因此配置中可以注释掉,完整配置如下

version: "2" 
services: 
  nacos: 
    image: nacos/nacos-server:latest 
    container_name: nacos-standalone-mysql 
#数据库配置,如果下面配置了数据库变量,此处可以删除 
#env_file: 
# - ../env/nacos-standlone-mysql.env 
    volumes: 
      - ./standalone-logs/:/home/nacos/logs 
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties 
#开机容器自动启动 
    restart: always 
#数据库配置 
    environment: 
      - MODE=standalone 
      - TZ=Asia/Shanghai 
      - NACOS_SERVER_PORT=8848 
      - SPRING_DATASOURCE_PLATFORM=mysql 
      - MYSQL_SERVICE_HOST=192.168.211.145 
      - MYSQL_SERVICE_PORT=3306 
      - MYSQL_SERVICE_DB_NAME=nacos_config 
      - MYSQL_SERVICE_USER=root 
      - MYSQL_SERVICE_PASSWORD=123456 
    ports: 
      - "8848:8848" 
      - "9555:9555" 
    restart: on-failure

配置修改后执行创建命令:

docker-compose -f example/standalone-mysql-5.7.yaml up

此时访问后台 http://192.168.211.145:8848/nacos/ ,并创建一个配置信息,如下图:
Nacos安装与Dokcerfile,Docker-Compose_第19张图片
此时我们可以随意填写些配置,如下图:
Nacos安装与Dokcerfile,Docker-Compose_第20张图片
配置填写后,数据会添加到数据库中的 config_info 表中,如下表:
在这里插入图片描述

1.3.3 Docker安装Nacos

我们也可以直接采用Docker的方式安装Nacos,这样安装不要克隆项目也不需要修改配置文件,会更方便,安装命令如下:

docker run -d \ 
-e MODE=standalone \ 
-e SPRING_DATASOURCE_PLATFORM=mysql \ 
-e MYSQL_SERVICE_HOST=192.168.211.145 \ 
-e MYSQL_SERVICE_PORT=3306 \ 
-e MYSQL_SERVICE_USER=root \ 
-e MYSQL_SERVICE_PASSWORD=123456 \ 
-e MYSQL_SERVICE_DB_NAME=nacos_config \ 
-p 8848:8848 \ 
--restart=always \ 
--name nacos nacos/nacos-server

访问 http://192.168.211.145:8848/nacos/#/login 效果如下:
Nacos安装与Dokcerfile,Docker-Compose_第21张图片

你可能感兴趣的:(互联网微服务前沿技术栈进阶,docker,nacous安装,Dockerfile,DockerCompose)