程序员常用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一个容器,在容器中安装包。装好了再保存为新的镜像

 

 

 

后面的我晚点再更新其他内容,有问题评论区交流哈!!

 

posted @ 2020-06-24 17:54  九万里风  阅读(169)  评论(0编辑  收藏  举报