前言
这两天对Docker进行从零部署,就是为了能够玩一玩devOps,现在将部署的过程既遇到的一些问题进行记录。
PS: 纯为自己兴趣而学,在公司会被认为不务正业。
服务器安装Docker
服务器安装docker
1 2
|
yum -y install docker-io service docker start
|
我这边的服务器是Centos系统,执行以上命令就会把docker安装并启动,至于测试docker是否安装成功,可以参考链接里提供的方法,运行hello-world镜像测试即可。
Docker跟随服务器自启动
1
|
systemctl enable docker
|
Docker私服搭建
1
|
docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry
|
这个搭建方式,其实就是通过docker私服的镜像进行搭建的,端口映射为5000。
但是这个搭建好,是有一个问题的,想要给这个docker私服推送镜像的话,默认是需要https方式的,可在内网环境中,一方面配置ssl不方便,另外内网也不需要用到http方式的。所以需要做如下改造
1
|
vi /etc/sysconfig/docker
|
把如下内容加入配置参数中
1
|
OPTIONS='--insecure-registry 192.191.0.86:5000'
|
最终这个文件是下面这个样子的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
# /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.191.0.86:5000' if [ -z "${DOCKER_CERT_PATH}" ]; then DOCKER_CERT_PATH=/etc/docker fi
# Do not add registries in this file anymore. Use /etc/containers/registries.conf # from the atomic-registries package. #
# On an SELinux system, if you remove the --selinux-enabled option, you # also need to turn on the docker_transition_unconfined boolean. # setsebool -P docker_transition_unconfined 1
# Location used for temporary files, such as those created by # docker load and build operations. Default is /var/lib/docker/tmp # Can be overriden by setting the following environment variable. # DOCKER_TMPDIR=/var/tmp
# Controls the /etc/cron.daily/docker-logrotate cron job status. # To disable, uncomment the line below. # LOGROTATE=false
# docker-latest daemon can be used by starting the docker-latest unitfile. # To use docker-latest client, uncomment below lines #DOCKERBINARY=/usr/bin/docker-latest #DOCKERDBINARY=/usr/bin/dockerd-latest #DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest #DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest
|
gitlab-ci.yml文件变更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
image: maven:3-jdk-8
variables: # docker仓库 DOCKER_REPOSITORY_URL: 192.191.0.86:5000
cache: paths: - $CI_PROJECT_DIR/hsjry-credit-deploy/target/*.war
stages: - maven_build - docker_build
# maven打包 maven打包: stage: maven_build script: - "find -name \"application-dev.xml\" | sed 's/-dev.xml$//g' | xargs -i -t mv {}-dev.xml {}.xml" - "find -name \"credit-dev.properties\" | sed 's/-dev.properties$//g' | xargs -i -t mv {}-dev.properties {}.properties" - "mvn clean install -U -Dmaven.test.skip=true" only: - dev - master - merge-requests - docker
# 通过Dockerfile安装war包 docker打包: image: docker stage: docker_build script: - "docker build -t $DOCKER_REPOSITORY_URL/jetty-$CI_PROJECT_NAME-$CI_COMMIT_REF_SLUG:latest ." - "docker push $DOCKER_REPOSITORY_URL/jetty-$CI_PROJECT_NAME-$CI_COMMIT_REF_SLUG:latest"
|
这个配置有一个前置要求,需要修改gitlab runner相关的配置
1
|
vi /etc/gitlab-runner/config.toml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
concurrent = 1 check_interval = 0
[[runners]] name = "CommonRunner" url = "http://gitlab.hyxfjr.com/ci" token = "401d25b2b0e03f3d20569cccf31f8e" executor = "docker" [runners.docker] tls_verify = false image = "maven:3-jdk-8" privileged = false disable_cache = false volumes = ["/cache","/home/gitlab-runner/.m2:/root/.m2","/var/run/docker.sock:/var/run/docker.sock"] shm_size = 0 extra_hosts = ["gitlab.hyxfjr.com:192.168.0.12"] [runners.cache]
|
在对应volumes中,需要增加一个"/var/run/docker.sock:/var/run/docker.sock",这个是为了能在docker镜像中还是能够使用docker命令
下面介绍一下这个gitlab-ci.yml文件如此配置的原因
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
# 基础docker镜像使用maven:3-jdk-8,该镜像已经集成了maven和jdk8 image: maven:3-jdk-8
# 自定义的参数,定义了docker仓库的地址 variables: # docker仓库 DOCKER_REPOSITORY_URL: 192.191.0.86:5000
# 各个job之间可以用来传输的信息,主要用来传输war包,用于打包docker镜像的 cache: paths: - $CI_PROJECT_DIR/hsjry-credit-deploy/target/*.war
# 定义这个CI都有哪些job,这里只有2个job,一个用于maven编译,一个用于打包docker奖项 stages: - maven_build - docker_build
# maven打包 maven打包: # 定义这个job的id stage: maven_build # 这个job要执行的命令 script: # 前两个命令,是用于不同环境,定义不同的配置,类似于springboot的用法。可以看下gitlab仓库,在deploy的src/main/resources下,定义了credit-dev.properties\credit-test.properties\credit-master.properties,下面的命令,就是把credit-dev.properties改名成credit.properties的 - "find -name \"application-dev.xml\" | sed 's/-dev.xml$//g' | xargs -i -t mv {}-dev.xml {}.xml" - "find -name \"credit-dev.properties\" | sed 's/-dev.properties$//g' | xargs -i -t mv {}-dev.properties {}.properties" # maven打包命令 - "mvn clean install -U -Dmaven.test.skip=true" # 定义这个job在哪些情况下才进行打包 only: - dev - master - merge-requests - docker
# 通过Dockerfile安装war包 docker打包: # 这个job需要依赖docker环境,可仅配置一个docker的image是不够的,还需要配置上面一步所说的内容 image: docker stage: docker_build script: # docker打包命令 - "docker build -t $DOCKER_REPOSITORY_URL/jetty-$CI_PROJECT_NAME-$CI_COMMIT_REF_SLUG:latest ." # docker发布到私服命令 - "docker push $DOCKER_REPOSITORY_URL/jetty-$CI_PROJECT_NAME-$CI_COMMIT_REF_SLUG:latest"
|
Dockerfile文件配置
上一步在做docker build操作时,其实就是执行这个Dockerfile文件。这个文件在工程根目录下