1、安装前准备
安装环境 | 版本号 | 包名 |
操作系统 | centos 7.6 | centos 7.6 |
Git | 2.31.1 | git-2.31.1.tar.gz |
Gitlab | 13.9.4 | gitlab-ce-13.9.4-ce.0.el7.x86_64.rpm |
jdk | 8 | jdk-8u271-linux-x64.tar.gz |
gitlab-runner | 14.0.1 | gitlab-runner-14.0.1-1.x86_64.rpm |
Maven | 3.8.6 | apache-maven-3.8.6-bin.tar.gz |
sonarqube | 7.4 | sonarqube-7.4.zip |
https://download.csdn.net/download/ecbeach/86783441
2、docker安装
1、自动安装
先进行公钥安装,否则安装过程会报公钥不存在的错误
wget https://get.docker.com/gpg
rpmkeys --import ./gpg
一键安装命令:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动docker:
sudo systemctl start docker
sudo systemctl restart docker
设置开机启动:
systemctl enable docker
安装完成后查看版本号验证:
docker version
2、目录说明
cd /var/lib/docker #进入docker的镜像目录
cd /var/lib/docker/image/overlay2 #有的是image/aufs
cat /var/lib/docker/image/overlay2/repositories.json #查看镜像仓库内容
cd /var/lib/docker/containers #查看容器目录
cat /usr/lib/systemd/system/docker.service
cat /usr/lib/systemd/system/docker.socket
3、更换 docker 镜像源
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"], //添加公共镜像中心
"insecure-registries": ["10.193.48.228:8086"] // 添加私有镜像中心
}
国内镜像中心,可供选择:
{
"registry-mirrors": [
"https://zfzbet67.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://ovfftd6p.mirror.aliyuncs.com",
"https://cr.console.aliyun.com/"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
]
}
4、启动&重启
systemctl restart docker.service
sudo systemctl start docker
sudo systemctl restart docker
5、docker常用命令
docker login 10.193.48.228:8086 #登录私有仓库
docker login -u 用户名 -p 密码 [SERVER]
docker logout 10.193.48.228:8086 ##登出
docker build -f Dockerfile文件 -t 镜像name:镜像tag . #使用Dockerfile构建镜像
### 镜像操作
docker images #查看本地镜像仓库
docker search centos #在远程仓库搜索镜像 Docker Hub
docker pull [镜像仓库地址/]镜像name[:镜像tag] ##拉取镜像
docker pull 10.193.48.228/blade/nginx:latest
docker tag 镜像name:镜像tag 私服地址/私服项目/镜像name:镜像tag #打标签
docker tag centos:centos7.9.2009.jdk1.8 10.193.48.228:8086/pub/centos:centos7.9.2009.jdk1.8
docker push 私服地址/私服项目/私服镜像name:私服镜像tag ##推送镜像到仓库
docker push 10.193.48.228:8086/pub/centos:centos7.9.2009.jdk1.8
docker save imageId > openjdk.tar 镜像name:镜像tag . # 镜像导出
docker rmi imageId # 删除镜像
docker load -i openjdk.tar # 镜像导入
docker build -t publish:1.0 . ##用Dockerfile打镜像
docker inspect 镜像name ##查看镜像详细信息
## 容器操作
docker ps –a #查看容器状态
docker stop 容器ID ##关停运行中的容器
docker kill 容器ID ##直接杀死运行中的容器
docker rm 容器ID ##删除指定容器
docker cp /宿主机路径/ <container id>:/镜像路径 ##宿主机拷贝文件到容器
docker cp <containerId>:/镜像文件地址 /宿主机路径 ##容器拷贝文件到宿主机
## 启动时候增加-v参数进行容器内外目录挂载
docker run -it -v /宿主机要挂载到镜像的目录 :/镜像目录 centos /bin/bash
docker exec -t 容器ID /bin/bash ##进入运行中的容器内部,exit退出
## 从容器中创建新子镜像,一般是进入容器修改完毕后保存修改使用
docker commit 容器ID 镜像name:new镜像tag
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) ##启动所有容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) ##关闭所有容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2) ##删除所有容器
docker rmi $(docker images | awk '{print $3}' |tail -n +2) ##删除所有镜像
## run 运行启动镜像指令
docker run imageId –d ##创建指定容器
docker run --rm -it 镜像name:镜像tag ##运行并进入镜像内,exit退出,退出删除
docker run --rm -it 镜像name:镜像tag /bin/bash ##直接在 /bin/bash 运行
docker run --rm -itd 镜像name:镜像tag ##docker的后台运行
docker run --rm -itd 镜像name:镜像tag /bin/bash ##docker的后台运行
docker restart $(docker ps -a -q) #重启所有容器
3、docker-compose安装
1、下载安装包
https://github.com/docker/compose/releases/
2、安装
mv /home/loganadmin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod 777 /usr/local/bin/docker-compose
3、校验安装是否成功
docker-compose -v
4、卸载
sudo rm /usr/local/bin/docker-compose
4、Harbor安装
1、下载安装包
Releases · goharbor/harbor · GitHub
https://storage.googleapis.com/harbor-releases/release-2.4.0/harbor-offline-installer-v2.4.3.tgz
2、下载并解压
mkdir /data/
cd /data/
wget https://storage.googleapis.com/harbor-releases/release-2.4.0/harbor-offline-installer-v2.4.3.tgz
tar xvzf harbor-offline-installer-v2.4.3.tgz
3、修改配置
cp /data/harbor/harbor.yml.tmpl /data/harbor/harbor.yml
vim /data/harbor/harbor.yml
安装完毕后重新调整配置
docker-compose down –v
vim /data/harbor/harbor.yml
docker-compose up -d
4、安装
/data/harbor/install.sh
5、重启
docker-compose stop
docker-compose start
6、登录
http://10.193.48.228:8086
地址:http://<主机IP>
用户名:admin
密码:123456
1、创建项目
2、创建用户
系统管理-->用户管理-->创建用户
publish/Publish123456
3、仓库授权
7、推送及拉取
1、先在harbor建项目
2、拉取镜像
docker pull 10.193.48.228:8086/blade/nginx
3、给镜像打标签
docker tag nginx 10.193.48.228:8086/blade/nginx:latest
4、推送镜像
docker push 10.193.48.228:8086/blade/nginx
8、问题
1、非SSL登录失败
需要在/etc/docker/daemon.json配置私有镜像中心解决
4、Docker使用
1、直接在镜像内制作新镜像
目标用基础centos安装JDK
Dockerfile:
#1.指定基础镜像,并且必须是第一条指令
FROM centos:centos7.9.2009
#2.指明该镜像的作者和其电子邮件
MAINTAINER suzhiwen "suzhiwen@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /app/java
#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
#ADD jdk-8u271-linux-x64.tar.gz /app/java/
COPY jdk-8u271-linux-x64.tar.gz /app/java/
RUN tar -zxvf jdk-8u271-linux-x64.tar.gz
#5.配置环境变量
ENV JAVA_HOME=/app/java/jdk1.8.0_271
ENV CLASSPATH=$JAVA_HOME/lib/
ENV PATH=$PATH:$JAVA_HOME/bin
#容器启动时需要执行的命令
#CMD ["java","-version"]
1、找基础版本
在Docker Hub搜索centos找到对应版本
docker pull centos:centos7.9.2009
2、启动并把相关文件复制到镜像内
运行并进入centos基础镜像容器
docker run --rm -it centos:centos7.9.2009
容器内创建目录
mkdir -p /app/java
cd /app/java
在容器外面复制JDK安装包到容器内
docker cp /root/java/jdk-8u271-linux-x64.tar.gz c2afc997090a:/app/java
解压安装包并进行相关配置即可
3、保存镜像并验证
保存镜像
docker commit c2afc997090a centos:centos7.9.2009.jdk1.8
启动保存的镜像并验证
docker run --rm -it centos:centos7.9.2009.jdk1.8 /bin/bash
注意,这里需要重新加载profile才能生效
4、上传到私人仓库中
先在管理后台创建项目
打tag
docker tag centos:centos7.9.2009.jdk1.8 10.193.48.228:8086/pub/centos:centos7.9.2009.jdk1.8
上传到私人仓库
docker push 10.193.48.228:8086/pub/centos:centos7.9.2009.jdk1.8
验证
2、通过dockerfile制作镜像
1、准备好打包好的发布包
publish.jar
2、创建Dockerfile文件
可以参考Dockerfile编写以及打包 java 程序为镜像_玖涯的博客-CSDN博客_dockerfile 打包java
vim Dockerfile
# 基础镜像
FROM centos:centos7.9.2009.jdk1.8
ENV JAVA_HOME /app/java/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
RUN mkdir -p /app/soft/publish/
COPY publish.jar /app/soft/publish/
# 暴露端口 8090 --!!!容器内部端口
EXPOSE 8090
# 入口,jar文件的启动命令
ENTRYPOINT ["java","-jar","/app/soft/publish/publish.jar","--spring.profiles.active=uat"]
3、打包镜像
docker build -t publish:1.0 .
注意:打包过程每一步创建的过程镜像可以单独进入并检查
4、启动并验证
docker run --name publish -d -p 9091:8090 publish:1.0
http://10.193.48.228:9091/publish/pipelines/queryCriteria?groupId=&groupProjectId=
3、通过maven打包制作镜像
1、pom文件引入插件
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<from>
<!-- 来源镜像,基于哪个镜像打包,比如JDK8 -->
<image>10.193.48.228:8086/pub/centos:jdk8</image>
<auth>
<username>admin</username>
<password>123456</password>
</auth>
</from>
<to>
<!-- 构建的镜像名称含私有仓库的地址,后续需要这个镜像名称,一般tag建议使用gitlab的CI_PIPELINE_ID作为镜像的tag,方便后续的处理 -->
<image>10.193.48.228:8086/pub/publish:${image_tag}</image>
<auth>
<!-- 私有镜像仓库的用户名和密码 -->
<username>admin</username>
<password>123456</password>
<!-- <username>${registry_username}</username> <password>${registry_password}</password> -->
</auth>
</to>
<!--允许非https-->
<allowInsecureRegistries>true</allowInsecureRegistries>
<!--容器相关的属性-->
<container>
<!--指定工作目录 相当于dockerfile 中的 WORKDIR-->
<workingDirectory>/app/soft/publish/</workingDirectory>
<!--相当于 dockerdile 中的 VOLUME 指定容器的目录挂载点
<volumes>/app/log</volumes>-->
<!--指明主类,不使用时jib会接收spring传过来的${start-class}参数,但是当应用中存在多个main时需要指定-->
<mainClass>com.logan.publish.Application</mainClass>
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
<!--相当于dockerfile中的 entrypoint,entrypoint没指定时jib将会输出默认的执行命令,格式是java -cp-->
<entrypoint>
<arg>/bin/sh</arg>
<arg>-c</arg>
<!-- <arg>java -jar /app/soft/publish/publish.jar --spring.profiles.active=uat</arg>-->
<arg>java -cp /app/resources/:/app/classes/:/app/libs/* com.logan.publish.Application</arg>
<!-- <arg>java ${JAVA_OPTS} -cp /app/resources/:/app/classes/:/app/libs/* com.logan.Nfms2GateWayApplication</arg>-->
</entrypoint>
<!--容器的环境变量,可以指定多个 -->
<environment>
<TZ>Asia/Shanghai</TZ>
</environment>
<!--jvm内存参数-->
<jvmFlags>
<jvmFlag>-Duser.timezone=Asia/Shanghai</jvmFlag> <!-- 设置为中国标准时间 -->
<!--<jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
<jvmFlag>-Xms6g</jvmFlag>
<jvmFlag>-Xmx6g</jvmFlag>
<jvmFlag>-Xmn2g</jvmFlag>-->
</jvmFlags>
<!--要暴露的端口-->
<ports>
<port>8090</port>
</ports>
<args>
<arg>--spring.profiles.active=uat</arg>
</args>
<!--使用该参数将镜像的创建时间与系统时间对其,解决默认时间不准的问题
<useCurrentTimestamp>true</useCurrentTimestamp>-->
</container>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<!-- 本地构建这个-->
<!--<goal>dockerBuild</goal>-->
<!-- 远程构建是这个-->
<goal>build</goal>
</goals>
</execution>
</executions>
<!--sendCredentialsOverHttp 打成jar包启动时使用-DsendCredentialsOverHttp=true来传递参数-->
</plugin>
2、打包
参数名 | 作用 |
dockerBuild | 将镜像存入当前镜像仓库,该仓库是当前docker客户端可以连接的docker daemon,一般是指本地镜像仓库 |
build | 将镜像推送到远程仓库,仓库位置与镜像名字的前缀有关,一般是hub.docker.com,使用该参数时需要提前登录成功 |
buildTar | 将镜像生成tar文件,保存在项目的target目录下,在任何docker环境执行 docker load --input xxx.tar即可导入到本地镜像仓库 |
#-DsendCredentialsOverHttp=true使用http的方式
mvn compile jib:build -Dimage_tag="1.0" -DsendCredentialsOverHttp=true
3、拉取镜像
docker pull 10.193.48.228:8086/pub/publish:1.0
4、启动并验证
docker run --name publish -d -p 9091:8090 10.193.48.228:8086/pub/publish:1.0
http://10.193.48.228:9091/publish/pipelines/queryCriteria?groupId=&groupProjectId=
5、配置idea打包命令
1、maven配置命令按钮
2、直接命令行