什么是 Registry ? Registry 的安装
官方的 Docker Hub
是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry
,它可以用来存储和管理自己的镜像。
安装
cd /usr/local/docker/registry
vi docker-compose.yml
配置docker-compose.yml
version: '3.1'
services:
registry:
image: registry
restart: always
container_name: registry
ports:
- 5000:5000
volumes:
- /usr/local/docker/registry/data:/var/lib/registry
测试
启动成功后需要测试服务端是否能够正常提供服务
ip:port/v2/
访问返回空 json
Registry 客户端配置和使用
配置/etc/docker/daemon.json
,追加如下节点
{..."insecure-registries": ["ip:port"]}
重启服务
systemctl daemon-reload
systemctl restart docker
使用方法
## 拉取一个镜像
docker pull tomcat
## 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
docker tag tomcat 192.168.0.108:5000/tomcat
## 提交镜像到仓库
docker push 192.168.0.108:5000/tomcat
Registry WebUI
私服安装成功后就可以使用 Docker
命令行工具对 registry
做各种操作了。然而不太方便的地方是不能直观的查看 registry
中的资源情况。如果可以使用 UI
工具管理镜像就更好了。
修改docker-compose.yml
frontend:
image: konradkleine/docker-registry-frontend:v2
ports:
- 8082:80
volumes:
- ./certs/frontend.crt:/etc/apache2/server.crt:ro
- ./certs/frontend.key:/etc/apache2/server.key:ro
environment:
- ENV_DOCKER_REGISTRY_HOST=192.168.0.108
- ENV_DOCKER_REGISTRY_PORT=5000
一次构建,到处运行
1 上传代码
在GitLab
上传代码,创建一个工程获取到ssh
地址
git clone ssh://git@192.168.0.108:2222/laoshiren/myshop.git
将代码全部复制到 myshop
中。
git add .
git commit -m "init commit"
git push
2 构建 Docker 镜像准备
添加 maven
的环境变量
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH:$MAVEN_HOME/bin
安装java
,maven
的运行需要依赖java
,我安装的是jdk-u152-linux-x64.tar.gz
export JAVA_HOME=/usr/local/jdk1.8.0_152
export JRE_HOME=/usr/local/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
所以最后的/etc/profile
的样子应该是
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export JAVA_HOME=/usr/local/jdk1.8.0_152
export JRE_HOME=/usr/local/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH:$MAVEN_HOME/bin
source /etc/profile
执行java -version
和 mvn -v
应该有对应的版本号。
3 构建镜像
给target
文件打 tar
包
cd /usr/local/docker
mkdir image
## 打包
cd /usr/local/docker/myshop
cd my-shop-web/target/my-shop-web-1.0.0-SNAPSHOT/
tar -zcvf myshop.tar.gz .
mv myshop.tar.gz ../../../image
编写Dockerfile
vi Dockerfile
使用 Dockerfile
构建镜像
FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *
ADD myshop.tar.gz /usr/local/tomcat/webapps/ROOT
RUN rm -fr myshop.tar.gz
WORKDIR /usr/local/tomcat
docker build -t 192.168.0.108:5000/myshop .
访问http://192.168.0.108:5000/v2/myshop/tags/list
可以查看是否存在这个镜像
换一台装了Docker
的电脑
创建docker-compose.yml
vi docker-compose.yml
version: '3.1'
services:
myshop:
restart: always
image: 192.168.0.108:5000/myshop
container_name: myshop
ports:
- 80:8080
保存后运行
docker-compose up -d
能下载基本就没什么问题。访问服务
总结
5.4节是综合1-5章内容的操作
主要是创建工程到部署的一系列操作,但是操作还是太多了,又是上传,又是干嘛干嘛的,太繁琐了。能不能再简单一点?GitLab-Runner
就帮我们完成了这些操作。