Jenkins + docker + nginx 自动化构建搭建 (二) --- 常用软件安装

常用镜像安装准备


1. 安装任务列表

应用程序 对应端口映射 (本机:docker容器)
jenkins 8080 : 8080
mysql 3306 : 3306
mongo 27017 : 27017
redis 6379 : 6379
nginx 8765 : 80

2. 在阿里云后台添加以上应用的安全组信息

3. 在ECS服务器上创建创建如下目录

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
cd /home
sudo mkdir docker_home
<!--这个docker_home文件夹用来存放docker安装的所有应用程序的所有文件-->

<!--也就是宿主机上将要映射到容器的宿主机目录 -->

<!--比如下面的jenkins目录 之后jenkins的一些配置文件都将会存储到该目录下-->

|-- docker_home
|-- jenkins
|
|-- mongo
| |-- data
| |-- configdb
| |-- db
|
|-- mysql
| |-- conf
| |-- data
| |-- logs
|
|-- nginx
| |-- config
| |-- conf.d
| |-- default.conf
| |-- nginx.conf
| |-- logs
| |-- ssl
|
|-- redis
| |-- data
|
|-- adminmongo


default.conf nginx.conf两个重要nginx源文件 最好能提前准备好
也可以在docker run 的时候不挂载,
成功启动nginx后,通过
sudo docker cp [containerId]/etc/nginx/nginx.conf /home/docker_home/nginx/config/nginx.conf
这种形式复制nginx镜像中的源文件到本地相应文件夹

再停止和删除nginx容器(必要的操作)
重新docker run 命令挂载

但是考虑到这两个文件一般都是有标准模板可以轻易找到
还是自行准备比较好 避免麻烦

(一) ubuntu下安装docker版jenkins


1. 使用下面的命令拉取jenkins的docker镜像,这里我是用的是lts的长期支持版本,你可以到jenkins官网自由选择其他版本

1
2
sudo docker search jenkins
sudo docker pull jenkins/jenkins:lts

2. 设置宿主机映射目录的所有者和所属的组

1
sudo chown -R 1000:1000 /home/docker_home/jenkins

3. 启动jenkins的docker镜像,并设置相关参数

1
2
3
4
5
6
7
sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -u root \
-v /home/docker_home/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /opt:/opt \
-v /etc/timezone:/etc/timezone jenkins/jenkins:lts
  • ==-d== 表示以后台模式运行

  • ==–name== 为容器定义一个名字(后面可以代替容器id使用)

  • ==-p== 表示映射容器的端口到宿主机的端口

  • ==-u root== 使用root用户运行,避免后面出现的一些执行权限问题

  • ==-v== 表示映射宿主机的目录到容器的目录

  • ==-v /home/jenkins_home:/var/jenkins_home== 映射jenkins_home,将数据存储到宿主机,这样配置就不会随容器丢失

  • ==-v /var/run/docker.sock:/var/run/docker.sock== 与 ==-v /usr/bin/docker:/usr/bin/docker== 把宿主机docker 映射到容器内,可以直接在容器内使用宿主机docker

  • ==-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7== 容器内docker运行需要的库文件

  • ==-v /opt:/opt== 自主安装的一些运行时软件(如java/maven/git…)

  • ==-v /etc/timezone:/etc/timezone== 映射时区文件,保证容器的时区和宿主机相同(官网的jenkins容器时区不是中国的时区)


4. 容器启动后,就可以访问ip:8080看到jenkins首次运行的首页了,然后通过下面命令查看初始密码,填入之后跳转到安装插件的页面,选择第一个就好,会默认安装一些插件

1
sudo cat /home/docker_home/jenkins/secrets/initialAdminPassword

5. 跳转到创建用户和密码的界面,创建好后,jenkins的安装也就到此结束了

(二) ubuntu下安装docker版nginx

1. 使用下面的命令拉取nginx的docker镜像

1
2
sudo docker search nignx
sudo docker pull nginx

2. 启动nignx的docker镜像,并设置相关参数,创建容器


1
2
3
4
5
6
7
docker run --detach --name nginx -p 80:80 -p 443:443 \
-v /home/docker_home/nginx/data:/usr/share/nginx/html \
-v /home/docker_home/nginx/config/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker_home/nginx/config/conf.d:/etc/nginx/conf.d \
-v /home/docker_home/nginx/logs:/var/log/nginx \
-v /home/docker_home/nginx/ssl:/ssl \
-d nginx

3. 使用想要进入交互式终端,使用如下命令


1
sudo docker exec -it nginx /bin/bash

(三) ubuntu下安装docker版mysql


1. 使用下面的命令拉取mysql的docker镜像,我这里安装mysql5.6版本

1
2
sudo docker search mysql
sudo docker pull mysql:5.6

2. 启动mysql的docker镜像,并设置相关参数

1
2
3
cd /home/docker_home/mysql/conf
vi my.cnf
<!--wq!保存-->
1
2
3
4
5
6
sudo docker run -p 3306:3306 --name mysql \
-v /home/docker_home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/docker_home/mysql/logs:/logs \
-v /home/docker_home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=your_password \
-d mysql:5.6

