windows
下载
启用Hyper-V
以管理员身份打开 PowerShell 控制台,运行以下命令
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
通过控制面板“设置”启用
右键单击 Windows 按钮并选择“应用和功能”。
选择相关设置下右侧的“程序和功能”。
选择“打开或关闭 Windows 功能”。
选择“Hyper-V”,然后单击“确定”。
找不到 Hyper-V
创建文件 Hyper-V.cmd,点击运行
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
安装 docker desktop
下载完成之后,双击打开直接下一步
# 可在设置里面更新源 https://9cpn8tt6.mirror.aliyuncs.com
#设置 -- Docker Engine --
"registry-mirrors": [
"https://9cpn8tt6.mirror.aliyuncs.com"
]
安装 WSL 更新包
打开 docker desktop 出现 WSL 2 installation is incomplete,需要更新WSL
下载
注意
# -v //d/juan/gitlab/etc:/etc/gitlab # 在 windows 中映射数据, //d 代表盘符 /juan 文件夹
# -v /root/gitlab/etc:/etc/gitlab # 在 linux 中映射数据
参考链接
Ubuntu
启用 SSH
# Ubuntu 上启用 SSH,并允许远程连接
sudo apt update # 更新
sudo apt install openssh-server # 安装
sudo systemctl status ssh # ssh 状态
sudo ufw allow ssh # 开放ssh端口
sudo apt-get install vim-gtk # 安装vim
sudo vim /etc/ssh/sshd_config # 修改文件允许远程访问
# 找到PermitRootLogin without-password 修改为PermitRootLogin yes # 允许账号密码远程连接
service ssh restart # 重启ssh
sudo ufw enable # 开启防火墙
sudo ufw reload # 重启防火墙
ip a # 查看当前ip
sudo ufw status # 查看开放端口
sudo ufw allow 9123 # 开放端口
sudo ufw allow 9123/tcp # 开放端口
测试是否通过
# 可使用工具根据 ip:22 输入账号密码,进行连接
安装 docker
sudo apt-get remove docker docker-engine docker.io containerd runc # 卸载旧版本
# 更新
sudo apt-get update
# Docker在Ubuntu上依赖一些软件包
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加软件源的 GPG 密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 添加Docker软件源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 安装docker
apt-get install docker-ce docker-ce-cli containerd.io
# 配置用户组(可选)避免每次使用Docker时都需要使用sudo
sudo usermod -aG docker $USER
# 安装工具
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 切换镜像源
# /etc/docker 下创建文件 daemon.json
# 写入 , 可写入多个源
{
"registry-mirrors": [
"https://9cpn8tt6.mirror.aliyuncs.com"
]
}
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info
# 结果中显示了我们设置的镜像服务器地址,则说明设置已经生效,返回的信息类似下面这样:
#Registry Mirrors:
# https://9cpn8tt6.mirror.aliyuncs.com
测试是否通过
docker info # 查看版本
docker 安装镜像
Mysql
docker container run -d -p 3305:3306 -v /root/mysql/datadir:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/var/log/mysql --restart always --name mysql57 --env MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# -d: 后台运行
# -p 将容器的3306端口映射为本机的3305
# --restart always 容器自启动
# --name 为容器指定一个名称
# --env 向容器进程传入一个环境变量MYSQL_ROOT_PASSWORD,该变量会被用作 MySQL 的根密码
# --env 向容器进程传入一个环境变量MYSQL_DATABASE,容器里面的 MySQL 会根据该变量创建一个同名数据库
# mysql:5.7 拉取镜像
# 可挂载数据卷保存数据,若主机内目录不存在将会自动创建
# 主机数据库目录/root/mysql/datadir 容器数据库目录/var/lib/mysql
# 主机数据库配置文件/root/mysql/conf 容器数据库配置文件/etc/mysql/conf.d
# 主机数据库日志目录/root/mysql/logs 容器数据库日志目录/var/log/mysql
# 进入容器实例
docker exec -it mysql57 /bin/bash
# 登录MySQL
mysql -uroot -p 密码
#设置mysql允许访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
测试是否通过
# 可使用可视化数据库工具根据 ip:3305 ,账号 root , 密码 123456 ,进行连接
Nginx
docker pull nginx
# 启动一个临时容器
docker run -d --name nginx nginx
# 将nginx 配置复制到宿主机上, 进入root/nginx/conf/ (新建)
cd root/nginx/conf/
docker cp nginx:/etc/nginx ./ # 将nginx容器的文件移动到当前目录
# 新建 root/nginx/html/
# 新建 root/nginx/log/
docker stop nginx # 停止容器
docker rm nginx # 删除容器
docker run -d -p 80:80 -p 443:443 --name nginx --restart=always -e TZ="Asia/Shanghai" -v /root/nginx/html:/usr/share/nginx/html:ro -v /root/nginx/conf/nginx:/etc/nginx/:ro -v /root/nginx/log:/var/log/nginx nginx
# :ro:表示容器内部的nginx文件是只读
# -e TZ="Asia/Shanghai":表示把时区设置为中国的时区
<!--创建 index.html,吧这个文件放在 /root/nginx/html 下面,访问 ip:80 端口-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试</title>
</head>
<body>
<div style="color: red;">测试11111</div>
</body>
</html>
测试是否通过
# 可使用浏览器根据 ip:80 ,查看是否显示测试界面
Java
docker pull java:8
方式一
# 将jar打包成镜像
# 例: 将jar包上传到 /root/java8/jars/demo.jar
cd /root/java8/jars # 进入目录
touch Dockerfile # 创建docker打包镜像文件
vim Dockerfile # 编写
FROM java:8 # 拉取jdk8作为基础镜像
MAINTAINER sun # 作者
ADD demo.jar demo.jar # 添加jar到镜像并命名为demo.jar
EXPOSE 8080 # 镜像启动后暴露的端口
ENTRYPOINT ["java","-jar","demo.jar"] # jar运行命令,参数使用逗号隔开
docker build -t demo . # 注意 最后的点,demo 镜像名称
docker images ls # 查看镜像,应有demo
docker run -d --restart always --name demo -p 8080:8080 demo
方式二
# 创建容器运行jar /usr/app.jar 容器jar文件 /root/java8/jars/demo.jar 宿主机jar文件
docker run -d --name demo -p 8080:8080 -v /root/java8/jars/demo.jar:/usr/app.jar java:8 java -jar -Xms256m -Xmx256m /usr/app.jar
方式三
测试是否通过
# 可使用浏览器根据 ip:端口,查看
GitLab
# gitlab-ce为稳定版本,版本默认最新latest版本
docker pull gitlab/gitlab-ce
docker run -i -d -p 3000:80 -p 9922:22 -v /root/gitlab/etc:/etc/gitlab -v /root/gitlab/log:/var/log/gitlab -v /root/gitlab/opt:/var/opt/gitlab --restart always --privileged=true -u root --name gitlab gitlab/gitlab-ce
# -i 以交互模式运行容器,通常与 -t 同时使用命令解释:
#-d 后台运行容器,并返回容器ID
#-p 3000:80 将容器内80端口映射至宿主机3000端口,这是访问gitlab的端口
#-p 9922:22 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口
#-v ./gitlab/etc:/etc/gitlab 将容器/etc/gitlab目录挂载到宿主机./gitlab/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样
#--restart always 容器自启动
#--privileged=true -u root 让容器获取宿主机root权限
#--name gitlab 设置容器名称为gitlab
#gitlab/gitlab-ce 镜像的名称,这里也可以写镜像ID
# 进入容器实例 可省略此步,直接打开3000端口进行操作
docker exec -it gitlab /bin/bash
# 修改 gitlab.rb
vi /etc/gitlab/gitlab.rb
# gitlab访问地址
external_url 'http://127.0.0.1'
# ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '127.0.0.1'
# ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
# 让配置生效
gitlab-ctl reconfigure
# 修改 gitlab.yml
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab:
host: 127.0.0.1
port: 3000 # 这里改为3000
https: false
# 重启
gitlab-ctl restart
# root 默认密码
# 这个文件将在首次执行reconfigure后24小时自动删除
vi /etc/gitlab/initial_root_password
测试是否通过
# 可使用浏览器根据 ip:3000,查看
# 502 可能是服务正在启动稍等一会
# 使用 root , 默认密码登录之后,需要修改密码;默认密码只有24h时效;可配置是否允许注册
Jenkins
docker pull jenkins/jenkins:2.426.2
docker run -d -p 8091:8080 -p 50000:50000 --name jenkins --privileged=true -u root --restart=always -v //d/juan/jenkins:/var/jenkins_home -v //d/juan/maven:/usr/local/maven -v //d/juan/nodejs:/usr/local/nodejs jenkins/jenkins:2.426.2
# -d: 后台运行
# -p 将容器的8080端口映射为本机的8091
# --name 为容器指定一个名称
# --privileged=true -u root root权限
# --restart always 让容器获取宿主机root权限
# -v //d/juan/jenkins:/var/jenkins_home # 映射jenkins目录为 //d/juan/jenkins
# jenkins/jenkins:2.426.2 镜像
# 以下可省略
# -v //d/juan/nginx/html:/usr/local/nginx # 如需要自动化部署html项目,推荐将nginx的html目录映射
# -v //d/juan/jars:/usr/local/jars # 如需要自动化部署maven项目,推荐将宿主机存放jar包的目录映射
# -v //d/juan/maven:/usr/local/maven # 映射maven目录为 //d/juan/maven
# -v //d/juan/nodejs:/usr/local/nodejs # 映射nodejs目录为 //d/juan/nodejs
# 如果jenkins未安装git 或 java(jdk)
# 1. 直接全局,得到安装目录修改jenkins的配置(全局安装应不需要修改)
# 2. 或者如nodejs类似,映射到某个文件夹进行局部挂载,得到安装目录修改jenkins的配置 (手动安装如下)
<!--修改镜像源 //d/juan/jenkins/hudson.model.UpdateCenter.xml-->
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
// 此步骤可忽略
// windows
// 修改镜像源 //d/juan/jenkins/updates/default.json
// goole 改成 baidu
// http://updates.jenkins.io/download 改成 https://mirrors.tuna.tsinghua.edu.cn/jenkins
// linux
// sudo sed -i 's#updates.jenkins.io/download#mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sudo sed -i 's#www.google.com#www.baidu.com#g' default.json
# 默认密码
# //d/juan/jenkins/secrets/initialAdminPassword
# 首页 -- Manage Jenkins -- Plugins (插件管理)
# Available plugins (下载)
# NodeJS
# Maven Integration
# 安装环境这里测试为手动安装
# 例:nodejs (下列步骤完成之后可能出现node -v没问题,npm -v报错,我的解决方法是换个版本)
# 下载: https://nodejs.org/dist/v14.14.0/node-v14.14.0-linux-x64.tar.gz
# 放在映射目录下 //d/juan/nodejs
# docker exec -it jenkins /bin/bash
# 进入 /usr/local/nodejs
# 解压 tar -xzvf xxx.tar.gz
# 进入 xxx/bin
# 测试是否可用 ./node -v
# 添加全局 ln -s /usr/local/nodejs/xxx/bin/node /usr/bin/node
# 添加全局 ln -s /usr/local/nodejs/xxx/bin/npm /usr/bin/npm
# node -v
# npm -v
# 例:maven
# 下载: https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz
# 放在映射目录下 //d/juan/maven
# docker exec -it jenkins /bin/bash
# 进入 /usr/local/maven
# 解压 tar -xzvf xxx.tar.gz
# 进入 xxx/bin
# 测试是否可用 ./mvn -v
# 添加全局 ln -s /usr/local/maven/xxx/bin/mvn /usr/bin/mvn
# mvn -v
<!--可配置maven仓库地址和仓库源-->
<!--/usr/local/maven/xxx/conf/settings.xml-->
<!--设置本地仓库路径-->
<localRepository>/usr/local/maven/xxx/localRepository</localRepository>
<!-- 在mirrors标签里添加mirror标签,指定阿里云私服下载依赖 -->
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
# 首页 -- Manage Jenkins -- Tools
# Maven 安装
# Name : maven
# MAVEN_HOME : /usr/local/maven/xxx
# NodeJS 安装
# Name : nodejs
# MAVEN_HOME : /usr/local/nodejs/xxx/bin
测试是否通过
# 可使用浏览器根据 ip:8091,查看
# 第一次需要输入默认密码,如上
# 点击安装插件,完成之后会有输入账号密码界面
# 可如上配置 nodejs / maven 环境
# 首页
#- 新建Item
#- newtask(自定义名称)
#- Freestyle project
#- 确定
#- Build Steps
#- 执行 shell
java --version
git --version
node -v # 没配置node 可去掉
npm -v # 没配置node 可去掉
mvn -v # 没配置maven可去掉
#- 应用 / 保存
#- 立即构建
#- 可在构建历史中查看控制台输出
GitLab + Jenkins 自动化部署
nodejs环境
Jenkins
# 首页
#- 新建Item
#- nodejstask(自定义名称)
#- Freestyle project
#- 确定
# Configure
# 源码管理
# Git
# Repository URL 项目的http地址 (测试使用http)
# Credentials 凭证 (添加)
# 用户名 密码
# 指定分支 */main
# 构建触发器
# ✔ 触发远程构建 (例如,使用脚本)
# 输入值例: xxxxxxxxxx # http://Jenkins用户名:API token @JenkinsIP+端口/job/项目名称/build?token=xxxxxxxxxx
# ✔ GitHub hook trigger for GITScm polling
# Build Steps
# 执行 shell
node -v # 查看node版本
npm -v # 查看npm版本
rm -rf node_modules # 删除上次下载的依赖
rm -rf dist # 删除上次打包的目录
rm -rf nodetask # 删除上次打包重命名的目录
rm -rf /usr/local/nginx/nodetask # /usr/local/nginx这个路径是映射宿主机nginx/html目录的文件夹,nodetask是自定义文件名称
npm install # 下载依赖
npm run build # 打包
mv dist nodetask # 重命名
mv nodetask /usr/local/nginx # 移动
# 首页 -- 系统管理 -- 管理用户 -- root(某个用户) -- 设置 -- API Token -- 生成 # 生成的API Token 在gitlab中使用
# 应用
GitLab
# 新建一个 ceshi 项目
# 在管理--设置--网络--外发请求
# ✔ 允许Webhook和服务对本地网络的请求 保存
# 在项目设置--Webhooks
# 输入 http://root:112063690f0c3f54fb5ff61f3fe54332d1@192.168.1.100:8091/job/nodejstask/build?token=xxxxxxxxxx
# Secret 令牌 : xxxxxxxxxx
# 保存 测试--push events
maven 环境
Jenkins
# 首页
#- 新建Item
#- maventask(自定义名称)
#- Maven
#- 确定
# Configure
# 源码管理
# Git
# Repository URL 项目的http地址 (测试使用http)
# Credentials 凭证 (添加)
# 用户名 密码
# 指定分支 */main
# 构建触发器
# ✔ 触发远程构建 (例如,使用脚本)
# 输入值例: xxxxxxxxxx # http://Jenkins用户名:API token @JenkinsIP+端口/job/项目名称/build?token=xxxxxxxxxx
# ✔ GitHub hook trigger for GITScm polling
# Build
# Root POM
# pom.xml
# Goals and options
# clean package -U -Dmaven.test.skip=true
# Post Steps
# Run only if build succeeds (构建成功触发)
# Add post-build step
# 执行 shell
ls # 查看文件目录
rm -rf xxx.jar # 删除上次遗留
rm -rf demo.jar # 删除上次遗留
rm -rf /usr/local/jars/demo.jar # 删除上次遗留
cp /target/xxx.jar ./ # 将jar拷贝到当前目录
mv xxx.jar demo.jar # 重命名
mv demo.jar /usr/local/jars # 移动
# 后续可运行宿主机文件让jar运行
GitLab
# 配置同上
参考链接
Docker 命令
systemctl start docker # 运行docker
systemctl stop docker # 停止docker
systemctl status docker # 查看docker状态
systemctl restart docker # 重启docker
docker info #docker信息
docker version #docker版本
docker image ls #所有镜像
docker image pull #下载镜像
docker image rm #删除镜像
docker run 镜像id #新建容器并启动
docker ps #列出所有运行的容器 docker container list
docker rm 容器id #删除指定容器
docker rm -f $(docker ps -aq) #删除所有的容器
#启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
#退出容器
exit #容器直接退出
ctrl +P +Q #容器不停止退出
docker exec -it 容器id /bin/bash # 进入容器