专栏首页艾编程基于Docker构建安装Git/GitLab,以及制作springboot工程镜像

基于Docker构建安装Git/GitLab,以及制作springboot工程镜像

Git/GitLab版本控制与代码云存储的场所

免费开源的分布式版本控制系统

本地离线存储:绝大多数操作都只需要访问本地文件和资源,不用连网,在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。

分布式:每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力,不依赖于网络连接或中心服务器。其最大特色就是“分支”及“合并”操作非常快速、简便。

免费开源:安装基于Apache,Ruby等免费开源软件, 旨在快速高效地处理无论规模大小的任何软件工程 ,商业用户无任何限制,完全放心使用。

安装启动docker

1、安装docke

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v

2、配置镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://8cqoh10g.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3、安装私有仓库

# 拉取镜像
docker pull registry

# 创建容器
docker run -d -p 5000:5000 registry

#配置私有仓库地址
vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.200.133:5000"]
}

sudo systemctl daemon-reload
sudo systemctl restart docker

#启动本地仓库容器
docker start 容器ID

4、访问私有仓库

http://192.168.200.133:5000/v2/_catalog

如果访问不到,关闭防火墙:

systemctl stop firewalld

docker下gitlab安装配置使用

1、安装

#查找Gitlab镜像
docker search gitlab

#gitlab镜像拉取
docker pull gitlab/gitlab-ce

#查看本地镜像
docker images

#本机建立的3个目录
#为了gitlab容器通过挂载本机目录启动后可以映射到本机,然后后续就可以直接在本机查看和编辑了,不用再进容器操作
#配置文件
mkdir -p /home/gitlab/etc
#数据文件
mkdir -p /home/gitlab/data
#日志文件
mkdir -p /home/gitlab/logs

#启动容器
docker run --name='gitlab' -d \
 --publish 4443:443 --publish 8888:80 \
 -v /home/gitlab/etc:/etc/gitlab \
 -v /home/gitlab/data:/var/opt/gitlab \
 -v /home/gitlab/logs:/var/log/gitlab \
gitlab/gitlab-ce:latest

#查看启动日志
docker logs -f gitlab

2、配置

按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

#配置域名或IP #配置gitlab.rb cd /home/gitlab/etc vim gitlab.rb #配置http协议所使用的访问地址,不加端口号默认为80 external_url 'http://192.168.200.133' #配置gitlab.yml cd /home/gitlab/data/gitlab-rails/etc vim gitlab.yml gitlab: ## Web server settings (note: host is the FQDN, do not include http://) host: 192.168.200.133 port: 8888 https: false

3、初始化密码

gitlab 默认管理用户是root

登录:http://192.168.200.133:8888 登录修改root 的密码

4、登录

用户名 root 密码

5、创建项目

http-demo

安装Git

# 安装
yum install -y git

# 查看版本
git version

# git version 1.8.3.1

使用Git管理项目

1、使用idea从GitLab检出空项目

项目地址:http://192.168.200.133:8888/root/http-demo.git

2、复制项目并运行

idea中运行项目并访问:http://127.0.0.1:10000/user/1

3、提交代码到GitLab

在工程根目录创建 .gitignore,此文件中记录了在提交代码时哪些文件或目录被忽略

.idea/
target/
*.iml

Springboot工程制作镜像

1、SpringBoot运行Jar包

使用maven的打包插件

将下边的插件依赖拷贝到微服务工程中

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

使用maven打包并运行访问微服务工程

java -jar http-demo-1.0-SNAPSHOT.jar

2、创建Docker镜像

在linux上新建一个目录,将上一步的jar包拷贝到Linux服务器,准备创建镜像。

cd /home
mkdir icoding

测试jar包是否可以运行,执行:java -jar

java -jar http-demo-1.0-SNAPSHOT.jar

访问:http://192.168.200.133:10000/user/1

在http-demo-1.0-SNAPSHOT.jar所在文件夹位置编写Dockerfile文件

