STEP1 搭建gitlab
$ sudo yum install docker-ce
$ sudo systemctl start docker
搜索Gitlab镜像 并拉取
$ docker search gitlab
$ docker pull beginor/gitlab-ce:11.0.1-ce.0 //选择自己要安装的版本
在服务器本地创建需要映射的文件 etc(配置) data(数据) log(日志 便于后期的维护,然后启动gitlab镜像
mkdir -p /mnt/gitlab/etc
mkdir -p /mnt/gitlab/log
mkdir -p /mnt/gitlab/data
//运行
docker run \
--detach \
--publish 8443:443 \ # 将容器内443端口映射到主机8443,提供https服务
--publish 8088:80 \# 将容器内80端口映射到主机8010,提供http服务
--publish 10022:22 \ # 将容器内22端口映射到主机1002,提供ssh服务
--name gitlab-test \# 指定容器名称
--restart unless-stopped \ # 容器运行中退出时(不是手动退出),自动重启
-v /mnt/gitlab/etc:/etc/gitlab \# 将本地/mnt/gitlab/etc挂载到容器内/etc/gitlab
-v /mnt/gitlab/log:/var/log/gitlab \# 将本地/mnt/gitlab/log挂载到容器内/var/log/gitlab
-v /mnt/gitlab/data:/var/opt/gitlab \# 将本地/mnt/gitlab/data挂载到容器内/var/opt/gitlab
beginor/gitlab-ce:11.0.1-ce.0 # 镜像名称:版本
修改gitlab配置 /mnt/gitlab/etc/gitlab.rb external_url 'http://192.168.200.133' 修改为自己的IP
修改/mnt/gitlab/data/gitlab-rails/etc/gitlab.yml
将这里的host ssh_host修改为宿主机的ip地址
修改之后重启gitlab容器就可以访问了 如果出现502 可能是内存太小
STEP2 搭建mysql
docker pull mysql:5.7
docker run -d -p 3306:3306 --name mysql \-v /mysqldata/mysql/log:/var/log/mysql \-v /mysqldata/mysql/data:/var/lib/mysql \-v /mysqldata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root mysql:5.7
上述命令的含义:
docker run :在docker中启动一个容器实例
-d :该容器在后台运行
-p 3306:3306 :主机端口:容器端口
--name mysql :容器运行后的名称
-v /mnt/mysql/log:/var/log/mysql :将容器/var/log/mysql目录下的数据,备份到主机的/mnt/mysql/log目录下;
-v /mnt/mysql/data:/var/lib/mysql :将容器/var/lib/mysql目录下的数据,备份到主机的/mnt/mysql/data目录下;
-v /mnt/mysql/conf:/etc/mysql :将容器/etc/mysql目录下的数据,备份到主机的mnt/mysql/conf目录下;
-e MYSQL_ROOT_PASSWORD=root :设置当前mysql实例的密码为root;
mysql:5.7 :需要运行的容器名称及版本号
通过此处-v命令备份后,就算当前mysql容器实例被删除,那么再次重启mysql容器后,数据将会自动从主机加载到容器当中
配置文件
1)切换到上述命令配置的主机/mnt/mysql/conf目录下
cd /mysqldata/mysql/conf
2)创建my.cnf
touch my.cnf
3) 使用vim命令对my.cnf文件添加如下内容,在docker中安装的mysql默认字符集是latin1,需要改成utf8
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
4) 重启mysql容器实例,让刚才的配置文件生效
docker restart mysql
5) 查看是否启动成功
docker ps
如果需要实现在运行容器实例时就执行SQL脚本,可以在上述命令的基础之上添加如下内容
1.创建如下目录
mkdir /mysqldata/mysql/init
2.在目录/mysqldata/mysql/init下创建名为init.sql的初始文件,该文件存放数据库需要初始化的内容
init.sql
##创建一个user用户,密码为123456
CREATE USER 'user'@'%' IDENTIFIED BY '123456';
##给user用户赋予数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
##刷新用户
flush privileges;
##创建数据库
create database test;
##建表
CREATE TABLE `userinfo` (
`uid` int(11) NOT NULL AUTO_INCREMENT COMMENT 'uid',
`userid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户id',
`nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称',
`usign` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`uimg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '/pic/userdefaultimg.jpg' COMMENT '用户头像',
PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
##插入数据
INSERT INTO `userinfo` VALUES (1, '123', '11', '111', '/pic/11.jpg');
3.编写启动命令
docker run -d -p 3306:3306 \
--name mysql \
-v /mnt/mysql/log:/var/log/mysql \
-v /mnt/mysql/data:/var/lib/mysql \
-v /mnt/mysql/conf:/etc/mysql \
-v /mnt/mysql/init:/docker-entrypoint-initdb.d/ \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7
STEP3 搭建tomcat8
1.这里用的自己的jdk tomcat 然后dockerfile build镜像 然后把war包放在webapps下面 启动容器
FROM centos
MAINTAINER kdlc
#切换镜像目录,进入/usr目录
WORKDIR /usr/kdlc/
#在/usr/下创建jdk目录,用来存放jdk文件
RUN mkdir jdk
#在/usr/kdlc/下创建tomcat目录,用来存放tomcat
RUN mkdir tomcat
#将宿主机的jdk目录下的文件拷至镜像的/usr/kdlc/jdk目录下
ADD jdk8 /usr/kdlc/jdk/
#将宿主机的tomcat目录下的文件拷至镜像的/usr/kdlc/tomcat 目录下
ADD tomcat8 /usr/kdlc/tomcat/
#设置环境变量
ENV JAVA_HOME=/usr//kdlc/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
#公开端口
EXPOSE 8080
#设置启动命令
ENTRYPOINT ["/usr/kdlc/tomcat/bin/catalina.sh","run"]
docker build -t kdlcsoft:v3 .
docker run
--link mysql:mysql --name=kdlcsoft
-d -p 80:8080 \
--name tomcat8 \
-v /mnt/tomcat/conf:/usr/kdlc/tomcat/conf\
-v /tomcat/webapps:/usr/kdlc/tomcat/webapps\
-v /tomcat/logs:/usr/kdlc/tomcat/logs\
docker logs -f -t --tail 500 tomcat8
如果用jar的方式部署那么就不用tomcat
将代码打包为jar文件kdlcsoft.jar 然后
docker build -t kdlcsoft:v3 .
docker run --link mysql:mysql --name=kdlcsoft -p 80:8090 -di kdlcsoft:v3 //--link后面的mysql映射到mysql容器 这个映射名字就是kdlcsoft包中数据库jdbcproterties中数据库连接地址中的host为mysql
docker logs -f -t --tail 500 kdlcsoft
但是这样会有一个问题那就是每次更换jar包的时候都需要重新build 不合理 所以
更新为挂载目录的方式 只需要替换jar就可以了
dockerfile如下
# Docker image for springboot file run
# VERSION 0.0.1
# Author: toutou
# 基础镜像使用java
FROM java:8
EXPOSE 8301
ENTRYPOINT ["java","-jar","/usr/kdlc/kdlcsoft.jar"]
docker run --link mysql:mysql --name=kdlcsoft -v /mnt/kdlcsoft:/usr/kdlc/
-p 80:8090 -di kdlcsoft:v3
同理 ENTRYPOINT ["java","-jar","/usr/kdlc/kdlcsoft.jar"] 这里也可以用CMD ["sh","-c","/data/hellolearn.sh"]脚本来代替
然后在run挂载对应的目录即可