纲领
- 前言
- 使用
- 过程
- 配置
- 总结
前言
随着docker的普及,现在更多的生产线上的程序都是打包成docker 应用,这样方便环境的隔离,也能提高资源的利用率,不过一旦出了问题,怎么debug就成了一个难题,我可暂时没有学会大神们的pdb debug大法,只会用pycharm 打断点调试,那如何处理呢,pycharm professional (只有这个版本里面有这个功能,社区版是没有的) 有一个remote debug 功能,如果我们使用这个功能,那是不是可以同样套路上docker 应用呢?当然可以,我们姑且将docker 当成一个真实的机器
准备
- docker
- pycharm professinal
- docker-compose
- ubuntu 16.04 系统
使用
最近我正在改nvidia 官方的一个可视化机器学习的web框架 digits ===> https://github.com/NVIDIA/DIGITS(可以轻松的训练) 本次操作就以它来演示
准备基础镜像
因为官方已经提供了他的官方镜像,所以我们直接拉镜像就可以了
1 2 |
sudo docker pull nvidia/digits:5.0 |
准备debug相关资料
新建一个debug 文件夹
1 2 |
mkdir debug_wukong |
在debug_wokong
下新建 Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
FROM nvidia/digits:5.0 RUN apt-get update RUN apt-get -q -y install openssh-server python-pip python-tk build-essential python-dev RUN mkdir /var/run/sshd RUN sed "s/without-password/yes/g" /etc/ssh/sshd_config > /etc/ssh/sshd_config2 RUN cp /etc/ssh/sshd_config2 /etc/ssh/sshd_config RUN echo 'root:root' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config WORKDIR /workspace ENTRYPOINT /usr/sbin/sshd && bash EXPOSE 22 |
准备docker-compose.yml
文件
1 2 3 4 5 6 7 8 9 10 |
version: "2" services: debug_wukong: build: . ports: - "8083:8080" - "9999:22" environment: - RUNENV=production |
这里,我们将应用的端口暴露出来,宿主机的9999 与虚拟机的22端口绑定在一起了
build debug的镜像
在debug_wukong
文件夹下,我们就有如下的文件了
1 2 3 4 |
. |-- Dockerfile |-- docker-compose.yml |
使用命令sudo docker-compose build
耐心等待,这样我们就可以在原来的镜像基础之上生成一个新的可以debug的镜像
进入镜像
在debug_wukong
文件夹下,使用命令
1 2 |
docker-compose run --service-ports debug_wukong bash |
这样我们就可以顺利的进入docker 的内部环境了,这个时候,当前的bash 已经进入到了docker 内部,我们在开另外一个bash命令窗口,使用命令docker ps -a
, 可以方便的看到当前的内容
1 2 3 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1f9f2174eb0 debugwukong_debug_wukong "/bin/sh -c '/usr/..." 22 hours ago Up 22 hours 5000/tcp, 0.0.0.0:9999->22/tcp, 0.0.0.0:8083->8080/tcp debugwukong_debug_wukong_run_1 |
包括我们当前起的docker 名称
当前状态
这个时候,我们的虚拟机(容器)内部端口22 (ssh) 和宿主机的9999绑定了,内部的应用端口8080和外部的8083绑定在了一起
配置
配置目录
我们使用pycharm打开我们的项目文件,(我这边的文件夹已经改成wukong了),先把菜单栏的
1 2 |
Tools -> Deployment -> Configration |
如图所示:
- sftp host : 我们远程debug的host地址,我这里就直接填本地了 127.0.0.1
- port : 9999 记得我们开放的9999(实际和docker 里面的绑定的22端口了吧)
- Root path: 映射的地址
- User name : 我们的用户名
- Password: 密码也是root (用户名和密码我们都已经在dockerfile里面写好了)
配置python path
菜单栏
1 2 |
Pycharm -> Preferences -> Project -> Project interpreter |
我们选择右边的”选项图标”,会出现
1 2 |
Add remote |
填好我们之前的参数 ,这样就会方便的将我们的环境与远程环境同步,这个时候我们就可以方便的使用remote 的python 编译器执行我们的本地脚本了
同步本地代码到docker内部
选择upload 选项,就样就会将本地的代码同步到docker内部环境,以后修改记得同步到远程环境
补充
现在更新了一个新的ubuntu 18.04的base镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Just for debug RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:root' |chpasswd RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config RUN mkdir /root/.ssh RUN apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* EXPOSE 22 ENTRYPOINT /usr/sbin/sshd && bash |
总结
本次主要从dockerfile的制作,docker-compose 使用,以及pycharm 的配置来介绍我们的一大日常工作中的常用利器,remote debug ,学会这个技能,对于我们的工作还是有不小的帮助的。10.1 国庆节在即,大鱼在这里提前祝大家国庆快乐,出行注意安全。
sudo docker-compose build 的时时候,有个连不上啊,还能连其他的不?
http://developer.download.nvidia.com Release
The following signatures were invalid: NODATA 1 NODATA 2
return a non-zero code: 100
应该是没有这个image了吧,如果是网速过慢可以考虑给docker 换一个源 https://cn.bing.com/search?q=docker+%E6%8D%A2%E6%BA%90&qs=n&form=QBLH&sp=-1&pq=undefined&sc=0-9&sk=&cvid=1E03FA971B874D1B8AE27AC633FF872D ,如果是没有这个Image可以考虑换同样的base 的不同的版本的image