前言
在平时的工作中,部署软件服务或者多人用一台GPU服务器开发算法模型,为了互不影响,而且便于环境迁移,用docker是很好的选择。这里简单总结下,分享给大家。
环境准备
1、在开发服务器上安装docker,具体安装步骤略。可求助AI工具。
2、(非必须)为了便于管理docker镜像,通常要建一个私有的镜像仓库。
推荐使用Harbor。Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。在可视化的界面上进行镜像管理。搭建过程略,可求助AI工具。常用到的命令如下:
登录(如果镜像仓库服务器有用户权限设置):
docker tag {旧镜像名称:旧tag名} {新镜像名称:新tag名}
从镜像仓库拉取镜像:
docker pull {镜像仓库中的镜像名:tag}
推送镜像到镜像仓库:
docker push {本地环境中的镜像名:tag}
常用docker命令
1、创建容器
docker run -p 80:8080 --restart=always --name=my_app --privileged -v /data/test:/data/test -it {镜像名称:tag名} bash
参数说明:
--privileged 用于提供更多的特权给容器内的进程;
--restart 退出容器或者服务器重启后容器会自启动;
--name 给容器命名,便于区分;
-p 主机和容器内端口映射;
-it 容器创建好后,会分配一个虚拟终端,可进行交互操作;
2、 进入容器
docker exec -it {容器名称或容器id} bash
3、生成镜像
方法一:将现有容器制作成一个镜像
docker commit {容器名} {新的镜像名:新的tag名}
方法二:通过Dockerfile生成镜像
注意最后的‘.’不要忘记
docker build -t {新的镜像名:新的tag名} .
关于Dockerfile的写法此处略。
docker-compose常用命令
创建容器:docker-compose up -d --build {imageName}
查看容器:docker-compose ps
停止容器:docker-compose top {serviceName}
启动容器:docker-compose start {service Name}
删除容器:docker-compose rm {serviceName}
关于docker-compose.yml的写法可自行搜索。比如前端工程nginx:
version: '3'
services:
nginx:
image: nginx:v2.2
container_name: nginx
volumes:
- /docker-compose/nginx/nginx.conf:/etc/nginx/nginx.conf
- /docker-compose/nginx/conf.d:/etc/nginx/conf.d
- /etc/localtime:/etc/localtime
ports:
- 8081:8080
restart: always
其它命令
- 删除退出的容器:docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
- 删除none镜像:docker rmi $(docker images | grep "none" | awk '{print $3}')
- 删除没有标签(none)的镜像:docker image prune
- 删除none和没有被任何容器引用的镜像:docker image prune --all