一、docker常用的简单命令
(1)查看目前的镜像
docker images
(2)查看目前的容器
docker container ls
(3)查看镜像,容器占用情况
docker system df
(4)进入容器内部
docker exec -it id /bin/bash
(5)停止容器
docker stop id
注释:id表示CONTAINER ID,指的是运行中的容器。
镜像与容器的理解:镜像存在与磁盘中,类似于一个python文件。容器存在于内存中,类似于一个正在运行的python文件。
二、完完整整的使用Dockerfile构建镜像
(1)在准备好的目录下,vim Dockerfile,可以参考我的:
FROM hx_congestion:v1.4.2
ENV REFRESH_DATE 2019-12-01
USER root
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --chown=root:root ./ /home/project/
# 目录设置
RUN mkdir -p /data/
RUN chown root:root /data/ && chmod -R 777 /data/
RUN mkdir -p /model/
RUN chown root:root /model/ && chmod -R 777 /model/
# 容器启动命令
WORKDIR /home/project
RUN chmod +x run_sh.sh
ENTRYPOINT ["/bin/bash","-c","/bin/bash run_sh.sh"]
USER root
(2)我们需要在这个目录下放需要执行的文件,并且再创建一个run_sh.sh文件,这个文件可以去执行我们需要的文件。比如说我们需要使用finetune.py文件,那就再sh中写入:
#!/bin/bash
cd /home/project
export CUDA_VISIBLE_DEVICES="1"
nohup uvicorn finetune:app --host 0.0.0.0 --port 5003 --workers 0 >imageLog.out &
/bin/bash
(3)使用这个文件,建立我们的镜像。
docker build -t finetune:v1 .
(3)查看构造的镜像,发现出现了一个新镜像
docker images
(4)使用我们的镜像构造容器
docker run --gpus all -p 8010:5003 --restart=always --user root -d -it finetune:v1
(5)查看构造的容器,可以看见ID号
正在运行的:
docker container ls
全部的容器:
docker ps -a
(6)进入容器,需要用到ID号
docker exec -it ID /bin/bash
(7)停止运行中的容器
docker stop ID
(8)退出正在使用的容器
exit
三、改造镜像
(1)首先运行镜像形成容器,容器会首先执行我们dockerfile中写到的run_sh.sh文件。
docker run --gpus all -p 8010:5003 --restart=always --user root -d -it finetune:v1
(2)查看构造出的镜像
docker container ls
(3)进入镜像
docker exec -it ID /bin/bash
(4)改造镜像
就跟在Linux中,修改文件一模一样
(5)容器打包成镜像
docker commit ID finetune:v2
不过还是建议在构造镜像之前,就把文件修改好,省的后面麻烦。