程序员常用docker命令
docker作为非常省事方便的工具,熟练使用docker的各种命令是一个运维必备的技能。作为普通算法程序员,我认为,只需要掌握一下部分常用命令即可(安装部分请自行问度娘,本文不再重复叙述):
- 拉取(获取)镜像
- 启动容器
- 停止容器
- 进入容器
- 导出和导入容器
- 容器后台运行,开机自运行
- 删除容器
- 删除镜像
docker拉取容器命令:
# ubuntu终端运行,拉取一个ubuntu的镜像 $ docker pull ubuntu
docker 启动容器命令:
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
# -i: 交互式操作。 # -t: 终端。 # ubuntu: ubuntu 镜像。 # /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。 # 要退出终端,直接输入 exit: $ docker run -it ubuntu /bin/bash
docker停止容器命令:
$ docker stop <容器 ID>
docker 启动容器命令:
查看所有的容器命令如下:
$ docker ps -a
使用 docker start 启动一个已停止的容器:
# 其中b750bbbcfd88是容器id $ docker start b750bbbcfd88
docker 进入容器命令:
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
-
docker attach
-
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
$ docker attach 1e560fca3906 # 1e560fca3906是容器id,对于正在运行的容器,使用该命令可以进入容器,输入exti会停止容器 $docker exec -it 243c32535da7 /bin/bash # 使用exec进入容器,当使用exit退出时,容器不会停止,需要停止输入: $docker stop 243c32535da7 # 就可以停止容器,只有停止的容器才能删除
docker 导出和导入容器命令:
知道容器id就可以导出容器:
$ docker export 1e560fca3906 > ubuntu.tar # 1e560fca3906是容器id # ubuntu.tar是导出后的名称,默认会存在主目录下
导入容器为镜像,有上面那个.tar文件就可以导入了
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1 # docker/ubuntu.tar是容器快照文件的目录 # test/ubuntu:v1是导入后镜像的名称,v1可以理解为版本,其实可以是其他字符或者连冒号带版本号都不输入也可以
还有一种导出的方法,将容器注册为镜像文件,再导出镜像文件,导入的时候将镜像文件load下了即可
$docker commit a404c6c174a2 mymysql:v1 # a404c6c174a2 容器id # mymysql:v1创建成镜像后的名称和版本,:v1这个不写也可以,v1还可以换成别的自定义字符 # 执行这一句以后就在本地又生成了一个镜像名为mymysql:v1
生成了镜像,就有把镜像导出来成本地镜像快照文件
$docker save -o images_file.zip mysql:v1 # images_file.zip保存成本地快照文件的名称 # mysql:v1镜像的名称和版本 # 执行这一句就会在本地主目录下生成一个本地快照文件images_file.zip
导出镜像文件后怎么导入成其他设备上的镜像文件呢?毕竟我是为了方便部署嘛,能方便导入才是我们的目的所在:
$docker load -i images_file.zip # images_file.zip本地快照文件 # 执行玩就会在当前设备上生成新的镜像,可以输入: $docker images # 命令进行查看
docker 容器后台运行&开机自运行命令:
$docker run --restart always --name pyt_v5 -p 10010:10010 -v /home/ymc/yolov5:/home -it images_file /bin/bash /home/auto_service.sh # 解释一下, --restart always表示无论什么关闭了(断电莫名退出等情况)都重启docker # --name pyt_v5 将这个容器命名为pyt_v5 # -p 10010:10010 将容器中的端口映射到本机,访问本机ip+端口号就能直接访问到容器暴露的端口服务了 # -v /home/ymc/yolov5:/home将本机/home/ymc/yolov5映射到容器中,这样方便的将代码拷到容器又及时查看到容器中做了什么改变(增删改) # -it 交互模式 # /bin/bash 打开方式 # /home/auto_service.sh容器开启就运行的脚本
其中/home/auto_service.sh 文件内容如下:
cd /home export PYTHONIOENCODING=utf-8 nohup python3 flask_server.py
也不需要过多解释,就是进入容器/home目录下
编码方式utf-8
执行python3 flask_server.py
docker 删除容器命令:
$docker stop 54ads56f4a6ds4 $docker rm 54ads56f4a6ds4 # 如果容器已经停止了就不需要stop停止容器那一句 # rm 就是删除容器的关键 # 执行完查看一下容器没有那个id的容器就表示完成了,查看存在的容器命令为: $docker ps -a # 查看正在运行的容器为: $docker ps # 查看本机的所有容器命令为: $docker images
docker 删除镜像命令:
$docker rmi 4asd24f3aas32 # 4asd24f3aas32镜像的id
docker 自启动有问题,有的服务和包没有安装上:
把原来的镜像直接删除吧,然后重新run一个进行修改,再保存为镜像,然后从新的镜像启动容器即可:
sudo docker run --name fastapiweb -p 8000:8000 -v /home/hxzh/python_build/fastapi_myweb:/home -it mmdetection_20200611 /bin/bash
mmdetection_20200611是一个镜像,有些我们需要的东西,也缺一些包。我们从该镜像run一个容器,在容器中安装包。装好了再保存为新的镜像
后面的我晚点再更新其他内容,有问题评论区交流哈!!