文件与数据存储
运行todo项目
进入app目录
代码语言:javascript复制app
├── Dockerfile
└── spec
└── src
└── yarn.lock
源代码下载:getting-started源代码压缩包
新建Dockerfile
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
压缩包
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文件,方式有两种:
- 右键文件,使用git bash运行(推荐)
- 当前目录进入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,后面用不到了,也要记得删掉。