vim Dockerfile


FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
ADD http-demo-1.0-SNAPSHOT.jar app.jar 
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

在Dockerfile文件所在目录创建镜像

docker build -t http-demo:1.0-SNAPSHOT .

查看镜像

docker images

3、创建启动容器

基于http-demo:1.0-SNAPSHOT镜像创建容器,容器名称为http-demo

docker run -d -p 10000:10000 http-demo:1.0-SNAPSHOT

容器创建成功,可通过docker ps -a命令查看

4、访问页面

http://192.168.200.133:10000/user/1

5、 停止与删除

停止容器 删除容器 删除镜像

6、 使用maven构建镜像

上边构建的过程是通过手工一步一步完成,maven提供docker-maven-plugin插件可完成从打包到构建镜像、构建容器等过程。

(1)编写pom_docker.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
    </parent>

    <groupId>com.icoding</groupId>
    <artifactId>http-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--docker镜像相关的配置信息-->
                <configuration>
                    <!--镜像名,这里用工程名-->
                    <imageName>${project.artifactId}</imageName>
                    <!--Dockerfile文件所在目录-->
 <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
                    <!--TAG,这里用工程版本号-->
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!--构建镜像的配置信息-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
    <include>${project.artifactId}-${project.version}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

(2 )拷贝Dockerfile文件

(3 )在IDEA中提交修改的文件

(4) lclone最新项目

git clone http://192.168.200.133:8888/root/http-demo.git

(5 )打包构建镜像

#进入工程目录
cd http-demo
​
#打包构建镜像
mvn -f pom_docker.xml clean package -DskipTests docker:build

(6)创建启动容器

基于http-demo:1.0-SNAPSHOT镜像创建容器,容器名称为http-demo

docker run -d -p 10000:10000 http-demo:1.0-SNAPSHOT

容器创建成功,可通过docker ps -a命令查看

(7) 访问页面

http://192.168.200.133:10000/user/1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 艾编程基础教程:Linux环境下MySQL安装

    mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz (300MB+)

    艾编程
  • 分布式缓存Redis高级应用实战之为什么要用缓存机制

    一遍导致数据库缓慢或宕机的都是查询导致的,update、delete,80%的SQL都是查询,如果能够将这80%SQL抽离到缓存中;

    艾编程
  • SpringBoot源码深度解析

    Javaweb---Servlet+tomcat + Struct2 SpringMVC SPRINGboot.....

    艾编程
  • springCloud - 第10篇 - 服务间调用追踪 (zipkin 的使用)

    springcloud 集成了 zipkin 来实现对于不同服务调用的追踪和统计。

    微风-- 轻许--
  • 商城项目-搭建购物车服务

    cwl_java
  • SpringCloud:Eureka服务注册与发现

    Eureka 其实就是一个 服务注册与发现的中心,也就是相当于我们前面做的一些生产者的服务需要注册到我们的注册中心,那么我们的消费者就不用把代码写死,而是可以去...

    lwen
  • SpringCloud 2.x学习笔记:17、Spring Cloud Gateway之服务注册与发现(Greenwich版本)完整代码

    一共三个模块,服务注册模块eureka-server、服务提供模块service-hello和网关模块service-gateway。

    程裕强
  • SpringCloud Sleuth入门介绍

    案例代码:https://github.com/q279583842q/springcloud-e-book

    用户4919348
  • SpringCloud-分布式配置中心【加密-对称加密】

      前面我们介绍了SpringCloud的分布式配置中心,我们将项目中的配置信息保存在git或者码云的仓库中,但是这样一些敏感信息就暴露出来了,比如数据库连接的...

    用户4919348
  • Linux_服务器_08_网卡eth1修改为eth0

     找到与ifconfig 查出出的MAC相同的一行(NAME='eth1'这一行),把它改为"NAME=eth0 ",然后把上面一行(NAME='eth0')注...

    shirayner

扫码关注云+社区

领取腾讯云代金券