- 为什么学习Docker:
- 环境不一致
- 隔离性
- 弹性伸缩
- 安装软件的成本多高
- Docker的仓库,镜像,容器
- 仓库是存放镜像的
- 镜像是用户封装的运行环境,软件等
- 运行起来的镜像就是容器
- 配置Docker仓库
- http://
- 用公司内部的私服
- 修改/etc/docker/daemon.json
- 将笔记中的json复制到daemon.json文件中,并且将ip:port修改为真正的ip和端口
- 重启Docker服务
- Docker镜像操作
- 拉取镜像:docker pull 镜像地址
- 查看镜像:docker images
- 删除镜像:docker rmi 镜像id / 镜像名:tag
- 拉取镜像到本地:docker save -o 路径/文件名 镜像id
- 加载镜像到Docker:docker load -i 文件
- 修改镜像名称:docker tag 镜像id 镜像名:tag
- Docker容器操作
- 启动容器:docker run -d -p 宿主机端口:容器端口 --name 容器名 镜像id
- 查看容器日志:docker logs [-f] 容器名称 / 容器Id
- 进入容器内部:docker exec -it 容器名称 / 容器id bash/sh
- 查看正在运行的容器:docker ps [-q -a]
- 启动/停止/重启/删除容器:docker start/stop/restart/rm 容器名称 / 容器Id / $(docker ps -qa)
- Docker数据卷
- 让宿主机的一个目录映射到容器内部的一个目录,数据会相互同步
- docker run -v 数据卷名称:容器内部目录
- docker run -v 绝对路径:容器内部目录
- Docker的自定义镜像
- 创建Dockerfile文件
- FROM 基础镜像的路径
- COPY 文件 镜像的目录
- WORKDIR 工作目录
- RUN 执行的命令
- CMD 执行的命令
- docker build -t 新镜像名称:tag Dockerfile所在路径
- docker-compose
- 安装docker-compose:
- 将docker-compose文件复制到/usr/bin
- 将docker-compose赋予可执行权限
- 创建docker-compose.yml
- yml文件是通过key: value设置属性信息,不要使用制表符,使用空格
version: "3.1"
services:
mysql:
restart: always
image: 镜像地址
container_name: 容器名称
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- 相对路径:容器路径
command:
--lower_case_table_names=1
- 通过docker-compose启动容器
- 在docker-compose.yml所在目录执行以下命令
- 根据yml文件启动容器:docker-compose up -d
- 查看启动容器的日志:docker-compose logs -f
- 停止并删除容器:docker-compose down
- 启动/停止/重启:docker-compose start/stop/restart
- docker-compose整合Dockerfile构建自定义镜像并启动
- docker-compose.yml
version: “3.1”
services:
mysql:
build:
context: Dockerfile所在目录
dockerfile: Dockerfile文件名称
image: 新镜像名称:tag
mysql1:
build: Dockerfile所在目录
image: 新镜像名称:tag
- 构建并启动镜像:docker-compose up -d --build
一.CI(持续集成)
1.1CI介绍和基本安装
- 在公司开发项目时,如果完成了N个功能之后,再去类生产环境中去测试时,能会产生大量的问题,并且代码可能会偏离主干。
- 可以使用CI持久集成,每完成一个小功能,就立即将程序打包,部署到类生产环境中,并测试功能,帮助咱们快速定位问题,防止功能代码偏离主干。
- CI:将工作区的代码托送到远程的gitlab仓库后,gitlab-runner工具会感知到代码被修改,立即根据代码中的一个文件中的要求,将程序打包部署,并通过docker启动起来。
- 安装gitlab-runner:
- gitlab-runner基础功能,可以和gitlab绑定到一起,再gitlab代码被修改时,会拉取代码
- 可以将拉取到的代码进行打包,需要安装JDK,MAVEN并配置环境变量
- 通过Docker将war包/jar包进行部署运行,需要安装Docker以及docker-compose,并且配置私服仓库
- 为了保证gitlab-runner容器内部,可以调用宿主机的docker运行容器:
- 修改宿主机docker.sock文件的拥有者:chown root:root /var/run/docker.sock
- 重新启动并构建gitlab-runner容器:docker-compose up -d --build
- 修改容器内部用户信息:docker exec -it gitlab-runner usermod -aG root gitlab-runner
1.2Gitlab和Gitlab-Runner绑定
通过gitlab-runner执行绑定的命令:docker exec -it gitlab-runner gitlab-runner register
通过Gitlab创建仓库,并且获取到gitlab信息
通过Gitlab查看到当前绑定的信息
每次提交,都保证打包并发布代码
1.3测试CI的基础功能
- 在IDEA中创建Maven工程。
- 添加.gitlab-ci.yml:
stages:
- test
test:
stage: test
script:
- echo xxxxxx
- 将代码推送到Gitlab仓库中
- 在Gitlab中查看CI执行的脚本命令
1.4测试完整CI功能
- 完整的CI就是将项目提交到Git仓库后,由CI服务器对项目进行打包,并且将war包部署到tomcat服务中
- 在项目中创建Dockerfile和docker-compose.yml文件(放在同一目录下)
- Dockerfile:
FROM 10.9.12.254:5000/tomcat:8.5.15
COPY target/testci-1.0-SNAPSHOT.war /usr/local/tomcat/webapps
- docker-compose.yml:
version: '3.1'
services:
testci:
build: ./
image: testci:1.0
container_name: testci
ports:
- 8888:8080
- 编写.gitlab-ci.yml文件,保证CI服务器可以正常的将项目打包,并运行
- .gitlab-ci.yml:
stages:
- test
test:
stage: test
script:
- echo this is my first CI! # 测试
- /usr/local/maven/apache-maven-3.6.3/bin/mvn package # 将项目打包
- docker-compose down # 先关闭容器
- docker-compose up -d --build # 重新构建镜像,并启动容器
- docker rmi $(docker images -qf dangling=true) # 删除名字为none的镜像
- 将工程push到Gitlab仓库,可以查看CICD中的流水线操作。
- 在Gitlab-Runner的宿主机上,通过docker ps查看容器是否正在运行。
- 通过浏览器去访问。
二、CD(持续交付,持续部署)
2.1 CD介绍和Jenkins安装
- 代码在经过测试人员的专业测试后,需要经代码打标签,将代码发布到真正的生产环境。
- 可以使用CD服务对将代码部署的生产环境的操作自动化。
- 安装查看今日资料中的教案。
2.2 Jenkins实现免密码登录gitlab
- 进入Jenkins容器内部:docker exec -it jenkins bash
- 生成公钥和私钥:ssh-keygen -t rsa -C “40224242424@”
- 默认,公钥和私钥生成在用户目录下的.ssh隐藏目录下:cd ~
- 将生成的公钥复制给gitlab一份
- 需要在jenkins的容器内部,手动拉取一次仓库内容:git clone git@10.9.63.167:root/testcd.git,并手动输入yes