Centos下安装Docker
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源(任选一个)
#(中央仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
#(阿里仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看仓库中所有docker版本
yum list docker-ce --showduplicates | sort -r
安装docker
#安装命令:yum install docker-ce-版本号
yum install docker-ce-18.03.1.ce
启动docker
systemctl start docker
设置开机启动
systemctl enable docker
查看docker版本信息
docker version
Docker开启远程Remote API访问2375端口
通过Idea打包maven项目后push镜像到远程docker服务
编辑文件
vim /usr/lib/systemd/system/docker.service
在原文件ExecStart基础上新增内容
#ExecStart=/usr/bin/dockerd #原ExecStart文件内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改后截图如下(红色选框中为新增):
重启docker服务和docker后台守护进程
#后台守护进程
systemctl daemon-reload
#docker容器服务
systemctl restart docker
未开启Remote 2375端口情况前
http://192.168.116.134:2375/info
已开启Remote 2374端口后
http://192.168.116.134:2375/info
Idea打包Maven项目并push镜像到docker远程容器
1.将maven项目文件上传至centos下,且centos环境已配置java和maven,执行mvn package后mvn package docker:build
2.Idea中配置docker插件,打包后push镜像到远程docker服务器
docker文件位置
src/main/docker/dockerfile
docker文件内容(dockerfile文件名称应全为小写)
# 基础镜像使用java
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER xxx <xxx@xxxx.com>
# VOLUME 指定了临时文件目录为/tmp(其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp)
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar 【注意:此处jar包名必须与mvn package打包出jar的包名一致】
ADD memo_project-1.0.jar app.jar
#ENTRYPOINT 的 Exec 格式用于设置容器启动时要执行的命令及其参数
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
pom文件中新增docker插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下-->
<!--<dockerDirectory>${project.basedir}</dockerDirectory>-->
<dockerDirectory>src/main/docker</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.116.134:2375</dockerHost>
<!-- 这里是复制 war 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--war 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<!--<serverId>docker-hub</serverId>-->
<!--<registryUrl>https://index.docker.io/v1</registryUrl>-->
</configuration>
</plugin>
注意:
我这里指定finalName,在Idea打包package正常,通过[1]方式,在centos下执行mvn package打包报错找不到warName
<!--<finalName>${pom.projectname}</finalName> (通过非Idea打包报错,执行mvn package 报异常,找不到warName)-->
若取消finalName属性,springBoot项目package打包默认是[project.artifactId-version] ,可能导致打包为docker-image镜像文件报错
<!--<version>1.0-SNAPSHOT</version>--> #原pom文件中版本格式
<version>1.0</version>
- 打包
Centos服务器下执行maven项目打包
#centos环境,进入项目pom.xml文件同级目录,执行以下命令
mvn package
Idea中使用maven插件打包
Idea中docker构建镜像成功
由于已经在maven的docker插件中配置对’package’监听,打包完成后自动进行构建docker的镜像文件
在centos的控制台查看当前已构建完成镜像文件
docker images
在docker容器运行已构建好镜像(springBoot项目)
docker run -p 8080:8081 -t springboot/folder
项目运行成功截图
查询正在运行容器
docker ps
停止正在运行容器
#命令: docker stop CONTAINER_ID(容器标识 )
docker stop 00d30bd92ade
补充: docker端口映射或启动容器时报错 driver failed programming external connectivity on endpoint quirky_allen
解决措施:
#重启docker服务
systemctl restart docker
Idea中配置查看远程docker服务信息
Idea安装docker插件
配置成功截图
Idea中查看docker容器的信息
异常错误记录
【1】docker启动时报错Error response from daemon: driver failed programming external connectivity on endpoint *
处理方式:
systemctl restart docker