docker部署

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 镜像源

配置完需要重启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 &#45;&#45;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、直接命令行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值