一、参考资料
-
1、B站视频
尚硅谷Docker实战教程 -
2、有心人整理的笔记
Docker笔记(周阳版) -
3、菜鸟教程
Docker 教程
以下是本人的折腾实践。
二、Docker的安装
- 2.1、使用清华源安装docker,清华源官方教程。
本人是在ubuntu20.04下安装的。- 1、如果你过去安装过 docker,先删掉:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
- 2、安装依赖:
sudo apt-get update sudo apt-get install ca-certificates curl gnupg
- 3、信任 Docker 的 GPG 公钥并添加仓库:
sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 4、开始安装
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 2.2、手动安装Docker(适用于无法联网的电脑)
- 1、打开清华大学docker-ce开源镜像。
- 2、选择操作系统。根据自己的系统选择,我这里选linux。
- 3、选择ubuntu版本,进入
dists/focal/pool/stable/amd64/
目录。 - 4、下载deb文件: Docker Engine, CLI, containerd, Docker Compose:
- containerd.io_{version}_{arch}.deb
- docker-ce_{version}_{arch}.deb
- docker-ce-cli_{version}_{arch}.deb
- docker-buildx-plugin_{version}_{arch}.deb
- docker-compose-plugin_{version}_{arch}.deb
- 5、安装deb
sudo dpkg -i ./containerd.io_{version}_{arch}.deb \ ./docker-ce_{version}_{arch}.deb \ ./docker-ce-cli_{version}_{arch}.deb \ ./docker-buildx-plugin_{version}_{arch}.deb \ ./docker-compose-plugin_{version}_{arch}.deb
- 2.3、如果你不想每次使用docker时都输入sudo,你可以将你的用户添加到docker组:
然后,你需要注销并重新登录,或者重新启动系统,以便更改生效。之后,你就可以直接使用Docker命令,不需要再加sudo。sudo usermod -aG docker $USER
三、Docker Hub镜像加速
如果执行docker pull
时,无法拉取到镜像,可以通过修改Docker Hub的源为国内源来进行加速。
-
3.1、临时使用指定的源拉取镜像,可使用:
docker pull 镜像名称 -–registry-mirror=国内镜像源地址
-
3.2、永久使用指定的源
- 1、需新增或编辑 Docker 的服务文件:
sudo vim /etc/docker/daemon.json
- 2、在该文件中添加以下内容:
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
-
3.3、重启 Docker 服务以应用更改:
sudo systemctl daemon-reload sudo systemctl restart docker
-
3.4、附上国内Docker Hub 镜像加速器列表:
镜像加速器 镜像加速器地址 是否专属加速器 是否其它加速 Docker 中国官方镜像 https://registry.docker-cn.com Docker Hub DaoCloud 镜像站 http://f1361db2.m.daocloud.io 可登录,系统分配 Docker Hub Azure 中国镜像 https://dockerhub.azk8s.cn Docker Hub、GCR、Quay 科大镜像站 https://docker.mirrors.ustc.edu.cn Docker Hub、GCR、Quay 阿里云 https://<your_code>.mirror.aliyuncs.com 需登录,系统分配 Docker Hub 七牛云 https://reg-mirror.qiniu.com Docker Hub、GCR、Quay 网易云 https://hub-mirror.c.163.com Docker Hub 腾讯云 https://mirror.ccs.tencentyun.com Docker Hub -
3.5、检查加速器是否生效
docker info
如果从结果中看到了如下内容,说明配置成功:
Registry Mirrors:[...] https://registry.docker-cn.com/
-
3.6、Docker Hub 镜像测速
使用镜像前后,可使用time
统计所花费的总时间。测速前先移除本地的镜像,如测试拉取ubuntu20.04的镜像:time docker pull ubuntu:20.04
四、Docker的卸载
- 4.1、卸载 Docker Engine, CLI, containerd, and Docker Compose packages:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
- 4.2、删除残留的配置文件
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
五、Docker的简单使用
# 拉取ubuntu20.04镜像:docker pull ubuntu:20.04# 以ubuntu20.04镜像运行一个容器:# 参数说明:# -i: 以交互式操作运行; -t: 以终端方式运行; -d: 后台运行;# -p 主机端口:容器端口 (建立主机和容器之间的端口映射);# --name: name (指定容器的名字);docker run -itd -p 15901:5901 --name ubuntu-test ubuntu:20.04 /bin/bash# 进入后台运行的容器docker exec -it ubuntu-test /bin/bash
六、Docker常用命令
-
6.1、帮助、启动类命令
- 1、启动docker
# 启动dokcer sudo systemctl start docker# 停止docker sudo systemctl stop docker# 查看docker状态 sudo systemctl status docker# 开机启动 sudo systemctl enable docker
- 2、查看docker信息
# 查看docker概要信息 docker info# 查看docker总体帮助文档 docker --help# 查看具体命令帮助 docker 具体命令 --help
-
6.2、镜像命令
- 6.2.1、列出本地主机上的镜像
# 查看已有镜像 docker images# 列出镜像所有信息 docker images -a# 只列出镜像id docker images -q
- 6.2.2、从docker-hub中查找指定的镜像
docker search 镜像名
- 6.2.3、从docker-hub拉取镜像
docker pull 镜像名[:TAG]
- 6.2.4、查看镜像/容器/数据卷所占的空间
docker system df
- 6.2.5、删除镜像
docker rmi 镜像名字/镜像id# 删除多个 docker rmi -f img1:tag img2:tag# 删除全部 docker rmi -f $(docker images -qa)
- 6.2.6、提交容器副本使其成为一个新的镜像
docker commit -m "提交描述信息" -a "作者" 容器id 要创建的img:[tag]
-
6.3、容器命令
- 6.3.1、启动并运行一个容器
docker run [options] IMAGE [command] [args...]
options说明:
--name 容器名
: 给容器指定一个名字
-d
: 后台运行容器并返回容器id,也即启动守护式容器(后台运行)
-i
: 以交互式模式运行容器,通常与-t同时使用
-t
: 为容器重新分配一个伪输入终端,通常与-i同时使用(也即启动交互式容器,前台有伪终端,等待交互)
-P
: 随机端口映射
-p 主机端口:容器端口
: 指定端口映射- 6.3.2、列出当前所有运行的容器
docker ps [options]
options说明:
-a
: 列出当前所有正在运行的容器 + 历史上运行过的容器
-l
: 显示最近创建的容器
-n
: 显示最近n个创建的容器
-q
: 静默模式,只显示当前运行的容器id-
6.3.3、退出容器
两种退出方式: -
run进入容器,exit退出,容器停止
-
run进入容器,ctrl+p+q退出,容器不停止
-
6.3.4、启动已停止运行的容器
docker start 容器id/容器名
- 6.3.5、重启容器
docker restart 容器id/容器名
- 6.3.6、停止容器
docker stop 容器id/容器名
- 6.3.7、强制停止容器
docker kill 容器id/容器名
- 6.3.8、删除已停止的容器
docker rm 容器id/容器名
强制删除(不管是否在运行)
docker rm -f 容器id/容器名
- 6.3.9、启动守护式容器(后台服务器)
docker run -d 容器id/容器名
- 6.3.10、查看容器日志
docker logs 容器id/容器名
- 6.3.11、查看容器内运行的进程
docker top 容器id/容器名
- 6.3.12、查看容器内部细节
docker inspect 容器id/容器名
- 6.3.13、进入正在运行的容器并以命令行交互
docker exec -it 容器id/容器名 shell
docker exec退出后,不会导致容器停止。
重新进入容器
docker attach 容器id/容器名
退出后,会导致容器停止。
- 6.3.14、容器和主机之间拷贝文件
# 从容器拷贝到主机 docker cp 容器id:容器内路径 目的主机路径# 从主机拷贝到容器 docker cp 主机路径 容器id:容器内路径
- 6.3.15、导出容器
docker export 容器id/容器名 > xxx.tar
- 6.3.16、导入容器
cat xxx.tar | docker import - 镜像仓库路径/镜像名:镜像版本号
七、Docker容器和主机之间的映射
-
7.1、创建容器卷映射
docker run -it --privileged=true -v 宿主机绝对路径:容器内路径 镜像名
上述命令的作用:通过容器数据卷的方式,完成容器内的数据备份以及持久化到本地主机目录。将容器内的数据保存进宿主机的磁盘中。
示例:docker run -it --name=u1 --privileged=true -v /tmp/host_data:/tmp/docker_data ubuntu:20.04
执行后,容器u1的
/tmp/docker_data
目录和主机的/tmp/host_data
目录将实现映射,两者之间可以相互访问、读写。 -
7.2、增加映射的读写权限
docker run -it --name=u1 --privileged=true -v /tmp/host_data:/tmp/docker_data:rw ubuntu:20.04
rw
: 代表容器内的权限是读写。 -
7.3、容器卷之间的继承
docker run -it --name=u2 --privileged=true --volumes-from u1 ubuntu:20.04
--volumes-from
: 代表容器u2继承了容器u1的数据卷。
八、创建Docker私有镜像仓库
Docker私有镜像仓库可以通过registry镜像来实现。步骤如下:
- 8.1、拉取registry镜像
docker pull registry
- 8.2、基于镜像registry,创建容器卷映射,用于作为私有镜像库
默认情况下,Docker Registry会在容器的本地文件系统上的/var/lib/registry
目录存储镜像。如果您想要知道如何定位或配置Docker Registry的存储位置,您可以通过修改Docker Registry的配置文件来实现。通常,您可以通过在启动Docker Registry容器时设置环境变量或挂载卷来改变存储位置。
注: 这里可以通过查看docker run -d -p 5000:5000 --privileged=true -v /home/zhangge/data/docker:/var/lib/registry registry
/home/zhangge/data/docker
目录查看提交的镜像。 - 8.3、创建一个新容器u1
docker run -it --name=u1 ubuntu:20.04
- 8.4、提交容器u1副本使其成为一个新的镜像
docker commit -m "提交描述信息" -a "作者" 容器id 要创建的img:[tag]
- 8.5、将新的镜像打tag到私有镜像库上
示例:docker tag 镜像:tag Host:Port/Repository:Tag
docker tag myubuntu:u1 127.0.0.1:5000/myubuntu:u1
- 8.6、将新的镜像推送到私有镜像库上
示例:docker push Host:Port/Repository:Tag
docker push 127.0.0.1:5000/myubuntu:u1
- 8.7、查看私有镜像库上有什么镜像
curl -XGET http://127.0.0.1:5000/v2/_catalog
- 8.8、pull私有库镜像到本地运行
docker pull 127.0.0.1:5000/myubuntu:u1