docker学习笔记
学习要求
- 有可以稳定访问
github
的代理; - 最好是
Linux
系统,windows系统可以用wsl子系统。
在 ubuntu 上安装 docker
- 卸载之前的 docker 并安装需要的包:
1
2sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt install curl software-properties-common gnupg lsb-release - 添加并更新 apt 源:
1
2
3
4
5
6
7#添加 Docker 官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#Docker官方源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update; sudo apt-get update #更新源 - 安装 docker:
1
2
3sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker version #查看Docker版本
sudo systemctl status docker #查看Docker运行状态 - 让用户能以 root 权限来运行 docker 指令:
1
2
3
4sudo groupadd docker # 添加docker用户组,一般已存在,不需要执行
sudo gpasswd -a $USER docker # 将登陆用户加入到docker用户组中
newgrp docker # 更新用户组
docker version # 测试docker命令是否可以使用sudo正常使用
当然,由于安装过程可能会发生变化,这里更建议去官网查看安装教程,网址在这。
给 docker 配置代理
参考自资料。
我使用的是clash for windows
代理,稳定的免密代理为http://127.0.0.1:7890
,端口号在cfw的配置页有。
- Dockerd 代理
在执行 docker pull 时,是由守护进程 dockerd 来执行。因此,代理需要配在 dockerd 的环境中。然后在文件中添加 Service:1
2sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf最后重启 docker 服务即可快速拉取镜像。1
2
3
4
5sudo vim /etc/systemd/system/docker.service.d/proxy.conf
# 添加以下内容
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"1
2
3
4sudo systemctl daemon-reload
sudo systemctl restart docker
# 尝试拉取一个6G的镜像,看看速度怎么样
docker pull pytorch/pytorch:2.4.0-cuda12.1-cudnn9-devel
docker 常用指令
帮助启动
作用 | 命令 |
---|---|
启动docker | systemctl start docker |
停止docker | systemctl stop docker |
重启docker | systemctl restart docker |
查看docker状态 | systemctl status docker |
查看docker概要信息 | docker info |
查看帮助文档 | docker --help |
查看具体命令帮助文档 | docker 具体命令 --help |
镜像命令
-
docker images
列举出下载镜像的相关信息。
REPOS:镜像仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
-
docker search / pull 项目名称
在远程库中搜索某个项目的信息 & 从远程库中拉取某个项目。 -
docker system df
查看镜像、容器和本地卷的数量、活动的数量、大小等等。
-
docker rmi ImageID
删除特定的镜像。
-f:强制删除
容器命令
-
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name="容器名字"
:给容器指定一个名字-d
:后台运行容器并返回容器ID-i
:以交互模式运行容器,通常与-t
一起使用-t
:给容器分配一个伪输入终端-P
:随机端口映射-p
:指定端口映射例
:docker run -it --name test ubuntu:20.04
启动ubuntu的docker
-
docker ps [OPTIONS]
查看正在运行的容器信息。
-a
:列出所有正在运行和操作过的容器-l
:显示最近创建的容器-n
:显示最近创建的n个容器-q
:静默模式,只显示容器编号
-
exit & ctrl+p+q
exit
会使容器退出并停止,而ctrl+p+q
只会退出容器。 -
docker start/restart/stop/kill 容器ID或容器名
启动/重启/停止/强行停止 容器。 -
docker rm 容器ID或容器名
删除已停止的容器。 -
docker logs 容器ID
查看容器的日志。 -
docker top 容器ID
查看容器中运行的进程。 -
docker inspect 容器ID
查看容器内部运行细节,输出一个json格式的文字。 -
docker exec -it 容器ID /bin/bash
重新进入容器,并以命令行交互。 -
docker cp 容器ID:容器内文件路径 主机路径
将容器内文件拷贝到主机的指定路径上。 -
docker export 容器ID > name.tar
把容器全部导出为name.tar文件(镜像)。 -
cat name.tar | docker import - 镜像用户/镜像名称:版本号
00:02 / 06:15
1080P 高清
倍速
1人正在看
,
已装填 219 条弹幕

docker 容器数据卷
备份docker容器内的重要数据(数据卷)到本机目录。
在运行容器时加上 --privileged=true
。
命令:docker run --privileged=true -v /宿主机绝对路径目录:容器内目录 镜像名
可以简单理解为两个目录下的文件是同步的。可以通过docker inspect
来查看。
在运行了docker run -it --privileged=true --net=host -v /tmp/host_data:/tmp/docker_data ubuntu
后,inspect
会显示以下信息:
1 |
|
Dockerfile
Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像。
关键字含义
FROM
:基础镜像,当前镜像是基于哪个镜像的;RUN
:容器构建时运行的命令,有shell和exec两种格式;WORKDIR
:容器创建后默认的工作目录;ENV
:在构建镜像过程中设置环境变量;(例:ENV DEBIAN_FRONTEND=noninteractive)COPY
:将宿主机文件复制到镜像内;ADD
:将宿主机路径下的文件拷贝进镜像,并能自动处理URL和解压tar安装包,约等于COPY
+解压;
构建镜像的命令
docker build [OPTIONS] PATH | URL | -
PATH
: 包含 Dockerfile 的目录路径或 .(当前目录)。URL
: 指向包含 Dockerfile 的远程存储库地址(如 Git 仓库)。-
: 从标准输入读取 Dockerfile。
常见参数:
-t
:后面接为构建的镜像指定名称和标签;
例子
以操作系统的Lab1为例。
1 |
|
新建文件Dockerfile,写入以上内容,然后运行 docker build -t lab1:1.0 .
即可,表示在当前目录下根据Dockerfile
文件创建一个lab1:1.0
的镜像。
Docker 网络
运行 docker 服务后,会产生一个 docker0
的虚拟网桥。管理容器间的互联及网络映射,容器IP变动时可通过服务名直接网络通信而不受影响。
常用命令
-
docker network ls
查看当前网络状态。 -
docker network inspect XXX
查看网络原数据。
网络模式
-
bridge
为每一个容器分配、设置IP,并将容器连接到docker0
虚拟网桥,默认为该模式;用--network bridge
指定。
docker 容器内部的IP是可能改变的! -
host
容器使用宿主机的IP和端口,并不虚拟出自己的网卡。用--network host
指定。