Ubuntu镜像下载https://mirrors.huaweicloud.com/ubuntu-releases/docker安装# 第一步、卸载旧版本docker sudo apt-get remove docker docker-engine docker.io containerd runc # 第二步、更新及安装软件 luhost:~$ curl -fsSL https://get.docker.com -o get-docker.sh luhost:~$ sudo sh get-docker.sh # Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de sh -c apt-get update -qq /dev/null sh -c DEBIAN_FRONTENDnoninteractive apt-get install -y -qq apt-transport-https ca-certificates curl /dev/null sh -c install -m 0755 -d /etc/apt/keyrings sh -c curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg gpg: WARNING: unsafe ownership on homedir /home/lu/.gnupg sh -c chmod ar /etc/apt/keyrings/docker.gpg sh -c echo deb [archamd64 signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu bionic stable /etc/apt/sources.list.d/docker.list sh -c apt-get update -qq /dev/null sh -c DEBIAN_FRONTENDnoninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin /dev/null sh -c docker version Client: Docker Engine - Community Version: 24.0.2 API version: 1.43 Go version: go1.20.4 Git commit: cb74dfc Built: Thu May 25 21:52:13 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 24.0.2 API version: 1.43 (minimum version 1.12) Go version: go1.20.4 Git commit: 659604f Built: Thu May 25 21:52:13 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.21 GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8 runc: Version: 1.1.7 GitCommit: v1.1.7-0-g860f061 docker-init: Version: 0.19.0 GitCommit: de40ad0 To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user: dockerd-rootless-setuptool.sh install Visit https://docs.docker.com/go/rootless/ to learn about rootless mode. To run the Docker daemon as a fully privileged service, but granting non-root users access, refer to https://docs.docker.com/go/daemon-access/ WARNING: Access to the remote API on a privileged Docker daemon is equivalent to root access on the host. Refer to the Docker daemon attack surface documentation for details: https://docs.docker.com/go/attack-surface/ luhost:~$ # 第三步、查看docker是否安装完成 luhost:~$ docker -v Docker version 24.0.2, build cb74dfc # 第四步、查看是否成功启动docker luhost:~$ systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2024-05-11 15:17:44 CST; 1min 39s ago Docs: https://docs.docker.com Main PID: 15493 (dockerd) Tasks: 10 CGroup: /system.slice/docker.service └─15493 /usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock 5月 11 15:17:43 host systemd[1]: Starting Docker Application Container Engine... 5月 11 15:17:43 host dockerd[15493]: time2024-05-11T15:17:43.43530903508:00 levelinfo msgStarting up 5月 11 15:17:43 host dockerd[15493]: time2024-05-11T15:17:43.44175409508:00 levelinfo msgdetected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: /run 5月 11 15:17:43 host dockerd[15493]: time2024-05-11T15:17:43.64010283608:00 levelinfo msgLoading containers: start. 5月 11 15:17:44 host dockerd[15493]: time2024-05-11T15:17:44.21927095008:00 levelinfo msgLoading containers: done. 5月 11 15:17:44 host dockerd[15493]: time2024-05-11T15:17:44.46153997608:00 levelwarning msgWARNING: No swap limit support 5月 11 15:17:44 host dockerd[15493]: time2024-05-11T15:17:44.46169951508:00 levelinfo msgDocker daemon commit659604f graphdriveroverlay2 version24.0.2 5月 11 15:17:44 host dockerd[15493]: time2024-05-11T15:17:44.46296966408:00 levelinfo msgDaemon has completed initialization 5月 11 15:17:44 host systemd[1]: Started Docker Application Container Engine. 5月 11 15:17:44 host dockerd[15493]: time2024-05-11T15:17:44.57556701308:00 levelinfo msgAPI listen on /run/docker.sock luhost:~$docker常用指令查看本地镜像docker images docker images -q # 查看所有镜像id搜索镜像docker search 镜像名称查看容器docker ps # 查看正在运行的容器 docker ps -a # 查看所有容器拉取指定镜像docker pull [images]:[version] # 例如docker pull ubuntu:14.04保存镜像为离线文件# 保存镜像为离线文件 docker save -o ubuntu14.04.tar ubuntu:14.04加载镜像离线文件docker load -i ubuntu14.04.tar创建并启动容器docker run 参数创建容器并进入交互模式sudo docker run -it ubuntu:14.04 bash # 这个命令会启动一个Ubuntu容器并为您提供一个shell 来交互shell 终端退出则容器会关闭。创建容器后台运行sudo docker run -d --name my_ubuntu ubuntu:14:04 # 这个命令会以守护进程模式-d启动一个Ubuntu容器并将其命名为 my_ubuntu。 # 关闭终端容器不会退出要想进入交互模式需要docker exec指令例子luhost:~$ cat run_docker.sh #/bin/bash export MY_CONTAINERubuntu14.04-whoami numsudo docker ps -a|grep -w $MY_CONTAINER$|wc -l echo $num $MY_CONTAINER if [ 0 -eq $num ];then # --nethost使容器共享宿主机的网络接口。--ipchost使容器可以访问宿主机的 IPC 资源。--pidhost : 使容器可以访问宿主机的进程。 # --privileged给予容器扩展的权限允许容器访问宿主机上的所有设备包括GPU并运行一些通常被禁止的操作. sudo docker run \ --nethost --ipchost --pidhost \ -it --privileged --name $MY_CONTAINER \ -v $PWD:/home/share ubuntu:14.04 bash else sudo docker start $MY_CONTAINER sudo docker exec -ti $MY_CONTAINER /bin/bash fi luhost:~$ 参数--nethost使容器使用宿主机的网络命名空间这意味着容器将共享宿主机的网络接口。--ipchost使容器使用宿主机的 IPC 命名空间这意味着容器可以访问宿主机的 IPC 资源。--pidhost使容器使用宿主机的 PID 命名空间这意味着容器可以访问宿主机的进程。-it以交互模式-i运行容器并为容器分配一个伪终端-t。--privileged给予容器扩展的权限允许容器访问宿主机上的所有设备并运行一些通常被禁止的操作。--name $MY_CONTAINER指定容器的名称为环境变量MY_CONTAINER的值。-v $PWD:/home/lu将当前工作目录$PWD挂载到容器中的/home/lu目录。这允许您从宿主机访问和修改容器中的文件。ubuntu:14.04使用ubuntu:14.04Docker 镜像来创建容器。这个镜像是一个基于 Ubuntu 14.04 的环境。bash容器启动后执行的命令这里是一个 Bash shell允许您在容器中执行命令。注意脚本里加了--privileged这可能导致容器内/dev/nvidia*设备权限异常或者与 NVIDIA Container Toolkit 的安全策略冲突。--privileged虽然给了所有能力有时反而会让驱动通信链路出错。比如报错ERROR: The NVIDIA Driver is present, but CUDA failed to initialize. GPU functionality will not be available. [[ Unable to initialize CUDA driver (error ???) ]] Failed to detect NVIDIA driver version.建议把--privileged换成--gpus allluhost:~$ cat run_docker.sh #/bin/bash export MY_CONTAINERubuntu14.04-whoami numsudo docker ps -a|grep -w $MY_CONTAINER$|wc -l echo $num $MY_CONTAINER if [ 0 -eq $num ];then # --nethost使容器共享宿主机的网络接口。--ipchost使容器可以访问宿主机的 IPC 资源。--pidhost : 使容器可以访问宿主机的进程。 sudo docker run --gpus all \ --nethost --ipchost --pidhost \ -it --name $MY_CONTAINER \ -v $PWD:/home/share ubuntu:14.04 bash else sudo docker start $MY_CONTAINER sudo docker exec -ti $MY_CONTAINER /bin/bash fi luhost:~$启动容器# 通过docker start命令来启动已部署的容器服务。 docker start 容器名称进入容器# 容器启动后进入终端交互模式 docker exec 参数停止容器# 非交互模式下通过docker stop命令来停止已部署的容器服务。 docker stop 容器名称 # 如果创建容器的同时进入到交互模式下通过exit退出终端来停止容器 # 如果是使用 docker exec进入的交互模式 # 那么退出容器只需要关闭终端或输入exit 命令不会关闭容器必须通过docker stop命令来停止。删除容器docker rm 容器名称删除镜像docker rmi [imageID]