shartup
部署方案
古早年代
虚拟机
docker
image镜像 & container容器 & registry仓库
- 镜像:相当于是一个 root 文件系统,提供容器运行时所需的程序、库、资源、配置等
- 容器:镜像运行时的实体,可以被创建、启动、停止、删除、暂停等
- 仓库:用来保存镜像
常用命令
- 拉镜像
- docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
- 地址可以是官方地址,也可以是第三方(如Harbor)
- 仓库名由作者名和软件名组成(如zhangruiming/skin)
- 标签用来指定某个版本的image,省略则默认latest
- 列出所有镜像
- docker images
- 删除镜像
- docker rmi [-f] [镜像id]
- 删除镜像之前要kill/rm所有使用该镜像的container:docker rm [容器id]
- 运行镜像并创建一个容器
- docker run [-it] [仓库名] [命令]
- 选项 -it:为容器配置一个交互终端
- 选项 -d:后台运行容器,并返回容器ID(不直接进入终端)
- 选项 —name=’xxx’:为容器指定一个名称
- 选项-v /host_dir:/container_dir:将主机上指定目录映射到容器的指定目录
- [命令]参数必须要加,而且要是那种一直挂起的命令(/bin/bash),如果是ls/cd/直接不填,那么命令运行完容器就会停止运行,docker ps -a查看状态,发现都是Exited
- 创建容器
- docker run
- 查看所有容器
- docker ps
- 启动一个已经停止的容器/停止正在运行的容器
- docker start [容器id]
- docker stop [容器id]
- 进入容器
- docker exec -it [容器id] [linux命令]
- 删除容器
- docker rm [容器id]
- 删除所有不活跃的容器
- docker container prune
- 提交镜像到远端仓库
- docker tag [镜像id] [用户名]/[仓库]:[标签] # 重命名
- docker login # 登陆用户
- docker push
- 拉镜像
案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33拉镜像
docker pull 地址/仓库:标签
显示镜像
docker images
运行指定镜像
docker run -itd --name='test' 地址/仓库:标签
查看运行的容器
docker ps
进入容器
docker exec -it 容器id或name /bin/bash
一顿操作完退出容器
exit
将修改后的容器保存为镜像
docker commit 容器id或name 新镜像名字
docker images可以看到这个镜像了
保存镜像到本地
docker save -o tf_torch.rar tf_torch
还原镜像
docker load --input tf_torch.tar
重命名镜像
docker tag 3db0b2f40a70 amberzzzz/tf1.14_torch1.4_cuda10.0:v1
提交镜像
docker push amberzzzz/tf1.14-torch0.5-cuda10.0:v1dockerfile
Dockerfile 是用来说明如何自动构建 docker image 的指令集文件
常用命令
- FROM image_name,指定依赖的镜像
- RUN command,在 shell 或者 exec 的环境下执行的命令
- COPY srcfile_path_inhost dstfile_incontainer,将本机文件复制到容器中
- ADD srcfile_path dstfile_incontainer,将本机文件复制到容器中,src文件不仅可以是local host,也可以是网络地址
- CMD [“executable”,”param1”,”param2”],指定容器启动默认执行的命令
- WORKDIR path_incontainer,指定 RUN、CMD 与 ENTRYPOINT 命令的工作目录
- VOLUME [“/data”],授权访问从容器内到主机上的目录
basic image
从nvidia docker开始:https://hub.docker.com/r/nvidia/cuda/tags?page=1&ordering=last_updated&name=10.
选一个喜欢的:如docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04
然后编辑dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
MAINTAINER amber <amber.zhang@tum.de>
install basic dependencies
RUN apt-get update
RUN apt-get install -y wget vim cmake
install Anaconda3
RUN wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh -O ~/anaconda3.sh
RUN bash ~/anaconda3.sh -b -p /home/anaconda3 && rm ~/anaconda3.sh
ENV PATH /home/anaconda3/bin:$PATH
RUN echo "export PATH=/home/anaconda3/bin:$PATH" >> ~/.bashrc && /bin/bash -c "source /root/.bashrc"
change mirror
RUN mkdir ~/.pip \
&& cd ~/.pip
RUN echo '[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple/' >> ~/.pip/pip.conf
install tensorflow
RUN /home/anaconda3/bin/pip install tensorflow-gpu==1.8.0
* 然后build dockerfile
1
docker build -t <docker_name> .