DockerCommand - wxtt-github/blog GitHub Wiki
FROM node:14-alpine
COPY index.js /index.js
# 另一种可选的运行命令格式
# CMD [ "node", "/index.js" ]
CMD node /index.js
docker build -t <镜像名> .
docker images
docker image ls
注意:从Docker Hub拉取的镜像名可能包括账号名
docker run <镜像名>
注:你可以在上传前先标记版本号为latest,这样上传时也不需要加版本号了,默认是latest
# 登录Docker Hub账号
docker login
# 标记镜像
docker tag <镜像名> <账号名>/<镜像名>:<版本号>
# 上传镜像
docker push <账号名>/<镜像名>:<版本号>
例如:
自定义版本号
docker tag hello_docker wxtt/hello_docker:v1.0
docker push wxtt/hello_docker:v1.0
默认版本号为latest
docker tag hello_docker wxtt/hello_docker:latest
docker push wxtt/hello_docker
注意:有些镜像的拉取不需要版本号也行,不加版本号就是默认版本号为latest,前提是镜像源的版本号得有latest,否则会报错
docker pull <账号名>/<镜像名>:<版本号>
如果承载镜像的容器还在的话,是无法删除镜像的,需要先把容器删掉
不止可以根据ID删除,根据名字删除也可以
# 查看所有容器的状态
docker ps -a
# 删除容器,只需要输入容器ID前3位即可
docker rm <容器ID>
# 查看镜像信息
docker images
# 删除镜像,只需要输入镜像ID前3位即可
docker rmi <镜像ID>
docker compose up -d
# 停止容器运行,只需要输入容器ID前3位即可
docker stop <容器ID>
# 停止所有正在运行的容器,运行以下命令:
docker stop $(docker ps -aq)
# 开启自启动
docker update –-restart=always <容器ID>
# 关闭自启动
docker update --restart=no $(docker ps -q)
# 保存镜像
docker save <镜像名>:<版本号> -o <镜像名>.tar
例如
docker save java:8 -o java.tar #将java:8的镜像导出成tar文件
# 加载镜像
docker load -i <镜像名>.tar
sudo systemctl restart docker
# 拉取Ubuntu 22.04 + CUDA的基础镜像
docker pull nvidia/cuda:12.2.0-base-ubuntu22.04
# 语法:docker save -o [保存文件名] [镜像名]:[标签]
docker save -o cuda-12.2.0-base-ubuntu22.04.tar nvidia/cuda:12.2.0-base-ubuntu22.04
# 语法:docker load -i [文件名]
docker load -i cuda-12.2.0-base-ubuntu22.04.tar
# 启动容器,进入命令行模式
docker run -it --gpus all \
--name gpu-server-dev \ # 将容器命名为gpu-server-dev
-v $(pwd):/app \ # 挂载当前目录到容器的/app,注意是pwd下的文件
-p 33355:33355 \ # 暴露端口,左边是主机端口,右边是容器端口
nvidia/cuda:12.2.0-base-ubuntu22.04 bash # 进入容器内部
# 更新软件源
apt-get update
# 安装必要工具
apt-get install -y wget git build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libgl1 libglib2.0-0
# 如果是conda环境
conda install -c conda-forge libstdcxx-ng
# 安装Python 3.10
apt-get install -y python3.10 python3.10-dev python3.10-venv python3-pip
# 设置Python 3.10为默认
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
# 选择3.10
update-alternatives --config python3
# 验证Python版本
python3 --version # 应显示Python 3.10.x
# 升级pip
pip install --upgrade pip
pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
# 验证GPU是否可用
nvidia-smi
# 在Python中验证CUDA是否可用
python3 -c "import torch; print(torch.cuda.is_available())"
# 停止并删除容器
docker stop gpu-server-dev
docker rm gpu-server-dev
# 复制文件基本语法
docker cp <主机文件路径> <容器名或ID>:<容器内目标路径>
# 实际示例(将主机的data.txt复制到容器的/app目录)
docker cp /path/on/host/data.txt my-container:/app/data.txt
# 复制整个目录
docker cp /path/on/host/folder/ my-container:/app/folder/
# 提交容器为新镜像(格式:docker commit [容器ID] [新镜像名]:[标签])
docker commit my-container my-custom-image:v1.0
# 进入运行中的容器的命令行
docker exec -it <容器名称或容器ID> /bin/bash
Ctrl+P,Ctrl+Q,不停止容器
# -d为后台运行
docker run -d --gpus all --name <容器名> -p 33355:33355 <镜像名:版本> bash -c "cd /APP && python3 app.py"