业务代码容器化记录【Dockerfile】

前端代码的容器化

#如果使用腾讯云服务器,记得打开公网IP的对应端口(服务器-防火墙-添加规则)

1.正常流程= 搞个基础版容器+自己的配置
#拉取image->跑成container->进入container
docker pull node:16.15.0
docker run -itd --name cloud-iot -p 5000:5000 node:16.15.0
docker exec -it cloud-iot bash
> curl -JLO --header "PRIVATE-TOKEN: MSXESp_J15f8--zQBKAa" -JLO http://gitlab.youmuvideo.com/digital-twin/cloud-iot/raw/yangqing/build_yangqing.zip
> unzip ./build_yangqing.zip
> cd build_yangqing/
> npm install serve -g
> serve -l 5000
Ctrl+D 退出容器
docker commit <容器id> <镜像名>:<tag>     ---- 将容器保存成镜像,tag比如说latest
docker save -o <zip包名>.zip <镜像名>:<tag>      ---- 将镜像保存为.zip文件,默认保存在当前目录
==========================
后续修改:
docker exec进入容器
改改改
docker commit 成一个新镜像
docker save -o给业鹏



=============================================================================================||==============
2.Dockerfile流程= build自己的镜像 
#0. tar.gz可行,用7z压缩两次得到   || 【zip也可行】直接unzip
#1. -JLO避免重定向
#2.私有云需要-H
#3.地址为/raw 不是/blob
#4.用file xxx来检查是否是HTML
#结论-
#公有云(直接连):curl -JLO http://gitlab.youmuvideo.com/Frankhhhhh/ImagesDB/raw/master/build_yangqing.tar.gz
#私有云(Personal Access Token): curl --header "PRIVATE-TOKEN: MSXESp_J15f8--zQBKAa" -JLO http://gitlab.youmuvideo.com/digital-twin/cloud-iot/raw/yangqing/build_yangqing.tar.gz
$ docker pull node:16.15.0
$ mkdir -p /opt/docker-images/cloud-iot && cd /opt/docker-images/cloud-iot
$ vim Dockerfile
>	FROM node:16.15.0 #需要实现pull node的镜像
>	MAINTAINER LJH
>	RUN curl -JLO --header "PRIVATE-TOKEN: MSXESp_J15f8--zQBKAa" -JLO http://gitlab.youmuvideo.com/digital-twin/cloud-iot/raw/yangqing/build_yangqing.zip
>	RUN unzip ./build_yangqing.zip
>	WORKDIR build_yangqing
>	RUN npm config set registry https://registry.npm.taobao.org
>	RUN npm install serve -g	#需要下载NPM包serve,没有yum就用npm下载,-g=global
>	ENV TZ=Asia/Shanghai
>	EXPOSE 5000
>	CMD ["serve","-l","5000"]	
>	#没有node_modules,不支持set PORT=8081 && npm start(for Windows) || PORT=8081 npm start(for Linux)

#利用当前文件夹下的Dockerfile编译生成新的Dockerfile
$ docker build -t cloud-iot-img:v1.0 . --no-cache=true #.指代当前文件夹,不能省略(-t=-terminal)
$ docker image ls
$ docker run -itd --name cloud-iot-project -p 5000:5000 cloud-iot-img:v1.0

=============================================================================================||==============
3.没网pull镜像流程= load复制来的自建镜像
$ docker save -o /xxx
$ docker load -i /xxx/cloud-iot-img-back.zip

后端go-server

#go build -o xxxxname go-server
#如果使用腾讯云服务器,记得打开公网IP的对应端口(服务器-防火墙-添加规则)

1.正常流程= 搞个基础版容器+自己的配置
#拉取image->跑成container->进入container
> curl -JLO --header "PRIVATE-TOKEN: MSXESp_J15f8--zQBKAa" -JLO http://gitlab.youmuvideo.com/digital-twin/go-server/raw/yangqing/go-server_yangqing
> chmod +x go-server_yangqing
> ./go-server_yangqing

=============================================================================================||==============
2.Dockerfile流程= build自己的镜像 
$ mkdir -p /opt/docker-images/go-server && cd /opt/docker-images/go-server
$ vim Dockerfile
>	#FROM scratch 
>	#不需要golang镜像
>	
>	#FROM alpine:latest
>	#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
>	#RUN apk add --update curl && rm -rf /var/cache/apk/*
>	
>	FROM centos:centos7	
>
>	MAINTAINER LJH
>	RUN curl -JLO --header "PRIVATE-TOKEN: MSXESp_J15f8--zQBKAa" -JLO http://gitlab.youmuvideo.com/digital-twin/go-server/raw/yangqing/go-server_yangqing
>	RUN chmod +x ./go-server_yangqing
>	#WORKDIR go-server_yangqing
>	ENV TZ=Asia/Shanghai
>	EXPOSE 9002
>	CMD ["./go-server_yangqing"]	

#利用当前文件夹下的Dockerfile编译生成新的Dockerfile
$ docker build -t go-server-img:v1.0 . --no-cache=true   #.指代当前文件夹,不能省略(-t=-terminal)
$ docker image ls
$ docker run -itd --name go-server-project -p 9002:9002 go-server-img:v1.0

数据库MySQL

#如果使用腾讯云服务器,记得打开公网IP的对应端口-3306(服务器-防火墙-添加规则)


1.正常流程= 搞个基础版容器+自己的配置
#拉取image->跑成container->进入container

