docker的使用手册

0. 参考

  1. docker搭建完全分布式CDH(docker通信):https://blog.csdn.net/secretWHD/article/details/121002710?spm=1001.2014.3001.5502

  2. docker 搭建 CDH:https://blog.csdn.net/secretWHD/article/details/120318578?spm=1001.2014.3001.5502

  3. docker常用命令(写的不错)https://blog.csdn.net/a1058926697/article/details/125026067

  4. java应用用docker打包:https://blog.csdn.net/maxinchun0215/article/details/129145867

  5. docker常用:

image-20230402164436918

  1. docker网络参考:https://www.cnblogs.com/sxy-blog/p/17916505.html

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镜像

编写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

制作镜像

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启动参数及其说明:

  1. -d:以“分离”模式启动容器(后台运行)。
  2. --name:为容器指定名称。
  3. -e:设置环境变量,可以多次使用此选项来设置多个环境变量。
  4. -p:发布容器的端口到宿主机,格式为“宿主机端口:容器端口”。
  5. -v:挂载卷,格式为“[宿主机目录:]容器目录[:选项]”,默认是读写模式,如果指定为只读可以用“:ro”。
  6. --network:指定容器使用的网络。
  7. --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

https://www.cnblogs.com/mashuai-191/p/12558742.html

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
posted @ 2024-08-29 16:28  付十一。  阅读(1)  评论(0)    收藏  举报