docker 常用命令

API官网 Docker run reference | Docker Documentation

docker run:

#!/usr/bin/bash

image_name="auto_test:v1.1"

#无启动脚本
#sudo docker run --restart=always --network="host" -d -it \
#  -v /mnt:/mnt \
#  -v $(pwd)/config.py:/auto_test/config.py \
#  -v $(pwd)/logs:/auto_test/logs \
#  --name auto_test \
#  --entrypoint="" \
#  $image_name bash

#启动test
#sudo docker run --restart=always --network="host" -d -it \
#  -v /mnt:/mnt \
#  -v $(pwd)/config.py:/auto_test/config.py \
#  -v $(pwd)/logs:/auto_test/logs --name auto_test \
#  --entrypoint /bin/bash $image_name -c "nohup python /auto_test/test.py > /auto_test/logs/log_test.txt 2>&1 & /bin/bash"

#启动main
sudo docker run --restart=always --network="host" -d -it \
  -v /mnt:/mnt \
  -v $(pwd)/config.py:/auto_test/config.py \
  -v $(pwd)/logs:/auto_test/logs \
  --name auto_test \
  $image_name

 

镜像相关操作

#搜索镜像
docker search 关键字
去docker hub上检索镜像的详细信息,如镜像的TAG。
#拉取镜像
docker pull 镜像名:tag
:tag是可选的,tag表示标签,多为软件的版本,默认是latest
#查看所有本地镜像
docker images
#删除指定的本地镜像
docker rmi image-id
docker rmi imageName:tag
#构建镜像
docker build -t 镜像名:tag .
#运行镜像并进入容器
docker run -it 镜像名:tag bash
#可以修改镜像内容exit退出 然后 commit 提交新镜像
#进入已经运行的容器
docker exec -it 容器ID/名字 bash
#运行镜像
docker run -it -p 8885:8885 --name 别名 -d  --network host 镜像名:tag

You can reset a containers entrypoint by passing an empty string, for example:
docker run -it --entrypoint="" mysql bash

容器相关操作

一个镜像可以创建多个容器,已创建的容器可以直接启动

docker ps   查看当前运行的容器
docker ps -a   查看已创建的全部容器
docker start  容器ID   
docker stop  容器ID 
docker restart  容器ID 
docker rm 容器id    来删除一个终止状态的容器;若要删除一个运行中的容器,需要加-f参数。
启动mysql:
docker run -p 3306:3306 --name mysql_01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
备份 :https://www.cnblogs.com/linjiqin/category/1108912.html
​
#拷贝文件到容器
docker cp views.py ef9d82f6d2e4:/mask_detective/app

修改容器内镜像文件

1、docker  run –it  imageName bash  进入正在运行的容器内
2、进入容器后,就可以修改镜像了,比如修改镜像中已经部署的代码或者安装新的软件或包等,修改完成之后,exit 退出容器
3、docker ps 查看该容器ID
4、docker commit 容器ID imageName:v1.3  #提交你刚才修改的镜


导出镜像

docker save myimage:latest | gzip > myimage_latest.tar.gz
docker save -o seal_num_api_1.0.3.tar seal_num_api:1.0.3

导入镜像

docker load < 镜像名.tar.gz

可能会搜索不到镜像 需要给个名字:

docker容器设置自动启动

启动时加--restart=always

Flag	Description
no		不自动重启容器. (默认value)
on-failure 	容器发生error而退出(容器退出状态不为0)重启容器
unless-stopped 	在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 	在容器已经stop掉或Docker stoped/restarted的时候才重启容器

如果已经启动的项目,则使用update更新:
docker update --restart=always 容器名称(ID)

docker GPU服务

安装完dockers nvidia docker

运行  docker run --gpus all -it tensorflow/tensorflow:1.14.0-gpu-py3 bash 进入容器

nvidia-smi 检查是否启用GPU

# 使用所有GPU

docker run --gpus all nvidia/cuda:9.0-base nvidia-smi

# 使用两个GPU

 docker run --gpus 2 nvidia/cuda:9.0-base nvidia-smi

# 指定GPU运行

--gpus "device=0"

docker run --gpus '"device=1,2"' nvidia/cuda:9.0-base nvidia-smi
docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:9.0-base nvidia-smi


 

docker镜像导入导出(windows)

解决方案参考:linux - Docker load and save: "archive/tar: invalid tar header" - Stack Overflow

原因:在不同的操作系统中运行 docker save 和 docker load 会导致出现这种问题,即使在不同的物理机上,相同的操作系统也可能出现。

解决方案:在 docker 保存时即添加参数 -o,参考官网docker save | Docker Documentation

在要保存 .tar 镜像的机器上运行:

 docker save automl_base:1.0.0 -o automl_base_1.0.0.tar

在需要上传的机器上运行:

docker load -i automl_base_1.0.0.tar 

Dockerfile

#FROM python:3.6.8

#RUN mkdir /mask_detective
#将本地代码添加到虚拟容器得code目录下
#ADD . /mask_detective
#设置为工作路径
#WORKDIR /mask_detective
#安装库
#RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple \
    && python -m pip install --upgrade pip


FROM mask_detetive_base:1.0

COPY start.sh /mask_detective
COPY app /mask_detective/app

#暴露的端口
EXPOSE 8885
#镜像启动时执行的脚本
ENTRYPOINT ["sh","/mask_detective/start.sh"]

eg2:

FROM python:3.8

ENV TIME_ZONE Asia/Shanghai
RUN  sed -i 's/ports.ubuntu.com/mirror.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN  sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list

ADD auto_test /auto_test
WORKDIR /auto_test

RUN apt-get update -y
RUN apt-get install -y --no-install-recommends ffmpeg vim tzdata  \
    && ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata \
    && apt-get clean \
    && rm -rf /tmp/* /var/ca
RUN pip install -r /auto_test/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
ENTRYPOINT ["/bin/bash", "/auto_test/start.sh"]

 

 启动脚本 


为什么docker运行后就自动退出了

docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker 容器pid挂了,那么docker容器便会直接退出。

docker run的时候把command做为容器内部命令,如果你使用nginx,那么nginx程序将后台运行,这个时候nginx并不是pid为1的程序,而是执行的bash,这个bash执行了nginx指令后就挂了,所以容器也就退出了。

加 tail  或者 /bin/bash

#!/bin/bash
nohup python manage.py  > /路径/app.log 2>&1 & tail -f /路径/app.log
#!/bin/bash
cd ./src
./scripts/start.sh &
/bin/bash

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值