第2部:DevOps进阶
代码审计
SonarQube 是一个开源的代码质量管理平台,用于自动化检测代码中的质量问题和安全漏洞,帮助团队持续提升代码质量。

官方地址:https://www.sonarsource.com/products/sonarqube/downloads/
*核心功能*
- *静态代码分析*
自动识别代码缺陷(如空指针异常)、安全漏洞(如SQL注入)和代码异味(不良设计),支持30+编程语言(Java、C#、 Python等)。
集成PMD、 FindBugs、Checkstyle等插件增强检测能力,提供深度规则定制。
- *多维质量指标*
分析代码重复率、复杂度(圈复杂度)、注释覆盖率及单元测试覆盖率(需集成JaCoCo等工具)。
量化技术债务,生成修复优先级建议。
- *开发流程集成*
无缝对接CI/CD工具(Jenkins、GitLab CI、GitHub Actions),提交代码后自动触发扫描。
通过IDE插件(SonarLint)实时反馈问题,支持开发阶段即时修复。
- *质量门禁(* *Quality* *Gate* *)*
定义质量阈值(如漏洞数量上限),未达标代码自动阻断合并或部署。
*部署*
在Jenkins服务器上,拉取postgres数据库和代码审计sonarqube镜像
bash
[root@jenkins ~]# docker pull postgres:12.6 #支持版本[root@jenkins ~]# docker pull sonarqube:8.9.6-community //此版本为TLS长期稳定版
创建代码审计容器创建脚本
[root@jenkins docker]# pwd /usr/local/docker[root@jenkins docker]# mkdir sonarqube_docker[root@jenkins docker]# l sjenkins_docker sonarqube_docker[root@jenkins docker]# cd sonarqube_docker/[root@jenkins sonarqube_docker]# vim docker-compose.yml
脚本内容如下:


启动脚本
bash
[root@jenkins sonarqube_docker]# docker-compose up -dCreating network "sonarqube_docker_sonarnet" with driver "bridge" Creating db ... doneCreating sonarqube ... done
查看日志
[root@jenkins sonarqube_docker]# docker logs -f
sonarqube...ERROR: [1] bootstrap checks failed. You must address the points described i n the following [1] lines before starting Elasticsearch.bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] i s too low, i ncrease to at least [262144]ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log2025.06.29 13:31:49 INFO es stopping ...2025.06.29 13:31:49 INFO es stopped2025.06.29 13:31:49 INFO es closing ...2025.06.29 13:31:49 INFO es closed2025.06.29 13:31:49 WARN app Process exited with exit value [es]: 782025.06.29 13:31:49 INFO app Process[es] is stopped2025.06.29 13:31:49 INFO app SonarQube is stopped
解决问题:虚拟内存太小, max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] ,需要扩容
[root@jenkins sonarqube_docker]# vim /etc/sysctl.conf ...vm.max_map_count=262144 //最末尾追加[root@jenkins sonarqube_docker]# sysctl -p
重新创建
[root@jenkins sonarqube_docker]# docker-compose up -d db is up-to-dateStarting sonarqube ... done
再次查看日志,资源顺利启动
[root@jenkins sonarqube_docker]# docker logs -f
sonarqube...2025.06.29 13:44:06 INFO web Counting number of projects in warning will be disabled as there are no more projects i nwarning.2025.06.29 13:44:07 INFO ce Starting ce2025.06.29 13:44:07 INFO ce(o.s.ce.app.CeServer)] Compute Engine starting up...2025.06.29 13:44:08 INFO ce Connected to local Elasticsearch: [http://localhost:9001]2025.06.29 13:44:09 INFO ce Create JDBC data source for jdbc:postgresql://db:5432/sonar2025.06.29 13:44:11 INFO ce SonarQube home: /opt/sonarqube2025.06.29 13:44:12 INFO ce Load plugins2025.06.29 13:44:14 INFO ce Running Community edition2025.06.29 13:44:14 INFO ce(o.s.ce.app.CeServer)] Compute Engine is operational2025.06.29 13:44:14 INFO app Process[ce] i s up2025.06.29 13:44:14 INFO app SonarQube i s up
访问地址: http://192.168.100.154:9000/

进行登录

更新密码

登录到sonarqube首页界面

下载并安装中文插件

下载并安装

出现报错: Error while downloading plugin '10nzh' with version '10.7'. No compatible plugin found.
问题解决:
修正docker-compose.yml文件:


本地中文插件sonar-l10n-zh-plugin-8.9.jar放入,并服务重启
bash
[root@jenkins sonarqube_docker]# docker-compose stop
[root@jenkins sonarqube_docker]# docker-compose up -d
[root@jenkins sonarqube_docker]# ls docker-compose.yml
plugins//插件复制到plugins目录中,并再次重新启动
[root@jenkins plugins]# rz -Erz waiting to receive.
[root@jenkins plugins]# l ssonar-l10n-zh-plugin-8.9.jar
[root@jenkins plugins]# docker-compose restart Restarting sonarqube ... doneRestarting db ...done
#注意:如果出现sonar无法正常启动,需要把原来启动的sonarqube和postgre容器删除掉,再重新使用docker-compose拉起来

*代码测试*
回到Windows系统的idea上
sonarqube会支持两种方式测试代码:
*maven* *方式*
1: maven方式, sonarqube对maven有支持,可以使用maven命令对代码测试。修改maven 目录下的settings.xml文件

指定位置插入如下内容: sonarqube的用户名、密码和Jenkins主机节点

代码: (放在文件最后一个profiles中)
sonar true <sonar.login>admin</sonar.login> <sonar.password>abc123 ! !</sonar.password><<sonar.host.url>>http://192.168.100.154:9000%3C/<sonar.host.url>>
设置maven环境变量


在idea当前终端命令行进行输入:

执行
E:\IdeaProjects\demo_web>mvn sonar:sonar

版本报错
原因: sonar-maven-plugin:4.0.0.4121默认支持jdk11,而项目中使用的是jdk8,导致版本出错

解决问题:
可以采用下载对应的sonar-maven-plugin:3.11.0.3922版本来解决在pom.xml中插入以下内容:

插件代码如下:
org.sonarsource.scanner.maven sonar-maven-plugin3.11.0.3922
重新执行mvn sonar:sonar ,进行加载

打开sonarqube网页,完成项目代码审计

查看检测结果

选择查看到的问题点


*sonar* *-* *scanner* *方式*
官方插件下载地址:https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/sonarscanner/
在Jenkins服务器上操作,把压缩包sonar-scanner-cli-4.6.0.2311-linux.zip解压到Jenkins的data目录中
bash
[root@jenkins ~]# unzip sonar-scanner-cli-4.6.0.2311-linux.zip
[root@jenkins ~]# mv sonar-scanner-4.6.0.2311-linux/ sonar-scanner
[root@jenkins ~]# mv sonar-scanner /usr/local/docker/jenkins_docker/data/
修改配置
[root@jenkins data]# cd /usr/local/docker/jenkins_docker/data/sonar- scanner/conf/
[root@jenkins conf]# ls
[sonar-scanner.properties](sonar-scanner.properties)
[root@jenkins conf]# vim [sonar-scanner.properties](sonar-scanner.properties)
#Configure here general information about the environment, such as SonarQube server connection details for example#No information about specific project should appear here
#----- Default SonarQube server[sonar.host.url=](sonar.host.url=)[http://192.168.100.154:9000 //](http://192.168.100.154:9000//)去掉注释,修改为Jenkins的IP地址 #----- Default source code encodingsonar.sourceEncoding=UTF-8 //去掉注释
进行项目代码测试


需要使用token令牌进行身份验证点击右上角,用户-我的账号


添加参数,再次执行,需要添加编译过后内容的位置
bash
[root@jenkins mytest]# /usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.login=756ecd2921adb03b586562f76b62815ad234081d -Dsonar.projectKey=linux- test...ERROR: Error during SonarScanner execution[org.sonar.java.AnalysisException:](org.sonar.java.AnalysisException:) Your project [contains .java](contains.java) files, pleaseprovide compiled classes with [sonar.java.binaries](sonar.java.binaries) property, or exclude them from the analysis with sonar.exclusions property.
继续添加参数,则测试成功(注意: 756ecd2921adb03b586562f76b62815ad234081d,这个密钥后面整合Jenkins要用到)


回到sonarqube网页中查看

*代码审计整合* *Jenkins*
使用插件导入sonar.hpi


搜索已安装插件

系统配置-SonarQube servers


注意:先应用再保存后,再回到系统配置中

添加凭据信息

应用凭据

Jenkins中调用sonar-scanner工具系统管理-全局工具配置


添加名称和容器内部路径

在项目中进行配置

构建位置进行添加构建步骤

添加内容如下
sonar.projectname= J O B N A M E s o n a r . p r o j e c t K e y = {JOB_NAME} sonar.projectKey= JOBNAMEsonar.projectKey={JOB_NAME} sonar.source=./<sonar.java.binaries=target>
进行构建

构建报错:

解决问题:因为之前在Jenkins服务器上使用命令进行了构建,产生过隐藏文件.scannerwork夹需要删除
root@jenkins mytest# l s -a. ... demo_web.iml docker .git .gitattributes .gitignore HELP.md .idea pom.xml .scannerwork src targetroot@jenkins mytest# rm -rf .scannerwork/root@jenkins mytest# l s -a. ... demo_web.iml docker .git .gitattributes .gitignore HELP.md .idea pom.xml src target
再次构建
过程中调用了sonarqube

完成构建

查看sonarqube网页,观察到代码测试结果

*harbor* *镜像仓库*

*部署*
在Jenkins服务器上把harbor压缩包进行解压缩,进行设置后,启动安装
bash
[root@jenkins ~]# tar zxvf harbor-offline-installer-v2.8.2.tgz -C /usr/local/ [root@jenkins ~]# cd /usr/local/harbor/
//生成配置脚本
[root@jenkins harbor]# cp -p harbor.yml.tmpl harbor.yml //编辑配置脚本
[root@jenkins harbor]# vim harbor.yml
//设置Jenkins节点IP
hostname: 192.168.100.154 //注释掉所有关于[https](https)选项
\#https:
\# [https](https) port for harbor, default is 443
\# port: 443
\# The path of cert and key files for nginx
\# certificate: /your/certificate/path
\# private_key: /your/private/key/path
//设置账户密码
harbor_admin_password: harbor123 //启动安装脚本
[root@jenkins harbor]# ./install.sh
WARN[[0000](#bookmark8)] /usr/local/harbor/docker-compose.yml: `version` is obsolete
| + Running 10/10✔ Network harbor_harbor | Created |
|---|---|
| 0.1s ✔ Container harbor-log | Started |
| 0.5s ✔ Container registryctl | Started |
| 1.4s ✔ Container harbor-db | Started |
| 1.5s ✔ Container redis | Started |
| 1.3s ✔ Container harbor-portal | Started |
| 1.3s ✔ Container registry 1.4s | Started |

打开harbor镜像仓库地址网页,默认端口80 http://192.168.100.154/
输入用户名: admin
密码: harbor123

登录成功后进入首页

创建项目

点击新建好的repo项目,默认没有任何镜像

修改docker配置文件,添加仓库地址
bash
[root@jenkins docker]# vim /etc/docker/daemon.j son {
"insecure-registries": ["192.168.100.154:80"], //添加仓库节点地址及端口
"registry-mirrors": [
"https://05vz3np5.mirror.aliyuncs.com",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://mirror.baidubce.com",
"https://docker.1panel.live"
]
}
//重启docker服务 ,后面需要把运行容器服务都进行重启(harbor,Jenkins,sonarqube) [root@jenkins docker]# systemctl restart docker
//重启harbor
[root@jenkins docker]# cd /usr/local/harbor/
[root@jenkins harbor]# docker-compose restart Restarting harbor-jobservice ... done
Restarting nginx ... done
Restarting harbor-core ... done
Restarting registry ... done
Restarting harbor-portal ... done
Restarting registryctl ... done
Restarting harbor-db ... done
Restarting redis ... done
Restarting harbor-log ... done
[root@jenkins harbor]# docker ps -a
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS
NAMES
74ded759a05c goharbor/harbor-jobservice:v2.8.2 "/harbor/entrypoint.... " 20
minutes ago Up 10 seconds (health: starting) harbor-jobservice
f0ad6c2766b6 goharbor/nginx-photon:v2.8.2 "nginx -g 'daemon of... " 20
minutes ago Up 13 seconds (health: starting) 0.0.0.0:80->8080/tcp, :::80- >8080/tcp nginx
| b2639a702871 goharbor/harbor-core:v2.8.2 | "/harbor/entrypoint.... " | 20 |
|---|---|---|
| minutes ago Up 13 seconds (health: starting) harbor-coref64c95413632 goharbor/registry-photon:v2.8.2 | "/home/harbor/entryp... " | 20 |
| minutes ago Up 14 seconds (health: starting) registry |

重启Jenkins服务
bash
[root@jenkins jenkins_docker]# cd /usr/local/docker/jenkins_docker/[root@jenkins jenkins_docker]# docker-compose restart Restarting jenkins ... done
重启sonarqube服务
[root@jenkins jenkins_docker]# cd ../sonarqube_docker/[root@jenkins sonarqube_docker]# docker-compose restart Restarting sonarqube ... doneRestarting db ... done
***\*推送镜像\****
Jenkins服务器本地登录harbor
[root@jenkins sonarqube_docker]# docker login -u admin -p harbor123192.168.100.154:80WARNING ! Using --password via the CLI i s i nsecure. Use --password-stdin.WARNING ! Your password will be stored unencrypted i n /root/.docker/config.j son. Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
下载测试镜像nginx
[root@jenkins sonarqube_docker]# docker pull nginx
修改tag标签
镜像命名规范:仓库IP地址/项目名称/镜像名称:版本号
[root@jenkins sonarqube_docker]# docker tag nginx:latest 192.168.100.154:80/repo/nginx:test
推送镜像到harbor
[root@jenkins sonarqube_docker]# docker push 192.168.100.154:80/repo/nginx:test The push refers to repository [192.168.100.154:80/repo/nginx]07eaefc6ebf2: Pushedde2ef8ceb76a: Pushede6c40b7bdc83: Pushedf941308035cf: Pushed81a9d30670ec: Pushed1bf33238ab09: Pushed1bb35e8b4de1: Pushed test: digest:sha256:ccde53834eab53e85b35526a647cdb714ea4521b1ddf5a07b5c8787298d13087 size: 1778
查看harbor的repo中已经有了nginx:test镜像

*拉取镜像*
在本地Jenkins服务器中测试拉取,在拉取前先删除原有镜像
//查看本地镜像
bash
[root@jenkins sonarqube_docker]# docker images
| REPOSITORY | TAG | IMAGE ID | CREATED |
|---|---|---|---|
| SIZE192.168.100.154:80/repo/nginx | test | 9592f5595f2b | 6 days ago |
| 192MBnginx | latest | 9592f5595f2b | 6 days ago |
| 192MBpostgres | latest | fbd9a209d4e8 | 3 weeks ago |
| 438MBgoharbor/harbor-exporter | v2.8.2 | 63341a78f287 | 2 years ago |
| 98.1MBgoharbor/redis-photon | v2.8.2 | 6f4498a430ca | 2 years ago |
| 121MBgoharbor/trivy-adapter-photon | v2.8.2 | 06de9f1c733d | 2 years ago |
| 460MBgoharbor/notary-server-photon | v2.8.2 | ef7c8ea2dc49 | 2 years ago |
| 114MBgoharbor/notary-signer-photon | v2.8.2 | 4e5b1746a124 | 2 years ago |
| 111MBgoharbor/harbor-registryctl | v2.8.2 | fa61a236a6d6 | 2 years ago |
| 142MBgoharbor/registry-photon | v2.8.2 | f80e71363231 | 2 years ago |
| 79.3MBgoharbor/nginx-photon | v2.8.2 | 3d009028f260 | 2 years ago |
| 120MB |
| goharbor/harbor-log | v2.8.2 | 2914d282d9bf 2 years ago |
|---|---|---|
| 127MBgoharbor/harbor-jobservice | v2.8.2 | 40118f1568a8 2 years ago |
| 141MBgoharbor/harbor-core | v2.8.2 | 0bbbd1f379fc 2 years ago |
| 165MBgoharbor/harbor-portal | v2.8.2 | 3e74e0758aa4 2 years ago |
| 127MBgoharbor/harbor-db | v2.8.2 | 5126635ae9f0 2 years ago |
| 174MBgoharbor/prepare | v2.8.2 | eb3cf3cdd17a 2 years ago |
| 163MBjenkins/jenkins | 2.346.3-lts-jdk8 | d2378ff7630c 2 years ago |
| 570MBsonarqube | 8.9.6-community | 3f623568fa64 3 years ago |
| 497MB//删除已有的镜像 |
bash
[root@jenkins sonarqube_docker]# docker rmi 192.168.100.154:80/repo/nginx:test
Untagged: 192.168.100.154:80/repo/nginx:test Untagged:
192.168.100.154:80/repo/nginx@sha256:ccde53834eab53e85b35526a647cdb714ea4521b1dd f5a07b5c8787298d13087
//测试拉取
[root@jenkins sonarqube_docker]# docker pull 192.168.100.154:80/repo/nginx:test test: Pulling from repo/nginx
Digest: sha256:ccde53834eab53e85b35526a647cdb714ea4521b1ddf5a07b5c8787298d13087 Status: Downloaded newer image for 192.168.100.154:80/repo/nginx:test
192.168.100.154:80/repo/nginx:test //再次查看,拉取成功
[root@jenkins sonarqube_docker]# docker images
| REPOSITORY | TAG | IMAGE ID | CREATED |
|---|---|---|---|
| SIZE192.168.100.154:80/repo/nginx | test | 9592f5595f2b | 6 days ago |
| 192MBnginx | latest | 9592f5595f2b | 6 days ago |
| 192MBpostgres | latest | fbd9a209d4e8 | 3 weeks ago |
| 438MBgoharbor/harbor-exporter | v2.8.2 | 63341a78f287 | 2 years ago |
| 98.1MBgoharbor/redis-photon | v2.8.2 | 6f4498a430ca | 2 years ago |
| 121MBgoharbor/trivy-adapter-photon | v2.8.2 | 06de9f1c733d | 2 years ago |
| 460MBgoharbor/notary-server-photon | v2.8.2 | ef7c8ea2dc49 | 2 years ago |
| 114MBgoharbor/notary-signer-photon | v2.8.2 | 4e5b1746a124 | 2 years ago |
| 111MBgoharbor/harbor-registryctl | v2.8.2 | fa61a236a6d6 | 2 years ago |
| 142MBgoharbor/registry-photon | v2.8.2 | f80e71363231 | 2 years ago |
| 79.3MBgoharbor/nginx-photon | v2.8.2 | 3d009028f260 | 2 years ago |
| 120MBgoharbor/harbor-log | v2.8.2 | 2914d282d9bf | 2 years ago |
| 127MBgoharbor/harbor-jobservice | v2.8.2 | 40118f1568a8 | 2 years ago |
| 141MB |
| goharbor/harbor-core | v2.8.2 | 0bbbd1f379fc 2 years ago |
|---|---|---|
| 165MBgoharbor/harbor-portal | v2.8.2 | 3e74e0758aa4 2 years ago |
| 127MBgoharbor/harbor-db | v2.8.2 | 5126635ae9f0 2 years ago |
| 174MBgoharbor/prepare | v2.8.2 | eb3cf3cdd17a 2 years ago |
| 163MBjenkins/jenkins | 2.346.3-lts-jdk8 | d2378ff7630c 2 years ago |
| 570MBsonarqube | 8.9.6-community | 3f623568fa64 3 years ago |
| 497MB |
*Jenkins* *服务中使用* *docker*
Jenkins需要把镜像制作并推送到harbor中,就需要具备docker环境让Jenkins容器使用宿主机中docker环境
修改docker.sock的权限
bash
[root@jenkins docker]# cd /var/run/[root@jenkins run]# ll...srw-rw----. 1 root docker 0 6月 26 15:31 docker.sock...[root@jenkins run]# chown root:root docker.sock [root@jenkins run]# chmod o+rw docker.sock[root@jenkins run]# ll...srw-rw-rw-. 1 root root 0 6月 26 15:31 docker.sock...
修改Jenkins脚本配置文件
[root@jenkins run]# cd /usr/local/docker/jenkins_docker/[root@jenkins jenkins_docker]# vim docker-compose.yml version: "3.1"services:jenkins:image: jenkins/jenkins:2.346.3-lts-jdk8container_name: jenkinsports:- 8080:8080- 50000:50000 volumes:- ./data/:/var/jenkins_home/- /var/run/docker.sock:/var/run/docker.sock //添加- /usr/bin/docker:/usr/bin/docker //添加- /etc/docker/daemon.json:/etc/docker/daemon.j son //添加
启动Jenkins服务
[root@jenkins jenkins_docker]# docker-compose up -d Recreating jenkins ... done
验证:进入Jenkins容器内部执行docker命令
[root@jenkins jenkins_docker]# docker exec -it jenkins bash jenkins@0eb81fc79a4a:/$ docker versionClient: Docker Engine - Community Version: 26.1.4API version: 1.45Go version: go1.21.11Git commit: 5650f9bBuilt: Wed J un 5 11:32:04 2024OS/Arch: linux/amd64Context: default Server: Docker Engine - Community Engine:Version: 26.1.4API version: 1.45 (minimum version 1.24)Go version: go1.21.11Git commit: de5c9cfBuilt: Wed J un 5 11:31:02 2024OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.6.33GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957runc:Version: 1.1.12GitCommit: v1.1.12-0-g51d5e94docker-init:Version: 0.19.0GitCommit: de40ad0
*Jenkins* *服务中构建镜像推送到* *harbor* *仓库*
到Windows系统的idea中,删除docker-compose文件

修改一下内容3.0重新提交


添加3.0标签


项目-配置-构建后操作


选择执行shell


命令内容如下:
mv target/*.jar docker/docker build -t mytest:$tag docker/
选择对应的标签进行构建

镜像构建成功

在Jenkins服务器中查看镜像
root@jenkins jenkins_docker# docker imagesREPOSITORY TAG IMAGE ID CREATEDSIZEmytest v3.0 07c0cd7efbf4 2 minutes ago543MB
推送到harbor配置
项目-配置-构建后操作

编辑内容如下:(登录harbor-定义镜像标签-推送harbor)
bash
docker login -u admin -p harbor123 192.168.100.154:80docker tag mytest:$tag 192.168.100.154:80/repo/mytest:$tag docker push 192.168.100.154:80/repo/mytest:$tag
再次进行构建3.0项目

完成构建

查看harbor的repo项目中已成功存储mytest镜像


*镜像部署目标* *web* *服务器*
1:告知目标服务器拉取哪个镜像。 告知内容(harbor地址; harbor仓库名;镜像名;镜像版本;容器运行端口号)
2:判断当前服务器是否正在运行该容器,如果正在运行则需要删除。
3:如果目标服务器已经存在当前镜像,则需要删除该镜像。
4:目标服务器拉取harbor上的镜像。
5:将拉取的镜像运行为容器在Jenkins服务器中,编写脚本


打开项目-配置-General
添加字符参数,容器启动时,主机端口

再添加字符参数,添加容器端口

构建后操作

命令内容如下:(注意: <deploy.sh>脚本复制过去,并没有执行权限,需要重新赋予)
mv /usr/local/test/deploy.sh /usr/bin/chmod +x /usr/bin/deploy.sh<deploy.sh> <192.168.100.154> repo {JOB_NAME} tag container_port host_port
进行构建

查看构建结果

在目标web服务器中查看镜像
root@web \~# docker images REPOSITORY TAGIMAGE ID CREATEDSIZE192.168.100.154/repo/mytestv3.0734827ccc3539 minutes ago543MB
查看容器
| root@web \~# docker ps -aCONTAINER ID IMAGE COMMANDCREATED STATUS PORTSNAMES525506d7cc30 192.168.100.154/repo/mytest:v3.0 "/bin/sh -c 'java -j... " minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp | 10mytest |
|---|---|
查看网页
http://192.168.100.155:8080/test
