docker的使用手册
0. 参考
-
docker搭建完全分布式CDH(docker通信):https://blog.csdn.net/secretWHD/article/details/121002710?spm=1001.2014.3001.5502
-
docker 搭建 CDH:https://blog.csdn.net/secretWHD/article/details/120318578?spm=1001.2014.3001.5502
-
docker常用命令(写的不错):https://blog.csdn.net/a1058926697/article/details/125026067
-
java应用用docker打包:https://blog.csdn.net/maxinchun0215/article/details/129145867
-
docker常用:

1. Docker的安装
1.1 ubantu安装docker
官网(engine on ubantu):https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository
desktop on ubantu : https://docs.docker.com/desktop/install/ubuntu/
# 先安装服务器版
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
# 再安装desktop版
sudo apt install gnome-terminal
sudo apt remove docker-desktop
rm -r $HOME/.docker/desktop
sudo rm /usr/local/bin/com.docker.cli
sudo apt purge docker-desktop
# 下载deb包
sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb
1.2 windows11安装docker
# docker win11版本下载:https://www.docker.com/products/docker-desktop/
2. 制作Docker镜像
-
dockerfiel制作镜像参考(亲测可用):https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP
-
视频(亲测可用):https://www.bilibili.com/video/BV11L411g7U1?p=4&vd_source=824d8f61906b474c0974b8dce18a69fd
编写dockerfile
## 到工程目录下编写dockerfile
FROM node:11
MAINTAINER fubo
# 复制代码
ADD . /app
# 设置容器启动后的默认运行目录
WORKDIR /app
# 运行命令,安装依赖
# RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。
# 例如 RUN npm install && cd /app && mkdir logs
RUN npm install --registry=https://registry.npm.taobao.org
# CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。
# 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。
# 例如 CMD cd /app && ./start.sh
CMD node app.js
CMD npm install axios
制作镜像
-
从dockerfile制作镜像
-
命令参考:https://docs.docker.com/engine/reference/commandline/build/
cd 工程有dockerfile的工程目录
docker build -t vuedemo7:v1 .# -t 设置镜像名字和版本号 # 后面的.千万别忘记了
docker build -f /root/cdh_dockerfile -t server/bashimage . && docker images ## docker bulid -f 指定路径
docker exec -it 容器名 /bin/bash ## 操作容器后exit
docker stop 容器id
docker commit -m '镜像描述' -a '制作者' 容器名 镜像名 ## 制作成镜像,将容器中的内容制作成目标镜像
docker commit mycontainer myimage:v1.0
split -b 2048M archive.tar archive_part_
3. 制作容器网络
3.1 生产版
docker network create --subnet=172.18.0.0/16 ruantong_network
docker network ls
docker network create --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1 mynet # 完整版
3.2 测试版
sudo docker network create --subnet=127.127.0.0/16 staticnet ## 1、创建自定义网络类型,并且指定网段
## 通过docker network ls可以查看到网络类型中多了一个staticnet
sudo docker run -it --name test --net staticnet --ip 127.127.0.2 centos /bin/bash ## 2、使用新的网络类型创建并启动容器
docker inspect <containtor_id> ## 3、查看容器ip
docker network ls ## 查询所有网络
docker network inspect bridge ## 查询网络具体信息
docker network create van ## 创建网络
docker network rm van ## 删除网络s
docker network connect 网络名 正在运行的容器 ## 将正在运行的容器连接到网络
docker run -itd --network=网络名 即将启动的容器 ## 启动时将容器连接到网络
docker network connect --ip 10.10.10.10 网络名 容器 ## 指定容器的IP地址
docker network create --subnet=192.168.43.202/16 staticnet ## 亲测可用
docker network connect --ip 192.168.43.202 staticnet 4e0849fdb442 ## 亲测可用
4. 镜像常用命令
启动镜像
docker run -itd \
--device=/dev/davinci5 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /var/log/npu/:/usr/slog \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /home/ruantong/workplace/test:/home/ruantong/workplace/test \
-v /home/ruantong/model:/home/ruantong/model
--network=ruantong_network \
--ip 172.18.0.3 \
--name ruantong_llmPerTest_v20240627 ac5ce4f4fb52 /bin/bash
## -device 指定显卡
## -p 映射容器内端口到宿主机
## --name 容器名字
## -d 后台运行
## -v /home/fubo/桌面/WorkSpace/脚本自动化/vuedemo7:/app 挂载到制定目录(宿主机目录:容器目录)
## ac5ce4f4fb52 指定镜像
docker启动参数大全
Docker启动参数可以根据需要进行配置,以下是一些常见的Docker启动参数及其说明:
-d:以“分离”模式启动容器(后台运行)。--name:为容器指定名称。-e:设置环境变量,可以多次使用此选项来设置多个环境变量。-p:发布容器的端口到宿主机,格式为“宿主机端口:容器端口”。-v:挂载卷,格式为“[宿主机目录:]容器目录[:选项]”,默认是读写模式,如果指定为只读可以用“:ro”。--network:指定容器使用的网络。--restart:容器退出时的重启策略,可选值包括“no”(默认,不重启)、“on-failure[:max-retry]”(如果容器以非0状态码退出,则尝试重新启动容器,可选地限制尝试重启的次数)、“always”(如果容器停止了,总是尝试重启)、“unless-stopped”(在容器退出时总是重启容器,但是不考虑Docker守护进程启动时就已经停止了的容器)。
此外,Docker启动参数还可以包括其他选项,如指定CPU和内存的限制、设置容器的用户、工作目录等。具体参数可以根据实际需求进行选择和配置。
请注意,Docker的启动参数可能因版本不同而有所差异。因此,在使用特定参数之前,建议查阅Docker的官方文档或运行docker run --help命令以获取最准确的信息。
另外,除了上述启动参数外,Docker还提供了一些命令行选项来控制Docker守护进程(daemon)的行为。这些选项可以在启动Docker服务时指定,例如通过修改Docker的配置文件(通常为/etc/docker/daemon.json)或使用命令行参数来启动Docker守护进程。这些选项可以控制诸如日志级别、存储驱动、默认网络设置等高级配置。但是,这些选项通常需要管理员权限才能更改,并且应该谨慎操作以避免对系统造成不良影响。
docker常用命令
docker images # 查看镜像
docker rmi bf756fb1ae65 # 删除镜像
sudo docker ps -a # 查询所有docker容器
docker rm CONTAINER_ID # 删除docker容器
docker stop CONTAINER ID # 停止容器
docker start CONTAINER ID # 启动容器
sudo docker cp 容器ID:/etc/mysql/my.cnf /home/tom/ #将容器中的文件拷贝出来
sudo docker cp /home/tom/my.cnf 容器ID:/etc/mysql/ #将容器中的文件拷贝回去
docker exec -it container_id /bin/bash ## 进入容器
5. docker封装
5.1 镜像封装
docker stop my-container
docker commit d36625f52305 linfer:linfer # docker commit -m '镜像描述' -a '制作者' 容器名 镜像名
docker images
docker save -o <filename>.tar <image_name>:<tag> # 保存到文件,-o: 加载到本地目录
## 或者
docker save REPOSITORY:TAG > 目标.tar
# tar包切割
split -b 2048M llm_train.tar llm_train_part_
5.2 镜像加载
# 保证docker版本一致
docker load --input vuedem7.tar
## 或者
docker load < vuedem7.tar
6. 查看docker信息
# 查看设备信息
docker inspect <container_id_or_name> | grep -i "device"
docker inspect --format='{{json .HostConfig.Devices}}' d36625f52305
## 查看网络信息
docker inspect <containtor_id>
docker inspect -f '{{.HostConfig.NetworkMode}}' d36625f52305
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' d36625f52305
7. 其他命令
进入容器正在执行的终端
docker attach 容器id
exit # 停止容器并退出(后台方式运行则仅退出)
Ctrl+P+Q # 不停止容器退出
docker官方镜像仓库
进入我的主页,创建自己的镜像仓库
## 登陆docker
docker login -u fubobo
## 打上标签,名字必须跟你注册账号/创建的仓库一样
docker tag hello-world fubobo/rep_test:v1
## 上传镜像,没有这个目录会自动创建
docker push fubobo/rep_test:v1
## 部署的时候可以直接使用这个镜像
docker run -dp 8080:8080 username/test:v1
Docker降级
参考:https://zhuanlan.zhihu.com/p/307945574?utm_id=0
参考2:https://blog.csdn.net/qq_18602593/article/details/127042124
离线安装:https://www.cnblogs.com/ljt0822/p/14182680.html
sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get remove -y docker-ce docker-ce-cli ## 卸载
Docker启动报错
sudo docker run hello-world ## docker测试
ERRO[0000] error waiting for container: context canceled
mountpoint for cgroup not found
docker启动报错mountpoint for cgroup not found
http://blog.winkidney.com/index.php/archives/10/
亲测可用:https://blog.csdn.net/weixin_47023868/article/details/116025586
## 报错:mountpoint for cgroup not found
sh /opt/docker/docker_int.sh
mount -t cgroup
#!/bin/sh
# Copyright 2011 Canonical, Inc
# 2014 Tianon Gravi
# Author: Serge Hallyn <serge.hallyn@canonical.com>
# Tianon Gravi <tianon@debian.org>
set -e
# for simplicity this script provides no flexibility
# if cgroup is mounted by fstab, don't run
# don't get too smart - bail on any uncommented entry with 'cgroup' in it
if grep -v '^#' /etc/fstab | grep -q cgroup; then
echo 'cgroups mounted from fstab, not mounting /sys/fs/cgroup'
exit 0
fi
# kernel provides cgroups?
if [ ! -e /proc/cgroups ]; then
exit 0
fi
# if we don't even have the directory we need, something else must be wrong
if [ ! -d /sys/fs/cgroup ]; then
exit 0
fi
# mount /sys/fs/cgroup if not already done
if ! mountpoint -q /sys/fs/cgroup; then
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
fi
cd /sys/fs/cgroup
# get/mount list of enabled cgroup controllers
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
mkdir -p $sys
if ! mountpoint -q $sys; then
if ! mount -n -t cgroup -o $sys cgroup $sys; then
rmdir $sys || true
fi
fi
done
# example /proc/cgroups:
# #subsys_name hierarchy num_cgroups enabled
# cpuset 2 3 1
# cpu 3 3 1
# cpuacct 4 3 1
# memory 5 3 0
# devices 6 3 1
# freezer 7 3 1
# blkio 8 3 1
# enable cgroups memory hierarchy, like systemd does (and lxc/docker desires)
# https://github.com/systemd/systemd/blob/v245/src/core/cgroup.c#L2983
# https://bugs.debian.org/940713
if [ -e /sys/fs/cgroup/memory/memory.use_hierarchy ]; then
echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy
fi
exit 0
浙公网安备 33010602011771号