docker
目录
参考资料:
- ubuntu 上 Docker 的下载和使用 | CSDN
- docker 官网文档
- 菜鸟教程 docker | 菜鸟教程
- Docker 使用指南 | 知乎
- 🎯 备份和迁移数据 - Docker 快速入门
- 【GeekHour】30 分钟 Docker 入门教程_哔哩哔哩_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
参考资料: