第四章 开源项目与部署

2022-01-23 05:27:51 浏览数 (3)

文件与数据存储

运行todo项目

进入app目录

代码语言:javascript复制
app
├── Dockerfile
└── spec             
└── src
└── yarn.lock

源代码下载:getting-started源代码压缩包

新建Dockerfile

代码语言:javascript复制
FROM node:12-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache python3 g   make
RUN yarn config set registry http://mirrors.cloud.tencent.com/npm/
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

打包镜像

代码语言:javascript复制
docker build -t tke-todo .

运行

代码语言:javascript复制
docker run -dp 3001:3000 tke-todo

不指定容器name,name会自动随机生成。

存储卷Volume

存储卷Volume的作用,是让数据持久化。

代码语言:javascript复制
docker volume create todo-db   #创建一个名为todo-db的存储卷
docker volume ls               #列出所有存储卷
docker volume inspect todo-db  #查看存储卷的信息
docker volume --help           #了解dokcer volume的所有指令

容器使用存储卷

代码语言:javascript复制
docker run -dp 3002:3000 -v todo-db:/etc/todos tke-todo

把3002端口的容器stop后,再run一个容器。

代码语言:javascript复制
docker run -dp 3003:3000 -v todo-db:/etc/todos tke-todo

发现之前添加的数据还在。

存储卷的数据可以共享给多个容器使用。

查看容器以及导出容器

新建一个终端

代码语言:javascript复制
docker ps               #查看正在运行的容器列表,以及找到运行tke-todo的容器ID
docker exec -it <容器ID或name> /bin/sh    #换成你的容器ID

进入存储卷路径,查看db。

代码语言:javascript复制
cd /etc/todos           #进入到存储卷Volume挂载的点
ls                      #查看文件夹下的文件列表        

导出为tar压缩包

代码语言:javascript复制
docker ps                                #从列表中找到你要导出的容器ID或名称
docker export <容器ID/名称> -o 压缩包名.tar #导出容器里的所有文件

注意:执行docker命令需要退出交互模式,进入普通的终端模式。导出后的文件,在命令行的当前目录下。

导出的文件包含整个镜像和存储卷Volume。

Wordpress与数据库

拉取wordpress和mysql镜像

代码语言:javascript复制
docker pull wordpress
docker pull mysql
​

创建一个存储卷

代码语言:javascript复制
docker volume create wordpress-mysql-data

初始化并启动mysql容器

代码语言:javascript复制
docker run -d 
    --name tke-mysql 
    -v wordpress-mysql-data:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=tketke 
    -e MYSQL_DATABASE=wordpress 
    mysql

多行命令建议用git bash,cmd不支持。

新建一个cmd,进入交互模式

代码语言:javascript复制
docker exec -it tke-mysql mysql -u root -p 

提示输入密码,密码为刚刚设置的tketke

密码输入不可见,输入完成回车,进入mysql交互模式。

输入命令SHOW DATABASES; 可以查看看到创建好的wordpress数据库。

注意:命令后面有个分号,show和databases要用空格分开,不区分大小写。

Docker安装Wordpress

创建网络

代码语言:javascript复制
docker network create wordpress-net #创建名称为wordpres-net的网络
docker network --help
docker network ls

数据库桥接到网络

代码语言:javascript复制
docker network connect wordpress-net tke-mysql

查看MySQL容器的详细地址,可以找到IP地址信息。

代码语言:javascript复制
docker inspect tke-mysql

如果嫌数据太多太难找,可以使用命令:

代码语言:javascript复制
docker inspect -f '{{ $network := index .NetworkSettings.Networks "wordpress-net" }}{{ $network.IPAddress}}' tke-mysql

注意下,windows上运行命令,会出现报错:

代码语言:javascript复制
Template parsing error: template: :1: unclosed action

若要正常执行,则需要用双引号包裹(实际还是不能,有待考究)

建议networks命名不要带-

代码语言:javascript复制
docker inspect -f "{{ $network := index .NetworkSettings.Networks "wordpress-net" }}{{ $network.IPAddress}}" tke-mysql

参考:docker - Template parsing error: template: :1: unclosed action - Stack Overflow

git bash运行则不会有这个问题

启动一个wordpress

代码语言:javascript复制
docker run -dp 8008:80 
    --name tke-wordpress 
    --network wordpress-net 
    -v wordpress_data:/var/www/html 
    -e WORDPRESS_DB_HOST=172.20.0.2:3306 
    -e WORDPRESS_DB_USER=root 
    -e WORDPRESS_DB_PASSWORD=tketke 
    -e WORDPRESS_DB_NAME=wordpress 
    wordpress

上面命令太长了,可以复制内容,保存为wordpress.sh

Windows上运行sh文件,方式有两种:

  1. 右键文件,使用git bash运行(推荐)
  2. 当前目录进入git bash,执行sh wordpress.sh

参考:Windows系统下如何运行.sh脚本文件-百度经验

腾讯云容器服务

新建私有网络和子网

创建EKS弹性集群

创建完成后,需要去左侧【实例管理】里面,找到【更多】,点击【重置密码】。(第一次用必须经过这一步)

输入登录命令:

代码语言:javascript复制
docker login --username=<你的账号> ccr.ccs.tencentyun.com

输入密码后,显示登录成功。

给之前本地的镜像打标签,ImageId是本地的镜像名称或ID

代码语言:javascript复制
docker tag [ImageId] ccr.ccs.tencentyun.com/[你的镜像仓库命名空间]/[你的镜像仓库名称]:[tag]

随后可以push到云端的镜像仓库了

代码语言:javascript复制
docker push ccr.ccs.tencentyun.com/[你的镜像仓库命名空间]/[你的镜像仓库名称]:[tag]

举例:

代码语言:javascript复制
docker tag tke-todo ccr.ccs.tencentyun.com/[你的镜像仓库命名空间]/tke-todo:1.0.1
docker push ccr.ccs.tencentyun.com/[你的镜像仓库命名空间]/tke-todo:1.0.1

命名空间可以在腾讯云控制台查看,也可以从快捷指令中查看:

使用EKS快速部署应用

总结

今天的内容比较实战,学习了项目的部署,以及打包上传到腾讯云容器镜像服务。除了个别命令在windows的命令行中会报错外,没有遇到其他繁琐的问题。在云端部署应用后,要记得用完删掉创建过的Workload,以及【服务与路由】的Service。另外本地导出的带db的tar压缩包有400多M,后面用不到了,也要记得删掉。

0 人点赞