这是一个完整的docker run
例子,感受下:
docker run -itd --name ner_rpc -p 9000:9000 -v /data/nlp_code:/mnt python_base:v1.3.10 sh -c 'cd /mnt/ner && python server.py 0.0.0.0 9000 10'
简单解释下:
-ti
表示以交互模式打开-d
表示后台运行容器- 容器被起名为
ner_rpc
- 将容器的9000端口映射为主机的9000端口
- 将主机
/data/nlp_code
目录挂在到容器的/mnt
目录下 - 镜像名为
python_base
,tag为v1.3.10crf
- 打开容器后,执行两个命令:进入
ner
目录;启动ner rpc
服务。
1. 从Docker image创建一个容器
docker run -tid --name <container_name> <repo_name>:<tag> /bin/bash
解释:
- 选项
-d
表示后台运行容器,并打印容器id。 /bin/bash
表示容器启动后,进入bash。这样,你才能进入容器内部,像使用虚拟机那样执行一些命令。--name
选项可以给你的容器起个名字。(这一步最好需要,如果你不想后面使用容器时一直查容器id的话)
2. 展示正在运行的容器
docker ps
如果要展示所有容器:
docker ps -a
3. 查看所有image
docker images
4. 保存当前容器状态为一个新的image
docker commit <container_id/container_name> <repo_name>:<tag>
5. 打开被终止的容器
docker start <container_id/container_name>
这种方式打开容器只会在后台打开,并不会直接进入容器;你可以使用-i
选项直接进入容器:
docker start -i <container_id/container_name>
6. 进入运行中的容器
docker attach <container_id/container_name>
重新启动一个shell进入容器:
docker exec -ti <container_name/id> /bin/bash
7. 删除容器
docker rm <container_id/container_name>
8. 删除image
docker rmi <image_id>
你可以通过docker images
查看image_id
。
9. 将docker下的文件或文件夹复制到主机
docker cp <container_id>:<file_path_in_docker> <path_in_host>
10. 将主机的文件复制到docker
- Get container name or short container id :
docker ps
Get full container id:
docker inspect -f '{{.Id}}' SHORT_CONTAINER_ID-or-CONTAINER_NAME`
copy file :
cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
(网上都这么说,但我的ubuntu下
/var/lib/docker/aufs/mnt/
路径下的文件夹名并不是容器完整ID名,是什么我也不知道)
11. 挂载本地文件夹到docker
docker run -v <local_dir>:/mnt -tid <repo_name>:<tag> /bin/bash
也就是说,挂载只能在从image重新创建一个容器时进行。
12. 端口映射
可以将docker的内部端口映射为主机的端口,使用-p
选项
docker run -p <local_port1>:<container_port1> -p <local_port2>:<container_port2> -tid <repo_name>:<tag> /bin/bash
13. 创建容器时执行命令
docker run -tid <repo_name>:<tag> sh -c 'cmd1 && cmd2'
14. 镜像文件导出、加载
(1)从容器导出镜像文件
docker export <container_id> > test.tar
注意:export的镜像只能使用import来加载
(2)加载export的镜像
docker import test.tar <img_name:tag>
(3)从image导出镜像文件
docker save <image_name:tag> > test.tar
注意:
- save的镜像只能使用load来加载
- save可以使用image_id,但是如果这样,你load之后的image是没有name、tag的。
(4)加载save的镜像
docker load --input test.tar
15. 传递环境变量
docker run -e "key=value"
16. 退出容器
Ctrl + p + q
17. 为镜像rename、打tag
docker tag <image_id> <image_name>:<tag>