安装docker及dockerfile-maven打包发布到私服

647 阅读3分钟

使用dockerfile-maven原因:

为了简化操作,提高生产效率

安装docker

根据官网文档进行操作:https://docs.docker.com/engine/install/centos/
服务器环境为centOs7 
  1. 清除默认系统安装包
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

如果之前安装过,还要清除以下目录文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
查看安装的软件包命令(如果还需要别的命令,请自性查找😉...):
rpm -qa |grep docker
yum list installed |grep docker

2.更新一下系统的软件包索引

yum makecache fast

3.安装docker 所需的环境

 sudo yum install -y yum-utils
 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

切换阿里云的源,提高下载速度🔥(该说不说确实那啥)

4.到此 可以安装docker了

sudo yum install docker-ce docker-ce-cli containerd.io

5.docker一些常用命令

刷新配置文件
systemctl daemon-reload
启动
systemctl start docker
重新启动
systemctl restart docker
查看docker状态
systemctl status docker
停止
systemctl stop docker
查看信息
docker version
查看容器日志
docker logs -f -t --tail 100 [options:id]
-f:跟踪日志输出
--since :显示某个开始时间的所有日志
-t:显示时间戳
--tail :仅列出最新N条容器日志

6.docker主要基于两方面操作
镜像:
删除镜像
docker rmi [options:id]
容器:
停止容器
docker kill [options:id]
重启容器
docker restart [options:id]
7.该开始安装docker私服了
官方提供了镜像作为私服的存储,执行以下命令拉取私服

docker pull registry

8.配置私服
#cd /etc/docker/daemon.json -> 没有就自己在创建

{
    #下载源
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
    #对此上传的镜像信任,后期需要配置此地址跟dockerfile-maven插件结合使用
    #ip为docker服务所在的地址
    "insecure-registries": [
            "ip:port"
        ]
}

9.最后启动私服即可
此处涉及一些 docker启动参数 可自行查找

docker run -dit -p 5000:5000  --name myregistry --restart=always registry

springboot结合插件进行打包

此处主要是对pom.xml进行配置即可,无需修改太多参数

项目的pom文件配置

<build>
    <finalName>boot-docker</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
        <plugin>
            <!-- dockerfile-maven-plugin建议用1.4.X 以后的版本,3之前会有一些小问题-->
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>${dockerfile-maven.version}</version>
            <executions>
                <execution>
                    <id>default</id>
                     <!-- 如过打包不想创建镜像,就注释掉此处-->
                    <goals>
                        <goal>build</goal>
                        <goal>push</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!--
                    ip:port 为docker远程访问的端口 docker.pro.adr 地址,前面有说明
                    repository:镜像名称,如果要推到私服,这个地址很关键
                    dockerfile:这个名称就很好理解
                    buildArgs:一些参数 打包时会传递到dockerfile文件中
                -->
                <repository>${docker.pro.adr}/${project.artifactId}</repository>
                <dockerfile>${project.basedir}/Dockerfile</dockerfile>
                <tag>${project.version}</tag>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

编写dockerfile

Dockerfile文件大概率要放在跟src同级目录

#FROM openjdk:[tag] 
FROM openjdk:11

#COPY *.jar /app.jar
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
#对外暴露的端口
EXPOSE 9999
# 启动容器执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]

其他的参数自己查吧,我也很懒的好么🤨

到此就可以进行打包后的私服发布了,如果是IDEA 请执行maven命令:
如果打包到服务器,就执行 mvn package
如果打包到私服,就执行 mvn deplay

&Q (问题)

1-开启docker远程访问

如果package 失败,请开启docker 远程访问端口,找到/lib/systemd/system/docker.service这个文件 修改如下配置 [port] 官网默认2375 端口,请自行修改,修改后记得重启和重载配置文件

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:<port>

2-本地开发没有docker环境

如果本地开发没有docker环境,那么请在系统环境便量中添加 DOCKER_HOST= tcp://ip:port 这个地址为docker服务所在地址
重点:端口要和docker远程访问开启的一致
最后说一下:
系统环境变量所配置的地址是为了上传项目到docker服务器后进行打包的地址
而“repository”中的地址是上传镜像到私服的地址

END 🙄