Hero Image
GITLAB CI自动部署容器应用

容器 Docker 越来越受开发者和运维人员的喜爱,更是作为实践 DevOps 的一个中要工具。同时 Gitlab 提供了免费的代码管理服务,其 gitlab-ci 更是提供了强大的自动化 CI/CD 流程功能。 本文以一个静态站点的示例来说明如何使用 gitlab-ci 和 docker 进行容器镜像的构建,以及如何将镜像自动化部署到目标服务器上。 编写Dockerfile 首先在代码库中增加 Dockerfile ,用于描述如何构建应用的容器镜像。以下是一个基于 Hugo 的静态站点应用的示例: FROM mengzyou/hugo:latest as builder COPY . /app/ RUN hugo FROM nginx:1.16-alpine RUN set -x \ && rm -f /etc/nginx/conf.d/default.conf \ && mkdir -p /usr/share/nginx/html COPY --from=builder /app/nginx-default.conf /etc/nginx/conf.d/default.conf COPY --from=builder /app/public/ /usr/share/nginx/html 其实非常简单,使用了多阶段构建,以 mengzyou/hugo 作为构建镜像,然后将生成的静态文件拷贝到 nginx 镜像中,最终生成静态站点的镜像。 配置Gitlab-ci构建容器镜像 该阶段,在项目根目录添加 .gitlab-ci.yml 文件,示例内容如下: variables: DOCKER_DRIVER: overlay2 CI_REGISTRY_IMAGE: ${CI_REGISTRY}/mengzyou/app before_script: - echo $CI_JOB_NAME - echo $CI_PROJECT_DIR stages: - build build:docker: stage: build variables: DOCKER_HOST: tcp://docker:2375 image: docker:stable services: - docker:dind script: - echo "Building image - $CI_REGISTRY_IMAGE:latest" - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY - docker image build --force-rm --no-cache -t $CI_REGISTRY_IMAGE:latest .

Hero Image
DOCKER构建MariaDB

现在 Docker 可所谓是最火的容器技术了,至于什么是 Docker,请到其官方网站或者维基百科查看。 这里想通过一个示例来看看怎么通过 Dockerfile 来构建一个 Docker 镜像。 构建MariaDB容器镜像 Docker 提供了两种方法来生产应用镜像: 通过启动一个基础容器(比如基于某种 Linux 发行版的镜像的容器),然后在容器里执行各种命令来安装相应的软件包,进行配置后,再通过 docker commit 命令把已经更新的容器生产相应的镜像。 通过编写一个 Dockerfile ,然后使用 docker build 命令来构建相应的镜像。 相比第一种方式,通过 Dockerfile 的方式,可以更好的维护镜像,将镜像的 Dockerfile 提交到版本库管理。还可以在 Docker Hub 里创建镜像的自动构建。 下面让我们通过如何编写 Dockerfile 来构建一个 mariadb 的镜像: 首先创建一个目录,如 docker-mariadb ,然后编写一个名为 Dockerfile 的文件,内容如下: FROM opensuse:13.2 MAINTAINER Mengz You <you.mengz@yahoo.com> ENV MARIADB_MAJOR 10.0 ENV MARIADB_VERSION 10.0.17 ENV MYSQL_ROOT_PASSWORD mysecretpassword ENV MYSQL_DATADIR /var/lib/mysql RUN zypper ar -f -r http://download.opensuse.org/repositories/server:/database/openSUSE_13.2/server:database.repo \ && zypper -n --gpg-auto-import-keys ref RUN zypper -n in --no-recommends mariadb-$MARIADB_VERSION net-tools \ && zypper clean --all RUN mkdir -p /var/lib/mysql \ && mkdir -p /var/log/mysql \ && chown mysql:mysql /var/log/mysql VOLUME /var/lib/mysql COPY docker-entrypoint.