1.安装docker
#在centos7上有网的情况下,只需要一条命令:
yum install docker
#docker命令的时候可能出现:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
#再使用一条命令:
systemctl start docker
2. 镜像操作常用命令
# 注:tensorflow:1.0.0为镜像名,也可以换做镜像id
# tar包形式镜像导入
docker load -i x.tar
# 查看镜像
docker images
# 删除镜像,前提是没有正在运行的容器是依赖本镜像的
docker rmi tensorflow:1.0.0
# 查看镜像历史操作
docker history tensorflow:1.0.0
# 镜像打包 docker save -o 保存的tar包名字 镜像:tag
docker save -o tensorflow_image.tar tensorflow:1.0.0
3. 容器操作常用命令
# 查看运行中的容器
docker ps
# 查看所有存在的容器
docker ps -a
# grep 可以加筛选条件,grep 后的单词为仅筛选包含test的容器
docker ps -a | grep test
# 简单版 docker run -itd -- name 容器名 镜像名:tag
docker run -itd --name test tensorflow:1.0.0
# 挂载用 -v 宿主机路径:容器内路径; 端口映射用 -p 宿主机端口:容器内端口 --cpus=2 限制cpu核数,-m 4G 限制内存,单位可以是m、G
docker run -itd -v /home/test:/home -p 8085:8085 --cpus=2 -m 4G --name test tensorflow:1.0.0
# 宿主机与容器互传文件
# 宿主机->容器:docker cp x.zip 容器名:容器的指定路径
docker cp x.tar test:/home
# 容器->宿主机:docker cp 容器名:容器文件路径/x.zip 宿主机路径
docker cp test:/home/x.tar ./
# 注:test为容器名,也可以换做容器id
# 进入
docker exec -it test bash
# 退出
exit
# 停止
docker stop test
# 重启
docker start test
# 删除,需要先停止才可以
docker rm test
# 停止、删除不用的容器是个好习惯
# 容器导出成镜像docker commit 容器名 新镜像名
# -m: 提交说明
docker commit -m "first commit" test tensorflow_test:1.0.0
4. Dockerfile 镜像打包
# From 基础镜像,必须为第一条非注释指令
# EXPOSE 暴露容器内的端口,在启动容器时-p做本机映射
# ADD 添加本地tar包到容器中,会自动解压
# COPY 拷贝本地文件到容器中
# WORKDIR 指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
# RUN <command> shell格式
# RUN ["executable","param1","param2"] 必须是双引号
# CMD 类似于RUN,用于运行程序,但CMD是在docker run时运行,RUN是在docker build时运行。
# 程序运行结束,容器也就结束。CMD可被docker run命令行参数中指定要运行的程序所覆盖。
# ENTRYPOINT 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
# 但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
FROM paddle-vim-py36:1.0.0
EXPOSE 8085
ADD model_file.tar /home
ADD SignSealDetection.tar /home
WORKDIR /home/SignSealDetection
RUN chmod 777 ./run.sh
ENTRYPOINT ["./run.sh"]
5. K8S 常用命令
# 查看指定空间的pod:kubectl get pods -n <space name>
kubectl get pods -n ai
# 创建删除更新pod (cd 到yaml文件所在文件夹)
kubectl create -f ./
kubectl delete -f ./
# 更新镜像,只更新了指定文件中的几个配置,那只需使新的配置生效即可
kubectl apply -f 06_sseal_deployment.yaml
# 进入正在running的pod:kubectl exec -it <pod name> -n <space name> -- /bin/bash
kubectl exec -it signseal-dc66bbd54-4xfwq -n ai -- /bin/bash
# 不进入容器打印运行中pod的日志
# kubectl logs -f <pod name> -c <服务的名字 sseal 或者 ai-sseal-sidecar> -n <space name> | grep <-v {} 指过滤{}字样不输出>
kubectl logs -f signseal-5b7bfc55f5-s97rp -c signseal -n ai | grep -v {}
# 查看容器详细信息:kubectl describe pod <pod name> -n <space name>
kubectl describe pod signseal-799895787d-kctr4 -n ai