命令说明:

/home/docker_home/mysql/data目录将映射为mysql容器配置的数据文件存放路径

/home/docker_home/mysql/logs目录将映射为mysql容器的日志目录

/home/docker_home/mysql/conf目录里的配置文件将映射为mysql容器的配置文件

  • ==-p 3306:3306==:将容器的 3306 端口映射到主机的 3306 端口

  • ==-v -v /home/docker_home/mysql/conf/my.cnf:/etc/mysql/my.cnf==:将主机的 /home/docker_home/mysql/conf/my.cnf挂载到容器的 /etc/mysql/my.cnf文件

  • ==-v /home/docker_home/mysql/logs==:/logs:将主机/home/docker_home/mysql/logs 目录挂载到容器的 /logs

  • ==-v /home/docker_home/mysql/data:/var/lib/mysql==:将主机/home/docker_home/mysql/data目录挂载到容器的 /var/lib/mysql

  • ==-e MYSQL_ROOT_PASSWORD=123456==:初始化 root 用户的密码

1
2
sudo docker ps
<!--存在mysql的容器 运行正常-->

测试

此时便可以在客户端使用shell或者Navicat等工具进行远程访问

3. 进入容器操作

1
2
3
4
5
6
7
8
sudo docker exec -it mysql env LANG=C.UTF-8 bash
<!--其中 env LANG=C.UTF-8 bash 让docker命令行支持中文-->

cp /usr/my.cnf /etc/mysql/my.cnf

mysql -u root -p 123gogogo

show databases;

4. 退出mysql,退出docker

1
2
3
4
5
6
7
8
<!--修改my.cnf配置文件-->
sudo vi /home/docker_home/mysql/conf/my.cnf
<!--加入-->
[client] default-character-set=utf8
[mysql] default-character-set=utf8
[mysqld] character-set-server=utf8
<!--重启mysql容器-->
docker restart mysql

5. 添加远程登录用户

1
2
3
4

CREATE USER 'roy'@'%' IDENTIFIED WITH mysql_native_password BY '123gogogo!';

GRANT ALL PRIVILEGES ON *.* TO 'roy'@'%';

(四) ubuntu下安装docker版mongodb


1. 使用下面的命令拉取Docker Hub上的mongo镜像

1
2
sudo docker search mongo
sudo docker pull mongo

2. 启动mongo的docker镜像,并设置相关参数

1
docker run --name mongo -p 27017:27017 -v /home/docker_home/mongo/data/configdb:/data/configdb -v /home/docker_home/mongo/data/db:/data/db -d mongo --auth

命令说明:

  • ==-p 27017:27017==:将容器的 27017 端口映射到主机的 27017 端口

  • ==-v /home/docker_home/mongo/data/configdb:/data/configdb==:将宿主机/home/docker_home/mongo/data/configdb目录挂载到容器的/data/configdb

  • ==-v /home/docker_home/mongo/data/db:/data/db==:将宿主机/home/docker_home/mongo/data/db目录挂载到容器的/data/db
1
2
sudo docker ps
<!--存在mongo的容器 运行正常-->

测试

此时便可以在客户端使用shell或者MongoChef等工具进行远程访问

3. 进入容器操作

1
2
3
4
5
6
7
8
9
10
11
sudo docker exec -it mongo mongo admin

