(1)登录官网 https://docs.docker.com/installation/ 查看安装教程,里边有在线安装和离线安装。离线安装的话需要在指定网站下载deb安装包。本次使用 docker-ce_17.12.0_ce-0_ubuntu_amd64.deb安装包,下载地址为https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/。
(2)将安装包拷贝到本地linux虚拟机中,使用dpkg -i xxx.deb命令安装。这里有个问题,docker有一些依赖包,需要一并安装:
下载依赖deb。
网址:https://pkgs.org/
搜索:libltdl7
下载deb:libltdl7_2.4.6-0.1_amd64.deb
搜索:libgcrypt20
下载deb:libgcrypt20_1.6.5-2_amd64.deb
搜索:libsystemd-journal0
下载deb:libsystemd-journal0_215-17+deb8u7_amd64.deb
以上三个deb文件和docker安装包一起安装。将四个deb文件拷贝到一个目录中,执行dpkg -i *.deb命令
以上四个包我已经下载好了,大家可以直接用:
https://download.csdn.net/download/sinat_27143551/10431257
(3)敲命令docker -v 命令确认是否安装成功
如果开发环境是windows,为了在windows机器上能访问docker进行相关操作,这里需要在linux上开放一个端口并启用远程访问
(1)我们修改/etc/default/docker,然后重启docker服务即可。
# vim /etc/default/docker
DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:2375"
# service docker restart
现在本地和远程均可通过2375端口访问docker进程了。
(2)windows机器上配置环境变量DOCKER_HOST
以上操作不一定能成功,原因不明。
建议在linux环境下编译jar包,所以需要在linux下安装jdk、maven并配置环境变量和maven仓库。如果虚拟机不能连接大网,还需要借助Nginx做一个代理。
(1)安装JDK
(2)安装Maven
(3)配置maven仓库,如果虚拟机不能连接大网,则需要先安装Nginx,配置使用与虚拟机连通的能连大网的机器代理外部镜像源。
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761
注意:ADD那一行的jar包名称和版本号要与pom中的artifactId和version一致,或者写成*.jar
如果需要设置容器的时区,在dockerfile中加上
ENV TZ=Asia/Shanghai #或者PST8PDT等,你需要的时区。
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
org.springframework.boot
spring-boot-maven-plugin
com.spotify
docker-maven-plugin
0.4.13
mambo/${project.artifactId}
${project.basedir}/src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar
server:
port: 8761
spring:
application:
name: microservice-discovery-eureka
eureka:
instance:
hostname: localhost
prefer-ip-address: true
# 表示将自己的Ip注册到eureka server,如不配置或为false,表示注册所在操作系统的hostname到eureka server
# prefer-ip-address: true
client:
# eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server
registerWithEureka: false
# 表示是否从eureka server 获取注册信息,默认为true,因为这是一个单点的eureka server,
#不需要同步其他eureka server节点的数据,故而设置为false
fetchRegistry: false
frolvlad/alpine-oraclejdk8:slim
这个镜像,所以,在打包之前我们需要先在liunx虚拟机中添加该镜像,如何添加呢,咱们的linux虚拟机连不上外网docker-hub,解决方法如下:
(1)找一个能连接到外网的linux虚拟机(比如说绿区虚拟机、阿里云的云主机等),安装docker,配置镜像加速器,加快访问docker-hub的速度:
echo "DOCKER_OPTS=\"--registry-mirror=https://yourlocation.mirror.aliyuncs.com\"" | sudo tee -a /etc/default/dockersudo service docker restart
(2)使用docker pull frolvlad/alpine-oraclejdk8:slim下载镜像
(3)使用docker save -o alpine-oraclejdk8_slim.tar frolvlad/alpine-oraclejdk8:slim将镜像打成tar包,传到离线linux虚拟机中
(4)使用docker load --input alpine-oraclejdk8_slim.tar载入镜像,输入docker images命令查看镜像是不是载入成功。
(1)cmd到微服务pom.xml所在目录
(2)输入命令:mvn clean
(3)输入命令: mvn package docker:build
此时在docker宿主机指定docker images命令可以发现镜像已经生成
linux虚拟机中执行命令:
docker run --name microservice-discovery-eureka -d -p 8761:8761 -t mambo/microservice-discovery-eureka
同理,打包athena-gateway服务,启动时使用--link关联到eureka服务:
docker run --name athena-gateway --link microservice-discovery-eureka:8761 -d -p 8762:8762 -t mambo/athena-gateway
执行docker images和docker ps -a可以看到镜像已经装好而且容器已经运行。
后记:
其实还有更方便的创建镜像的方法,就不用在windows下配置环境变量,也不用在linux中安装java和maven了:
1、在最外层的pom中加入编译插件,各个模块的pom使用上文中的编译插件。这样就可以在该pom路径下执行maven clean package一键打包各个微服务,各个模块的target目录下有生成的jar包文件:
org.apache.maven.plugins maven-compiler-plugin 3.7.0 1.8 1.8 UTF8
2、将jar包和Dockerfile拷贝到Linux下同一文件夹下,
3、执行docker build -t 镜像名:标签 . 构建镜像