linux下docker容器的使用

时间:2024-03-23 09:03:30

1、根据已有镜像images创建容器

1.1、查看镜像

如果是接手的别人的项目,需要从以往的images镜像中创建新容器,使用命令查看当前机器上的docker镜像:

docker images

在这里插入图片描述

1.2、创建容器

使用docker run 根据images镜像名创建容器,命令:

docker run --name zdqm -d -p 8005:8001 -w /cytech_ai/app/ModelServer/ --env LANG=C.UTF-8 --gpus all cytech_ai_zd:1.0.4

参数解释如下:
–name zdqm:创建的一个新容器名称为zdqm
-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-p 8005:8001:端口映射,外部端口为8005,docker容器内部的端口为8001,如果外部需要访问,要使用8005去访问,也可以写成一样的8001:8001这样就直接对应上。
-w /cytech_ai/app/ModelServer/:–workdir=“”, 指定容器的工作目录,也就是进入docker之后,默认的当前路径
–env LANG=C.UTF-8:表示环境
–gpus all:表示使用gpu
cytech_ai_zd:1.0.4:docker images中的镜像名称

2、使用外部镜像创建容器

2.1、从Docker仓库中拉取镜像

以最小的linux系统busybox为例,使用命令:

docker pull busybox:latest

从docker hub官方镜像仓库获取一个为busybox的镜像,latest表示最新版,并pull下载到宿主机上。

docker镜像仓库还有很多,例如:ubuntu:latest,拉取一个最新的ubuntu系统镜像

2.2、创建容器

创建容器的方法和1.2类似了,参数也是一样的

docker run --name busyboxenv busybox:latest

或者按照上面的创建方式:

docker run --name zdqm -d -p 8005:8001 -w /cytech_ai/app/ModelServer/ --env LANG=C.UTF-8 --gpus all busybox:latest

3、启动容器

3.1、查看创建的容器

使用命令:

docker ps -a

在这里插入图片描述

3.2、启动容器

使用命令:

docker exec -it 9742b17eeea7 /bin/bash

4、本地磁盘映射

在创建docker容器时,使用docker run时,加入参数-v,命令:

docker run --name rknntestsiping -it --privileged -v /cytech_ai/:/cytech_ai/ 4c873a65d2b1 /bin/bash

即:

docker run --name zdqm -d -p 8005:8001 -w /cytech_ai/app/ModelServer/ -v /cytech_ai/:/cytech_ai/ --env LANG=C.UTF-8 --gpus all cytech_ai_zd:1.0.5

这样宿主机的cytech_ai文件夹的所有文件可以在docker容器中对应的cytech_ai文件夹中访问到。

5、docker文件拷贝

5.1、同一台机器中docker容器内部文件拷贝到外部宿主机

在docker容器外,即宿主机终端使用docker cp命令:
即:

docker cp 容器id:容器内部文件路径 宿主机外部路径

例如,在上面的9742b17eeea7容器中,将cytech_ai/app/test.py文件拷贝到外部宿主机的/home/code/下:

docker cp 9742b17eeea7:cytech_ai/app/test.py /home/code/

5.2、同一台机器中外部宿主机文件拷贝到docker容器内

在docker容器外,即宿主机终端使用docker cp命令:
即:

docker cp 宿主机外部路径 容器id:容器内部文件路径 

例如,将宿主机中/home/code//test.py文件拷贝到9742b17eeea7容器的cytech_ai/app/下:

docker cp  /home/code/test.py 9742b17eeea7:cytech_ai/app/

6、打包镜像

当算法开发完成后,我们的docker容器可能会发到其他现场的计算机上进行部署,因此需要打包docker容器为一个images镜像发布。

6.1、镜像提交 commit

先将容器提交为一个镜像images,例如前面我根据images创建了一个cytech_ai_zd:1.0.4的容器,修改了代码后提交一个新的版本镜像为1.0.5

docker commit 容器id 容器新名称

命令:

docker commit 9742b17eeea7 cytech_ai_zd:1.0.5

将9742b17eeea7 这个容器提交到镜像,镜像名为cytech_ai_zd:1.0.5
在这里插入图片描述

6.2、打包镜像

使用docker save命令:

docker save -o 新镜像名称.tar 新容器名称

在宿主机终端上,选择一个文件目录,使用docker save将images打包为tar后,会在当前路径下生成一个文件:

docker save -o cytech_ai_zd-1.0.5.tar cytech_ai_zd:1.0.5

等待打包完成后,即可发布到另外一台机器部署使用。

7、加载镜像

在新的服务器终端使用:

docker load -i 镜像包名称

例如:

docker load -i cytech_ai_zd-1.0.5.tar

加载完成后,使用docker images查看images是否加载成功,找得到这个images就可以开始部署使用了,步骤转到第一步即可。

8、其他问题

1、docker创建容器后,容器自动关闭问题
原因分析:
docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出。
容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
解决方案:
在最后加上/bin/bash就可以了。例如在上面的基础上。
docker run -it -P --name=“容器名” [镜像名] /bin/bash
docker run -dit centos /bin/bash

或者使用docker exec :

docker exec -it 9742b17eeea7 /bin/bash