db.createUser({ user: "admin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

db.auth("admin", "password");

use test

db.createUser({ user: "usertest", pwd: "passwordtest", roles: [ { role: "readWrite", db: "test" } ] });

db.auth("usertest", "passwordtest");

(五) ubuntu下安装docker版redis


1. 使用下面的命令拉取Docker Hub上的redis镜像

1
2
sudo docker search redis
sudo docker pull redis:3.2

2. 启动redis的docker镜像,并设置相关参数

1
sudo docker run -p 6379:6379 -v /home/docker_home/redis/data:/data  -d redis:3.2 redis-server --appendonly yes

命令说明:

  • ==-p 6379:6379==:将容器的 6379 端口映射到主机的 6379 端口

  • ==-v /home/docker_home/redis/data:/data==:将主机/home/docker_home/mongo/db目录挂载到容器的/data/db

  • ==redis-server==:redis的启动命令

  • ==–appendonly yes==:打开redis持久化配置

1
2
sudo docker ps
<!--存在redis的容器 运行正常-->

测试

此时便可以在客户端使用shell等工具进行远程访问

3. 进入容器操作

1
2
3
4
5
sudo docker rename clever_northcutt redis
有可能容器名称不是'redis',可以通过docker rename 命令进行修改

sudo docker exec -it redis redis-cli
<!--当然使用[CONTAINER ID]也可以-->

(六) ubuntu下安装mongoexpress / adminmongo


mongoexpress

1. 使用下面的命令拉取Docker Hub上的mongoexpress镜像

1
docker pull mongo-express

2. 启动mongoexpress的docker镜像,并设置相关参数

1
2
3
4
5
6
7
8
9
docker run --link mongo:mongo --name mongoexpress -p 8081:8081 -e ME_CONFIG_BASICAUTH_USERNAME="root" -e ME_CONFIG_BASICAUTH_PASSWORD="your_password"  -d  mongo-express

docker run --restart=always --name mongoexpress --link mongo:mongo -d -p 8081:8081 \
-e ME_CONFIG_OPTIONS_EDITORTHEME="3024-night" \
-e ME_CONFIG_BASICAUTH_USERNAME="basic_username" \
-e ME_CONFIG_BASICAUTH_PASSWORD="basic_password" \
-e ME_CONFIG_MONGODB_ADMINUSERNAME="db_username" \
-e ME_CONFIG_MONGODB_ADMINPASSWORD="db_password" \
mongo-express

命令说明:

  • ==–link mongo:mongo9==:与当前机器上的mongo镜像关联 才能连接到当前服务器上的mongodb
1
2
sudo docker ps
<!--存在mongoexpres的容器 运行正常-->

adminmongo

1. 使用下面的命令拉取Docker Hub上的adminmongo镜像

1
docker pull mrvautin/adminmongo

2. 启动adminmongo的docker镜像,并设置相关参数

1
docker run -d -e HOST=0.0.0.0 -e PASSWORD="your_password"  -e LOCALE="zh-cn" -p 1234:1234 -v /home/docker_home/adminmongo/config:/app/user/config  --name="adminmongo" mrvautin/adminmongo
1
2
sudo docker ps
<!--存在mongoexpres的容器 运行正常-->

3. 进入容器操作

1
sudo docker exec -it adminmongo sh

(八) ubuntu下安装Yapi

方法一: 使用开源镜像


1. 获取 Yapi 镜像,版本信息可在 阿里云镜像仓库 查看

1
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi

2. 初始化 Yapi 数据库索引及管理员账号

1
2
3
4
docker run -it --link mongo:mongo --entrypoint npm --workdir /api/vendors registry.cn-hangzhou.aliyuncs.com/anoy/yapi run install-server

<!--自定义配置文件挂载到目录 /api/config.json,官方自定义配置文件-->
<!--https://github.com/YMFE/yapi/blob/master/config_example.json-->

3. 启动 Yapi 服务

1
docker run -d --name yapi  --link mongo:mongo --workdir /api/vendors -p 8082:3000 registry.cn-hangzhou.aliyuncs.com/anoy/yapi server/app.js

4. 使用 Yapi

1
<!--访问 http://ip:8082 登录账号 admin@admin.com,密码 ymfe.org-->

方法二: 自己构建镜像(基于Yapi的GitHub项目


1. 生成一个Yapi项目

1
2
npm install -g yapi-cli --registry https://registry.npm.taobao.org
yapi server

2. 在浏览器打开 http://0.0.0.0:9090 访问。非本地服务器,请将 0.0.0.0 替换成指定的域名或ip, 并按需填写其他信息

1
2
3
4
5
初始化管理员账号成功,账号名:"你填写的账户名",默认密码:"ymfe.org"

部署成功,请切换到部署目录,输入: "node vendors/server/app.js" 指令启动服务器, 然后在浏览器打开 http://127.0.0.1:3000 访问

测试成功 清空yapi数据库

3. 删除无用文件

1
2
3
4
sudo rm -rf .init.lock 
// 这个是用没有初始化过的标识,因为刚才已经初始化过了,所以必须要删除它,否则制作成镜像并且启动时不会再执行初始化

sudo rm -rf log

4. config.json配置

可以看到根目录下的config.json中包含了我们刚才在第2步中填写的一些信息,如果有想修改的,可以进行编辑

5. 编写Dockerfile用于构建镜像 比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 设置基础镜像,如果没有该镜像,会从Docker.io服务器pull镜像
# 指定我们的基础镜像是node,版本是v10.9.0
FROM node:10.9.0
# 在服务器根目录下创建/home/service目录
RUN mkdir -p /home/service
# 相当于 cd 到 /home/service目录
WORKDIR /home/service

# 拷贝所有源代码到工作目录
COPY . /home/service
# 暴露容器端口
EXPOSE 8082
# 启动node应用
CMD node vendors/server/install.js & node vendors/server/app.js

其中node vendors/server/install.js这一句就是执行初始化,它会把config.json的配置全部入库到你在config.json中指定的数据库

6. 构建镜像并上传到你的dockerhub(自己注册一个dockerhub账号)

1
2
3
4
5
6
7
8
9
10
docker build -t [image_name] .

docker tag [image_name] [dockerhub_name]/[image_name]:[tag]
// 因为要上传到dockerhub必须保持[dockerhub_name]/[image_name]:[tag]的形式 所以这里要docker tag 执行一下
// 当然也可以在docker build的时候直接写成这种形式 就不用docker tag了 更省事
// docker tag实际上是将原镜像复制一份 再将复制的这份重命名了

docker login // 终端登陆dockerhub

docker push [dockerhub_name]/[image_name]:[tag] // 提交到dockerhub

7. 使用镜像

1
2
docker pull [dockerhub_name]/[image_name]:[tag]
docker run -d --name [container_name] -p 8082:8082 [dockerhub_name]/[image_name]:[tag]

分享到