docker pull mysql:5.7.41
#改密码 改时区
docker run -itd --name mysql_iot -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Bupt@2021 -e TZ="Asia/Shanghai" mysql:5.7.41
#复制SQL文件进入容器生成数据

docker exec -it mysql_iot bash

> mysql -u root -p
mysql> grant all privileges ON *.* TO 'root'@'%' IDENTIFIED BY 'XXXXXXXXXXXXX' WITH grant OPTION;
1.1 A方案一 -- 命令行方式导入数据【速度超级慢】【目前会导致【中文】数据乱码】
docker cp ./smart.sql mysql_iot:/
docker cp ./Person.sql mysql_iot:/
mysql> source smart.sql #容器内运行sql脚本
mysql> source Person.sql
1.1 B方案二 -- Navicat方式导入数据 【速度超快】【无乱码】
Navicat->表->运行SQL文件

Rabbitmq

docker pull rabbitmq:latest
docker run -itd --name rabbitmq --hostname rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e TZ="Asia/Shanghai" rabbitmq

docker exec -it rabbitmq bash
执行rabbitmq-plugins enable rabbitmq_management

Redis

docker pull redis:7.0
docker run -itd --name redis --hostname rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e TZ="Asia/Shanghai" rabbitmq

docker exec -it rabbitmq bash
执行rabbitmq-plugins enable rabbitmq_management

kt2-server

cd /opt/docker-images/kt2-server
chmod 777 ./kt2-server
docker run -itd --name kt2-server-cotain -p 9102:9102 alpine:3.17.2
docker cp ./kt2-server kt2-server-cotain:/
docker exec -it kt2-server-cotain sh -c "./kt2-server  > /proc/1/fd/1"
docker logs kt2-server
ctrl+p+q
docker commit <容器id> <镜像名>:<tag>   #将容器保存成镜像,tag比如说latest
docker save -o <zip包名>.zip <镜像名>:<tag>   #将镜像保存为.zip文件,默认保存在当前目录

./kt2disaster-server > /proc/1/fd/1

ACS&CMS&VSS

mkdir -p /opt/docker-images/stream-server && cd /opt/docker-images/stream-server
vim Dockerfile

FROM rhche/centos_jdk8
#需要实现pull node的镜像
MAINTAINER LJH

#RUN chmod -r +x /home
RUN sudo mkdir -p /home/HKdeveloper/work/
ADD ./acs /home/HKdeveloper/work/acs
ADD ./cms /home/HKdeveloper/work/cms
ADD ./vss /home/HKdeveloper/work/vss
#不知道为什么,传zip解压缩没反应
#ADD ./work.zip /home/HKdeveloper/
#RUN sudo unzip /home/HKdeveloper/work.zip

# timezone,firewall,jdk
ENV TZ=Asia/Shanghai
#RUN systemctl stop firewalld.service
#RUN systemctl disable firewalld.service

#cms
#WORKDIR /home/HKdeveloper/work/
#WORKDIR cms
#WORKDIR bi
#RUN pwd
#RUN ls
WORKDIR /home/HKdeveloper/work/cms/bin
RUN ls
RUN sudo chmod +x ./run.sh
RUN ./run.sh

#acs
WORKDIR /home/HKdeveloper/work/acs/bin
#WORKDIR ..
#WORKDIR acs
##WORKDIR bin
RUN sudo chmod +x run.sh
RUN sudo chmod +x ./acs
RUN ./run.sh

#vss
# [`conf-outerip`,要不要改,准备两版][][][][]
# 任意一版中,也需要切换对应的vss来生成stream-server1和stream-server3
WORKDIR /home/HKdeveloper/work/vss/bin
##WORKDIR ..
##WORKDIR vss
##WORKDIR bin
RUN sudo chmod +x run.sh
RUN sudo chmod +x ./vss
#RUN ./run.sh

EXPOSE 8011
CMD ["./run.sh"]

【闹麻了】这三个程序都得CMD才行,但单一CMD都有问题,最后直接都不CMD,run起来之后exec

# Docker常用操作
docker run -itd后
使用
`docker attach containerID`
进入,ctrl p + ctrl q退出
`docker exec sh -c "./kt2-server  > /proc/1/fd/1" `多执行一条
`docker logs`打印输出
要更新image,直接 `docker build`就能覆盖
更新image后要重启container,需要先`docker rm -f container_name`

### 迭代流程:
$ go build 新的go二进制文件 -> 本地xftp到宿主机目录
$ docker build dockerfile来ADD ./xxx ./ ADD到容器内
$ docker rm -f 强制删除原有容器
$ docker run根据新image生成新容器
$ docker logs看日志,判断是否合理
### 发表流程:
可以使用docker commit命令将容器的状态保存为一个新的镜像。
$ docker commit my-container my-image:latest
$ docker save -o /xxx/cloud-iot-img-back.zip cloud-iot-img-v1.x
$ docker load -i /xxx/cloud-iot-img-back.zip



---
前端更新
# Dockerfile问题
`RUN curl -JLO curl --header "PRIVATE-TOKEN: glpat-4LUoxjifT9yFr_ppXzrz" -JLO https://gitlab.com/hierarchy-cloud/hier-front/-/raw/master/build.zip`

bug:`curl: (6) Could not resolve host: curl`

总结:gitlab token现在没法这么curl了,github上传太卡
替代:直接Dockerfile里` ADD ./build.zip ./ `,先xftp到宿主机,然后ADD拷贝到容器内,接着`RUN ./build.zip`执行就行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值