- 官网: https://hub.docker.com/
- 文档
- 参考:
- 【视频】尚硅谷2022版 - https://www.bilibili.com/video/BV1gr4y1U7CY (全、太长、可以分章节看)
- 【视频】b站狂神
- 【视频】编程不良人 https://www.bilibili.com/video/BV1wQ4y1Y7SE (docker、网络、dockerfile、docker-compose;比较啰嗦)
- 参考:
- 用户 “孔子-说” 系列
环境部署的三个时代:
- 同一个服务器,部署多个网站 ── 如果一个被入侵,全部挂掉
- 同一个服务器,安装多个虚拟机,虚拟里部署网站 ── 重复虚拟计算机模块,浪费资源、性能
- 同一个服务器,多个容器(默认隔离)
docker为后者。
环境
# 概念
docker主机( Host
):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端( Client
):连接docker主机进行操作;
docker仓库( Registry
):用来保存各种打包好的软件镜像;
docker镜像( Images
):软件打包好的镜像;放在docker仓库中;
docker容器( Container
):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
# 版本
Docker版本变化说明:
Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。
Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。
# 安装、卸载
安装(官网: https://docs.docker.com/engine/install/ubuntu/)
💡Docker的社区版(Docker Community Edition)叫做docker-ce。老版本的Docker包叫做docker或者docker-engine,如果安装了老版本的docker得先卸载然后再安装新版本的docker。
💡docker的发展非常迅速,apt源的更新往往比较滞后。所以docker官网推荐的安装方式都是下载docker安装脚本安装。 (⚠️所以下述的安装脚本只能作为参考了,具体以官网介绍为准!)
# 💡以官网介绍为准
# docker-ce 社区版
# docker-ee 企业版
yum install docker-ce docker-cli containerd.io
systemctl start docker
docker version
配置
# 开机启动
systemctl enable docker.service
# docker用户组
sudo groupadd docker
sudo usermod -aG docker ${
USER}
sudo systemctl restart docker
卸载
# 卸载依赖
yum remove docker-ce docker-cli containerd.io
# 删除资源,路径为docker默认工作路径
rm -rf /var/lib/docker
docker version # docker版本信息
docker info # docker系统信息,包括镜像和容器的数量
docker 命令 --help
docker是CS结构的。Docker的守护进程运行在宿主机上,通过Socket从客户端访问。
DockerServer接收到Docker-Client的指令就会执行
# 设置国内镜像
- Docker中国区官方镜像
https://registry.docker-cn.com - 网易
http://hub-mirror.c.163.com - ustc
https://docker.mirrors.ustc.edu.cn - 中国科技大学
https://docker.mirrors.ustc.edu.cn - 阿里云容器 生成自己的加速地址
登录:cr.console.aliyun.com
第一步:新建或编辑daemon.json
vi /etc/docker/daemon.json
第二步:daemon.json中编辑如下
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
第三步:重启docker
systemctl restart docker.service
第四步:执行docker info查看是否修改成功
docker info
# 免sudo
调用docker命令行需要root权限,但是如果使用sudo命令,环境变量会变化。
sudo docker ...
下面设置免去sudo:
sudo groupadd docker # 创建docker用户组
sudo usermod -aG docker $USER # 当前用户加入docker用户组
newgrp docker # 刷新用户权限
docker ...
命令
从docker1.13开始,把繁多的命令划入几个子命令中(把命令进行分组)
- 镜像
- 网络
- 文件存储(卷技术)
- 容器
# 镜像命令 ── images
命令
# ====================== ⭐️历史命令
# 查看
docker images
# 搜索
docker search mysql
# 下载
docker pull mysql
# 更换阿里国内源 https://www.cnblogs.com/cao-lei/p/14448052.html
# 删除
docker rmi -f mysql
# 查看镜像的构建构成
docker history 镜像id
# ...
# ======================== ⭐️归类命令
docker image <opt>
build 构建镜像
history 查看镜像的构建历史
inspect 查看镜像的信息
load 导入
ls 列出
prune 移除未使用的镜像
pull 从仓库拉取镜像
push 把镜像推送到仓库
rm 删除镜像
save 导出镜像
demo 新
docker image pull hello-world # 从仓库拉取镜像
docker image ls # 列出所有的镜像
docker inage inspect api:v2 # 查看镜像的详细信息
docker image save hello-world -o hello.img # 导出镜像为文件
docker image rm hello-world:latest # 删除镜像
docker image load -i hello.img # 导入镜像
demo 旧
# 下载镜像 docker pull 镜像名[:tag]
root@lawsssscat-virtual-machine:/etc/docker# docker pull mysql
Using default tag: latest # 如果不写 tag 默认是 latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker image的核心 联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
root@lawsssscat-virtual-machine:/etc/docker# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 分层下载,已存在的就不下载了
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete # 分层下载,下载未存在的
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
root@lawsssscat-virtual-machine:/etc/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 3 months ago 448MB
mysql latest 3218b38490ce 3 months ago 516MB
root@lawsssscat-virtual-machine:/etc/docker# docker rmi -f mysql
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
root@lawsssscat-virtual-machine:/etc/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 3 months ago 448MB
# 删除所有
root@lawsssscat-virtual-machine:/etc/docker# docker rmi -f $(docker images -aq)
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
root@lawsssscat-virtual-machine:/etc/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# 容器命令 ── container、container run
命令 旧
docker run [可选参数(一堆)] image
# 参数说明
--name="name" 容器名字
-d --detach 后台模式运行
-i --interactive 表示交互式的,即正在访问的宿主机终端的输入会传入容器内,容器内的终端打印会显示在正在访问的宿主机终端上
-t --tty 指定容器内的一个终端应用,比如/bin/bash和python
-it 通常是i和t组合使用,
-p 指定端口 -p 宿主:容器内
-P(大写) 随机指定端口
-w 指定默认工作目录
--rm 容器退出后,自动自动删除
--restart=always 容器关闭后,自动重启
--privileged=true 容器root拥有真正的root权限:允许使用docker、mount等操作
# 列出所有容器