一、问题
生产测试有很多人同时用,virtualenv 等虚拟环境也是很多人用的,但是docker 可以隔离操作系统,快速获得不同的python版本环境
二、理论
镜像:就是静态的
容器:就是镜像的实例化,码农同学可以类比于对象
三、常用的docker命令
# 查看当前docker版本
docker -v
# 查看当前本地所有镜像
docker images
# 列出容器。 -a:所有容器包含没有运行的
docker ps
# 查看当前运行下的镜像进程
docker ps -a
# 构造镜像,用法docker build -t 镜像名称 .
docker build -t docker_demo .
# 启动已被停止的容器【xx -> CONTAINER ID】
docker start xx
# 关闭已被启动的容器
docker stop xx
# 重新启动容器
docker restart xx
# 杀掉一个运行中的容器
docker kill -s KILL xx
# 【 注:如果删除镜像,顺序:停止镜像里的容器,再删除容器,最后再删除镜像 】
# 删除一个或多少容器。-f :通过SIGKILL信号强制删除一个运行中的容器-l :移除容器间的网络连接,而非容器本身-v :-v 删除与容器关联的卷
docker rm -f xx、xx2
# 删除镜像
docker rmi xx
# 创建一个新的容器并运行,-d为后台执行,-p 9000:3000前面为主机端口,后面是容器端口。docker_demo镜像名
docker run -d -p 9000:3000 docker_demo
# 在运行的容器中执行命令。6576abc容器id
sudo docker exec -it 6576abc /bin/bash
# 获取容器获取容器的日志 6576abc容器id,-t:显示时间戳
docker logs -f -t 6576abc
# 登陆镜像仓库
docker login
# 获取镜像
docker pull
# 上传镜像
docker push
# 查看指定镜像的创建历史。
docker history docker_demo
# 进入容器
docker exec -t 6576abc /bin/bash
# 从宿主机拷文件到容器里面
docker cp /home/zhengqing/test.sql mysql_server:/tmp # mysql_server:容器名 前:宿主机文件路径 后:容器路径
# 从容器里面拷文件到宿主机
docker cp 容器名:/tmp/test.sql /home 前:容器路径 后:宿主机路径
下面对该条命令进行剖析
(1)端口映射 -p 8888:8888
将docker中的jupyter的8888接口与本机的8888接口关联
(2)挂载 -v `pwd`/workspace:/opt/workspace
将当前路径下(由`pwd`)的workspaace文件夹映射到docker中的opt路径下的的workspace文件夹,这样,docker下的opt/workspace就指向来本机的`pwd`/workspace文件夹;
Dockerfile 文件示例
FROM ubuntu:18.04
FROM python:3.6.13
RUN pip install --upgrade pip
RUN apt-get update -y && apt-get install -y python-pip python-dev
# We copy just the requirements.txt first to leverage Docker cache
COPY ./requirements.txt /nlp/requirements.txt
WORKDIR /nlp
RUN pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
COPY . /nlp
CMD cd /nlp/nlp_service && python app.py
四、使用
1、docker build -t nlp_tornad . 注意后面有个小点!
2、docker run -p 9080:9080 nlp_tornad 端口号可以自己改