Docker
一、Docker为什么出现
- 系统平滑移植,容器虚拟化技术
二、Docker三要素
- 镜像
- 容器
- 仓库
三、Docker 地址
- https://www.docker.com/
- https://hub.docker.com/ 仓库,例如:MySQL、Redis、PHP
四、Docker安装
# 查看进程
ps -ef|grep docker
# 启动
sudo systemctl start docker
# 测试
sudo docker run hello-world
# 停止
sudo systemctl stop docker
官网安装链接
- 卸载旧版本
旧版本的 Docker 的名称为docker或docker-engine。在尝试安装新版本之前卸载任何此类旧版本以及相关的依赖项
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engin
- 安装yum-utils软件包(提供yum-config-manager 实用程序)并设置存储库。
sudo yum install -y yum-utils
# 官网镜像慢
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 使用阿里云镜像
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装 Docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 卸载 Docker 引擎 ,卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
- 主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
五、镜像加速器
- 阿里云容器镜像服务 地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uyh6osb1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
六、帮忙docker启动类命令
# 开机启动
sudo systemctl enable docker
# 令检查 Docker 服务状态
sudo systemctl is-enabled docker
# 禁用开机启动
sudo systemctl disable docker
sudo systemctl disable docker.socket
# 关闭docker
sudo systemctl stop docker.socket
sudo systemctl stop docker
查看docker 概要信息 docker info
帮助文档 docker --help
七、镜像操作
docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS (联合文件系统)
1. docker images 列出本机上的镜像
docker images -a 列出本地所有的镜像(含历史映像层)
docker images -q 只显示镜像ID
2. docker search redis 查找远程仓库
docker search redis --limit 5 前5
3. docker pull redis:6.0.8 下载镜像
4. docker system df 查看镜像/容器/数据卷所占空间
5. docker rmi 某个镜像ID或者镜像名 删除镜像
docker rmi -f 某个镜像ID或者镜像名 强制删除
6. docker rmi -f $(docker images -qa) 删除全部
// 制作镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
面试题
谈谈docker虚悬镜像是什么?
仓库名、标签都是 <none> 的镜像
八、容器操作
1. docker run --name="容器新名字"
2. docker run -it ubuntu /bin/bash 交互式
-i 交互式操作
-t 终端
-p 小写,主机端口:docker 容器端口
-P 大写,随机分配端口
docker run -d redis 启动守护
3. docker ps 罗列出在运行的容器
-a 列出当前所有正在运行的容器+历史上运行过的
-l 显示最近创建的容器
-n 显示最近n个创建的容器
-q 静默模式,只显示容器编号
4. exit run进去容器,退出,容器停止
ctrl+p+q run进去容器,退出,容器不停止
5. docker start 容器ID或者容器名 启动已停止运行的容器
6. docker restart 容器ID或者容器名 重启容器
7. docker stop 容器ID或者容器名 停止容器
8. docker kill 容器ID或者容器名 强制停止容器
9. docker rm 容器ID 删除已停止的容器
-f 强制删除
10. docker rm -f $(docker ps -a -q) 一次性删除多个容器实例
docker ps -a -q | xargs docker rm
11. docker logs 容器ID 查看容器日志
12. docker top 容器ID 查看容器内运行的进程
13. docker inspect 容器ID 查看容器内部细节
14. docker exec -it 容器ID /bin/bash 重新进入容器
docker attach 容器ID
15. docker cp 容器ID:容器内路径 目标主路径 拷贝文件
16. docker export 容器ID > 文件名.tar 容器导出
17. cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 容器导入
18. docker cp [本地路径] [容器名或ID]:[容器内路径]
docker cp ./nginx.conf nginx:/etc/nginx/nginx.conf
docker exec -it nginx cat /etc/nginx/nginx.conf | head
- 清理 所有未使用的容器、镜像、网络和构建缓存
docker system prune -a
- 清理未使用的数据卷 volumes 一起清理
docker system prune --volumes
⚠️ 数据卷说明:
Docker volumes 是容器持久化数据(如数据库)的重要方式。
如果你误删了 volume,可能会丢失数据库、Redis 等重要数据!
九、将当前用户加入docker用户组
将当前用户加入 docker 用户组,以便该用户在不使用 sudo 的情况下运行 Docker 命令。
sudo gpasswd -a ${USER} docker
# 刷新会话
newgrp docker
# 不需要再写 sudo 啦~
docker ps
十、设置代理
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
#添加以下内容(替换为你的代理地址):
[Service]
Environment="HTTP_PROXY=http://代理地址:端口"
Environment="HTTPS_PROXY=http://代理地址:端口"
# 重启
sudo systemctl daemon-reload
sudo systemctl restart docker
十一、配置镜像地址
容器的日志格式使用 json-file,并限制每个日志文件最大 50MB,最多保留 3 个轮转日志文件,有助于防止日志过大吃满磁盘
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker-0.unsee.tech",
"https://mirror.iscas.ac.cn",
"http://mirrors.ustc.edu.cn",
"https://hub.rat.dev"],
"data-root":"/data/docker",
"log-driver":"json-file",
"log-opts": {"max-size":"50m", "max-file":"3"}
}