1.创建工作目录: /usr/local/docker/runner
2.创建构建目录: /usr/local/docker/runner/environment
3.下载jdk-8u152-linux-x64.tar.gz复制到/usr/local/docker/runner/environment
4.下载apache-maven-3.5.3-bin.tar.gz复制到/usr/local/docker/runner/environment
daemon.json
1.在/usr/local/docker/runner/environment目录下创建daemon.json,用于配置加速器和仓库地址
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{
"registry-mirrors":[
"https://registry.docker-cn.com"
],
"insecure-registries":[
"127.0.0.1:5000"
]
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dockerfile
1.在 /usr/local/docker/runner/environment目录下创建Dockerfile
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FROM gitlab/gitlab-runner
MAINTAINER Lusifer <topsale@vip.qq.com>
# 修改软件源
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \
echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \
echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
apt-get update -y && \
apt-get clean
# 安装 Docker
RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update -y && \
apt-get install -y docker-ce
COPY daemon.json /etc/docker/daemon.json
# 安装 Docker Compose
WORKDIR /usr/local/bin
RUN wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose
RUN chmod +x docker-compose
# 安装 Java
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u152-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u152-linux-x64.tar.gz && \
rm -fr jdk-8u152-linux-x64.tar.gz
# 安装 Maven
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
# RUN wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.5.3-bin.tar.gz
COPY apache-maven-3.5.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.5.3-bin.tar.gz && \
rm -fr apache-maven-3.5.3-bin.tar.gz
# COPY settings.xml /usr/local/maven/apache-maven-3.5.3/conf/settings.xml
# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_152
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
WORKDIR /
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
docker-compose.yml
在 /usr/local/docker/runner 目录下创建 docker-compose.yml
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 表示从 environment 目录下寻找 Dockerfile,即在Docker 里装 Docker
version: '3.1'
services:
gitlab-runner:
build: environment
restart: always
container_name: gitlab-runner
privileged: true
volumes:
- ./config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
构建镜像并启动
docker-compose build
注册 Runner
docker-compose up
docker exec -it gitlab-runner gitlab-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.21/
Please enter the gitlab-ci token for this runner:
kTx_PUnx_hhy63pNJtqM
Please enter the gitlab-ci description for this runner:
[c77b5e39a2a6]:
Please enter the gitlab-ci tags for this runner (comma separated):
Registering runner... succeeded runner=kTx_PUnx
Please enter the executor: docker, shell, ssh, docker-ssh+machine, docker+machine, kubernetes, docker-windows, docker-ssh, parallels, virtualbox:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
docker exec -it gitlab-runner gitlab-runner register
# 交互式配置说明:
# 输入GitLab地址
Please enter the gitlab-ci coordinator URL(e.g. https://gitlab.com/)
http://192.168.32.255/
# 输入GitLab Token
Please enter the gitlab-ci token for this runner:
kTx_PUnx_hhy63pNJtqM
# 输入Runner的说明
Please enter the gitlab-ci description for this runner:
可以不填为空
# 设置Tag,用于指定在构建规定的tag时触发ci,如果不设置,默认每次都会触发ci
Please enter the gitlab-ci tags for this runner (comma separate):
deploy
# 这里选择true,用于代码上传后直接执行
Whether to run utagged builds [true/false]:
true
# 这里选择false,可以直接回车,默认false
Whether to lock Runner to current project [true/false]:
false
# 选择runner执行器,这里选择shell
Please enter the executor: virtualbox,docker+machine,parallels,shell,ssh,docker-ssh+machine,kubernetes,docker,docker-ssh:
shell
在项目工程下编写 文件:
stages:
- install_deps
- test
- build
- deploy_test
- deploy_production
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- node_modules/
- dist/
# 安装依赖
install_deps:
stage: install_deps
only:
- develop
- master
script:
- npm install
# 运行测试用例
test:
stage: test
only:
- develop
- master
script:
- npm run test
# 编译
build:
stage: build
only:
- develop
- master
script:
- npm run clean
- npm run build:client
- npm run build:server
# 部署测试服务器
deploy_test:
stage: deploy_test
only:
- develop
script:
- pm2 delete app || true
- pm2 start app.js --name app
# 部署生产服务器
deploy_production:
stage: deploy_production
only:
- master
script:
- bash scripts/deploy/deploy.sh
提交项目之后,就会执行Runner
FROM openjdk:8-jre
MAINTAINER Chova
# 环境变量
ENV APP_VERSION 1.0.0-SNAPSHOT
# Docker插件,用来检测依赖项,只有依赖项启动才会启动
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/release/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
RUN mkdir /app
COPY myshop-service-user-provider-$APP_VERSION.jar /app/app.jar
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.32.255.131:3306", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]
EXPOSE 8501
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.FROM: 这是引入一个父镜像,在此基础上进行添加只读层.镜像可以理解成由一层层只读层组成,
FORM下面的命令,可以理解就是在已有的只读层,添加只读层.FORM可以有多个,但最上面的一定是FROM命令
2.VOLUME: 配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp.该步骤是可以省略的
默认情况下,容器不使用任何 volume,此时,容器的数据被保存在容器之内,它只在容器的生命周期内存在,会随着容器的被删除而被删除
如果不想在容器删除后,容器的数据也被删除,那么就可以指定持久化目录.它被设计用来保存数据,而不管容器的生命周期.因此,当你删除一个容器时,Docker不会自动地删除一个volume
3.ARG:设置编译镜像时加入的参数,可以省略
4.COPY:只支持将本地文件复制到容器,还有个ADD更强大但复杂点
5.ENTRYPOINT:容器启动时执行的命令
docker rmi $(docker images -q -f dangling=true)
version: '3.1'
services:
myshop-service-user-provider:
image: 192.168.32.255:5000/myshop-service-user-provider:v1.0.0
container_name: myshop-service-user-provider
ports:
- 8501:8501
- 22222:22222
- 20881:20881
# 配置容器连接的网络
networks:
default:
external:
name: dubbo