Docker 基础知识
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序及其相关依赖打包到一个独立的容器中,从而实现快速部署、可移植性和可扩展性。下面是一些Docker的基本概念:
-
容器(Container):容器是Docker的基本组件,它是一个独立、可执行的软件包,包含了应用程序及其所有的依赖项(如库文件、配置文件等)。容器是轻量级、隔离的,可以在不同的环境中进行部署,而无需担心应用程序的兼容性问题。
-
镜像(Image):镜像是容器的基础,它是一个只读的模板,用于创建容器。镜像可以包含操作系统、应用程序和一些配置信息。你可以从Docker Hub或其他仓库中拉取现有的镜像,也可以通过编写Dockerfile来创建自定义的镜像。
-
仓库(Repository):仓库是用于存储和分享Docker镜像的地方。Docker Hub是一个公共的仓库,你可以在其中找到许多官方和社区维护的镜像。此外,你也可以创建私有仓库来存储和管理自己的镜像。
-
Docker引擎(Docker Engine):Docker引擎是Docker的核心组件,它负责管理和运行容器。它包含了Docker守护进程(dockerd)和客户端工具(docker命令行工具或Docker API)。
-
Dockerfile:Dockerfile是一个文本文件,用于定义如何构建Docker镜像。通过编写Dockerfile,你可以指定基础镜像、安装软件包、配置环境变量等操作,最终构建出一个可用的镜像。
-
Docker Compose:Docker Compose是一个用于定义和管理多个容器应用的工具。通过编写一个YAML文件,你可以定义多个服务(每个服务对应一个容器),并指定它们之间的依赖关系、网络配置等。
Docker 安装
更新系统:
sudo yum update
安装必要的依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker的官方仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker引擎:
sudo yum install docker-ce
启动Docker服务:
sudo systemctl start docker
设置Docker服务开机自启:
sudo systemctl enable docker
验证Docker安装是否成功:
sudo docker run hello-world
Docker 命令
配置文档
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file
-
镜像管理:
docker images
:列出本地所有的镜像。docker pull <镜像名>
:拉取指定的镜像到本地。docker build -t <镜像名> <Dockerfile路径>
:根据Dockerfile构建自定义镜像。docker push <镜像名>
:将本地镜像推送到仓库。
-
容器管理:
docker run <镜像名>
:根据指定的镜像创建并启动容器。docker ps
:列出当前正在运行的容器。docker start <容器ID或名称>
:启动已停止的容器。docker stop <容器ID或名称>
:停止正在运行的容器。docker restart <容器ID或名称>
:重启容器。docker rm <容器ID或名称>
:删除指定的容器。
-
容器操作和日志:
docker exec -it <容器ID或名称> <命令>
:在正在运行的容器中执行命令。docker logs <容器ID或名称>
:查看容器的日志信息。docker inspect <容器ID或名称>
:查看容器的详细信息。
-
网络管理:
docker network ls
:列出所有的网络。docker network create <网络名称>
:创建一个自定义网络。docker network connect <网络名称> <容器ID或名称>
:将容器连接到指定的网络。docker network disconnect <网络名称> <容器ID或名称>
:将容器从指定的网络中断开。
-
数据卷和挂载:
docker volume ls
:列出所有的数据卷。docker volume create <卷名称>
:创建一个新的数据卷。docker run -v <本地路径>:<容器路径> <镜像名>
:挂载本地路径到容器中。
- 示例
拉取一个镜像到本地:
docker pull ubuntu:latest
构建自定义镜像:
创建一个名为 Dockerfile 的文件,内容如下:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y <package_name>
使用以下命令构建镜像:
docker build -t my-ubuntu .
将本地的镜像推送到仓库,执行该命令需要有对应权限,此处按照下述配置私有仓库后,则先登录验证,-u 指定配置的私有镜像
仓库有权限的用户名称,registry:5000 为配置的私有镜像仓库地址,输入密码后登录:
docker login -u rtm registry:5000
登录后再进行push,指定镜像的仓库地址:registry:5000,my-ubuntu 为本地镜像名称,latest 指定 tag 标签:
docker push registry:5000/my-ubuntu:latest
创建并运行一个新的容器从一个镜像, -d 后台运行,--name 指定容器名称 nginx 镜像名称:
docker run -d --name my-container nginx
查看刚刚运行的容器:
docker ps
启动停止的容器:
docker start my-container
停止指定容器:
docker stop my-container
重启容器:
docker restart my-container
删除容器:
docker rm my-container
进入容器内部执行命令:
docker exec -it my-container bash
查看容器的日志,-f 按照日志输出 -t 打印时间戳 -n 输出日志行数:
docker logs -f -t -n 100 my-container
查看容器详细信息:
docker inspect my-container
查看所有网络信息:
docker network ls
创建一个自定义网络:
docker network create my-network
将容器连接到指定的网络:
docker network connect my-network my-container
将容器从指定的网络中断开:
docker network disconnect my-network my-container
列出所有的数据卷:
docker volume ls
创建一个新的数据卷,该逻辑卷真实存储为docker容器安装目录,可以通过docker inspect my-volume 查看真实存储路径:
docker volume create my-volume
将本地路径挂载到容器中,挂载后可以进入容器查看该目录是否存在,第一个/opt/ws 为主机 路径,第二个/opt/ws 为映射
到容器内的路径,可以自定义:
docker run -d -v /opt/ws/:/opt/ws --name my-container nginx
私有镜像仓库
Docker 的默认镜像仓库是 Docker Hub(https://hub.docker.com)。Docker Hub 是一个公共的镜像注册中心,你可以在其中找到各种公共
镜像,并且可以上传和分享你自己的镜像。
当你使用 docker pull 命令时,如果没有指定仓库地址,Docker 将默认从 Docker Hub 拉取镜像。例如,docker pull ubuntu 将从 Docker Hub
拉取名为 "ubuntu" 的官方镜像。
如果你想使用其他镜像仓库作为默认仓库,可以进行相应的配置。在 Docker 的配置文件中,你可以修改 daemon.json 文件来指定默认镜像
仓库。在 daemon.json 文件中,添加或修改 registry-mirrors 配置项,将镜像仓库的地址加入其中。
Docker 的配置文件 daemon.json 的位置,在 Linux 上,通常位于 /etc/docker/ 目录下,如果找不到该目录或文件,你可以手动创建
daemon.json 文件并将其放置在正确的位置。确保以管理员权限进行操作。
- 创建
{
"log-driver": "json-file",
"log-opts": {"max-size": "500m","max-file": "5"},
"default-ulimits":{"nofile":{"Name": "nofile","Hard": 65535,"Soft": 65535}},
"data-root":"/docker",
"insecure-registries": ["registry:5000"],
"ipv6":false,
"fixed-cidr-v6": "2001:db8:1::/64",
"iptables":true,
"bip": "172.17.0.1/16"
}
"registry-mirrors":指定一个镜像仓库的地址,以加速从该仓库拉取镜像的速度。
"insecure-registries":指定一个不安全的镜像仓库地址,Docker 将允许从该仓库拉取和推送镜像。
"max-concurrent-downloads":指定并发下载镜像的最大数量。
"max-concurrent-uploads":指定并发上传镜像的最大数量。
"debug":启用 Docker 的调试模式,用于输出更详细的日志信息
官方文档链接:https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file
- 安装 Docker Registry:
Docker Registry 是 Docker 官方提供的一个开源镜像仓库
1、docker run -d -p 5000:5000 --restart=always --name registry registry:2
这将在本地启动一个 Docker Registry 容器,监听在 5000 端口,并以默认配置运行,上述配置后需要在 /etc/hosts配置域名解析,否则
无法推送,网络无法解析域名 127.0.0.1 registry
2、配置 Docker 客户端使用私有镜像仓库:/etc/docker/daemon.json
{
"insecure-registries": ["registry:5000"],
}
3、重启 Docker 服务
sudo systemctl restart docker
- 配置镜像仓库认证
1、创建 Docker 配置文件:
在用户的 主目录下 创建 .docker/config.json 文件(如果文件不存在),并将以下内容添加到文件中:
{
"auths": {
"your-registry-hostname:5000": {
"auth": "base64-encoded-username-and-password"
}
}
}
将"your-registry-hostname:5000" 替换为你的私有镜像仓库的地址。
eg:
{
"auths": {
"registry:5000": {
"auth": "cnRtOnJ0bTkzMDUyNSwu"
}
}
}
2、生成认证凭据:
使用用户名和密码生成 auth 值的 base64 编码。你可以使用以下命令生成 base64 编码的用户名和密码:
echo -n 'username:password' | base64
将 "username:password" 替换为你私有镜像仓库的用户名和密码。
3、更新认证凭据:
将生成的 base64 编码的用户名和密码替换到 auth 字段的值中。
4、保存并关闭文件。
现在,当你使用 Docker 推送或拉取镜像时,Docker 将自动使用认证凭据来进行身份验证。