docker 
目录
参考资料:
- ubuntu 上 Docker 的下载和使用 | CSDN
- docker 官网文档
- 菜鸟教程 docker | 菜鸟教程
- Docker 使用指南 | 知乎
- 🎯 备份和迁移数据 - Docker 快速入门
- 【GeekHour】30 分钟 Docker 入门教程_哔哩哔哩_bilibili | BiliBili
- Docker - 实现本地镜像的导出、导入(export、import、save、load)
- docker 进入,退出容器命令_进入 r 后怎样退到 docker 里面 | CSDN
笔记 
docker 和虚拟机不同,虚拟机需要模拟底层的系统,docker 不需要,docker 是容器技术的实现(docker≠ 容器技术)
docker 是 c/s 结构的,由 docker daemon 作为 server 管理镜像(image)和容器(containers)的运行,客户端是单独的程序,可以是命令行的,也可以带 UI 的,有 web 版的 UI 比如 Portainer | Github
docker 有镜像和容器的概念,镜像是一个只读的模板,容器是一个运行时的实例,一个镜像可以生成多个容器。
安装 
Docker 引擎 + Docker Desktop 
首先推荐官方的安装方法,并直接连同 docker 桌面程序一起安装
在官方页面 | Ubuntu 下安装获取.deb安装包
bash
sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb
# 打开 docker Desktop
systemctl --user start docker-desktop
# 开机自启
systemctl --user enable docker-desktop仅安装 docker engine 
参考资料:
bash
# 删除旧版本和依赖
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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
# Install Docker Engine:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin测试安装 
bash
# 查看 docker 版本
docker --version
# 查看 docker compose 版本
docker compose version
# 查看 docker 信息
docker version
# 运行一个测试容器
docker run hello-world使用 
镜像 | images 
bash
# 查看本地镜像
docker images
# 拉取一个镜像
docker pull <image>:<tag>
# 导出一个镜像
docker save -o <filename.tar> <image>
# 导入一个镜像
docker load -i <tar文件>
# 删除一个镜像
docker rmi <image>运行 
使用 run 命令可以创建一个已某个镜像为基础的容器
bash
# tag 可以省略,默认为 latest
docker run [OPTIONS] <image>:<TAG>  [COMMAND] [ARG...]参数请放在镜像名前面
常用运行参数:
- -d后台运行
- -p端口映射- hostPort:containerPort- eg: -p 8080:80将容器的 80 端口映射到主机的 8080 端口
- eg2: -p 8080-8085:80将容器的 80 端口映射到主机的 8080-8085 端口
- eg3: -p 8080:80/udp将容器的 80 端口映射到主机的 8080 端口,并且设置为允许 udp 协议
 
- eg: 
- --name容器名
- -v挂载卷- hostPath:containerPath- eg: -v /data:/data将主机的/data目录挂载到容器的/data目录
- eg2: -v /data:/data:ro将主机的/data目录挂载到容器的/data目录,并且只读
- eg3: -v /data:/data:z将主机的/data目录挂载到容器的/data目录,并且设置为 z 类型
 
- eg: 
- -e环境变量- eg: -e MYSQL_ROOT_PASSWORD=123456设置 mysql 的 root 密码
- eg2: -e TZ=Asia/Shanghai设置时区
- eg3: -e LANG=zh_CN.UTF-8设置语言
 
- eg: 
- --restart重启策略- no|on-failure[:max-retries]|always|unless-stopped
- --network网络模式- bridge|host|none
容器 | containers 
bash
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 查看某个容器的详细信息
docker inspect <container>
# 暂停一个容器
docker pause <container>
# 恢复一个容器
docker unpause <container>
# 停止一个容器
docker stop <container>
# 启动一个容器
docker start <container>
# 删除一个容器
docker rm [-f] <container> # -f 强制删除,即使容器在运行
# 进入一个容器
docker exec -it <container> /bin/bash
# 退出镜像
exit 或者 Ctrl+P+Q
# 导出容器
docker export <container> > <filename>.tar
# 导入容器
docker import <filename>.tar <image>:<tag>使用 export 导出的容器需要用 import 导入,而用 save 导出的镜像需要用 load 导入,混用会报错
持久化 
参考资料:
bind mount 方式用绝对路径 -v D:/code:/app
volume 方式,只需要一个名字 -v db-data:/app
网络 
参考资料:
代理 
当前国内难以访问 docker hub,各大镜像网站也纷纷关闭,只能使用代理来访问
因为 docker 是跑在守护进程里的,也就是跑在 systemd 下的,所以我们可以通过 systemd 来设置代理
bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
sudo vim /etc/systemd/system/docker.service.d/proxy.conf输入以下内容:
conf
[Service]
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"然后重启 docker 服务
bash
sudo systemctl daemon-reload
sudo systemctl restart docker参考资料:
