Docker那点事

张开发
2026/4/3 20:10:00 15 分钟阅读
Docker那点事
一、初识Docker1、简介1.Docker 是一个开源的应用容器引擎基于 Go 语言 并遵从 Apache2.0 协议开源。 2.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中 然后发布到任何流行的 Linux 机器上也可以实现虚拟化。 3.容器是完全使用沙箱机制相互之间不会有任何接口类似 iPhone 的 app,更重要的是容器性能开销极低。2、Docker的应用场景1.Web 应用的自动化打包和发布。 2.自动化测试和持续集成、发布。 3.在服务型环境中部署和调整数据库或其他的后台应用。 4.从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。3、Docker 的优点Docker 是一个用于开发交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开 从而可以快速交付软件。借助 Docker您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付测试和部署代码您可以大大减少编写代码和在生产环境中运行代码之间的延迟。 1.快速一致地交付您的应用程序 Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作从而简化了开发的 生命周期。容器非常适合持续集成和持续交付CI / CD工作流程 2.响应式部署和扩展 Docker 是基于容器的平台允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上 数据中心的物理或虚拟机上云服务上或混合环境中运行。Docker 的可移植性和轻量级的特性还可以 使您轻松地完成动态管理的工作负担并根据业务需求指示实时扩展或拆除应用程序和服务。 3.在同一硬件上运行更多工作负载 Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案因此您可以 利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署而您可以用 更少的资源做更多的事情。二、安装Docker以CentOS系统为例。1、安装在新主机上首次安装 Docker 之前需要设置 Docker 仓库。之后您可以从仓库安装和更新 Docker。 1.设置仓库 安装 dnf-plugins-core 软件包它提供管理您的 DNF 仓库的命令并设置仓库。 # 安装依赖工具 yum install -y yum-utils # 添加阿里云 Docker 源国内高速 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装 Docker yum install -y docker-ce docker-ce-cli containerd.io # 启动docker并开机自启 systemctl start docker systemctl enable docker #使用docker version查看是否安装成功 docker version 如果在使用yum命令时出现报错Could not resolve host: mirrorlist.centos.org按照下面处理 # 1. 备份原有源 mv /etc/yum.repos.d /etc/yum.repos.d.bak mkdir /etc/yum.repos.d # 2. 下载阿里云 CentOS 7 基础源 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 3. 清理旧缓存 yum clean all # 4. 生成新缓存 yum makecache2、卸载1.删除安装包 yum remove docker-ce 2.删除镜像、容器、配置文件等内容 rm -rf /var/lib/docker三、Docker使用Docker 容器是一个轻量级、可移植、自给自足的软件环境用于运行应用程序。Docker 容器将应用程序及其所有依赖项包括库、配置文件、系统工具等封装在一个标准化的包中使得应用能够在任何地方一致地运行。容器是操作系统级别的虚拟化不需要运行完整的操作系统启动和运行更为高效。镜像与容器的关系镜像Image容器的静态模板包含了应用程序运行所需的所有依赖和文件。镜像是不可变的。容器Container镜像的一个运行实例具有自己的文件系统、进程、网络等且是动态的。容器从镜像启动并在运行时保持可变。1、常用的docker命令1、启动一个新的容器并运行命令 命令docker run 示例docker run -d centos 2、列出当前正在运行的容器 命令docker ps 示例docker ps 输出详情介绍 CONTAINER ID: 容器 ID。 IMAGE: 使用的镜像。 COMMAND: 启动容器时运行的命令。 CREATED: 容器的创建时间。 STATUS: 容器状态。 状态有7种 created已创建 restarting重启中 running 或 Up运行中 removing迁移中 paused暂停 exited停止 dead死亡 PORTS: 容器的端口信息和使用的连接类型tcp\udp。 NAMES: 自动分配的容器名称。 3、列出所有容器包括已停止的容器 命令docker ps -a 示例docker ps -a 4、使用 Dockerfile 构建镜像 命令docker build 示例docker build -t my-image . 5、列出本地存储的所有镜像 命令docker images 示例docker images 6、从 Docker 仓库拉取镜像 命令docker pull 示例docker pull ubuntu 7、将镜像推送到 Docker 仓库 命令docker push 示例docker push my-image 8、在运行的容器中执行命令 命令docker exec 示例docker exec -it container_name bash 9、停止一个或多个容器 命令docker stop 示例docker stop container_name 10、启动已停止的容器 命令docker start 示例docker start container_name 11、重启一个容器 命令docker restart 示例docker restart container_name 12、删除一个或多个容器 命令docker rm 说明docker rm container_name 13、删除一个或多个镜像 命令docker rmi 示例docker rmi my-image 14、查看容器的日志 命令docker logs 示例docker logs container_name 15、获取容器或镜像的详细信息 命令docker inspect 示例docker inspect container_name 16、进入容器的交互式终端 命令docker exec -it 示例docker exec -it container_name /bin/bash 17、列出所有 Docker 网络 命令docker network ls 示例docker network ls 18、列出所有 Docker 卷 命令docker volume ls 示例docker volume ls 19、启动多容器应用从 docker-compose.yml 文件 命令docker-compose up 示例docker-compose up 20、停止并删除由 docker-compose 启动的容器、网络等 命令docker-compose down 示例docker-compose down 21、显示 Docker 系统的详细信息 命令docker info 示例docker info 22、显示 Docker 客户端和守护进程的版本信息 命令docker version 示例docker version 23、显示容器的实时资源使用情况 命令docker stats 示例docker stats 24、登录 Docker 仓库 命令docker login 示例docker login 25、登出 Docker 仓库 命令docker logout 示例docker logout 26、导出本地某个容器 命令docker export 示例docker export 1e560fca3906 xxxxxx.tar 导出容器 1e560fca3906 快照到本地文件 xxxxxx.tar。 27、导入容器快照 命令docker import 示例cat docker/xxxxxx.tar | docker import - test/centos:v1 将快照文件 xxxxxx.tar 导入到镜像 test/centos:v1 也可以通过指定 URL 或者某个目录来导入 docker import http://example.com/exampleimage.tgz example/imagerepo 常用选项说明: -d后台运行容器例如 docker run -d ubuntu。 -it以交互式终端运行容器例如 docker exec -it container_name bash。 -t为镜像指定标签例如 docker build -t my-image .。2、运行一个 web 应用我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。docker pull training/webapp # 载入镜像 docker run -d -P training/webapp python app.py # 查看指定 ID 或者名字容器的某个确定端口映射到宿主机的端口号 命令docker port # 查看指定 ID 或者名字容器内部运行的进程 命令 docker top 参数说明: -d:让容器在后台运行。 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。3、Docker 镜像使用1、列出镜像列表命令docker images runoobrunoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE php 5.6 f40e9e0f10c8 9 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B training/webapp latest 6fae60ef3446 11 months ago 348.8 MB 各个选项说明: REPOSITORY表示镜像的仓库源 TAG镜像的标签 IMAGE ID镜像ID CREATED镜像创建时间 SIZE镜像大小 同一仓库源可以有多个 TAG代表这个仓库源的不同个版本如 xxx 仓库源里有 15.10、14.04 等多个 不同的版本我们使用 REPOSITORY:TAG 来定义不同的镜像。 所以我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时命令如下 runoobrunoob:~$ docker run -t -i xxx:15.10 /bin/bash rootd77ccb2e5cca:/# 参数说明 -i: 交互式操作。 -t: 终端。 xxx:15.10: 这是指用 xxx 15.10 版本镜像为基础来启动容器。 /bin/bash放在镜像名后的是命令这里我们希望有个交互式 Shell因此用的是 /bin/bash。 如果要使用版本为 14.04 的 ubuntu 系统镜像来运行容器时命令如下 runoobrunoob:~$ docker run -t -i xxx:14.04 /bin/bash root39e968165990:/# 如果你不指定一个镜像的版本标签例如你只使用 xxxdocker 将默认使用 xxx:latest 镜像。2、获取一个新的镜像docker pull xxx:latest3、删除镜像docker rmi hello-world4、创建镜像当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时我们可以通过以下两种方式对镜像进行更改。1、从已经创建的容器中更新镜像并且提交这个镜像2、使用 Dockerfile 指令来创建一个新的镜像4.1、更新镜像 更新镜像之前我们需要使用镜像来创建一个容器。 runoobrunoob:~$ docker run -t -i xxx:15.10 /bin/bash 进入容器后更新系统 apt-get update apt-get upgrade -y 在完成操作之后输入 exit 命令来退出这个容器。 exit 此时 ID 为 e218edb10161 的容器是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。 runoobrunoob:~$ docker commit -mhas update -arunoob e218edb10161 runoob/xxx:v2 sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8 各个参数说明 -m: 提交的描述信息 -a: 指定镜像作者 e218edb10161容器 ID runoob/xxx:v2: 指定要创建的目标镜像名 4.2、构建镜像 命令docker build docker build -t runoob/centos:6.7 /xxx 参数说明 -t 指定要创建的目标镜像名 ./xxxDockerfile 文件所在目录可以指定Dockerfile 的绝对路径 4.3、设置镜像标签 docker tag 860c279d2fec runoob/centos:dev4、Docker Dockerfile1、什么是 Dockerfile Dockerfile 是一个文本文件包含了构建 Docker 镜像的所有指令。 Dockerfile 是一个用来构建镜像的文本文件文本内容包含了一条条构建镜像所需的指令和说明。 通过定义一系列命令和参数Dockerfile 指导 Docker 构建一个自定义的镜像。 2、Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层会造成镜像膨胀过大。 例如 FROM centos RUN yum -y install wget RUN wget -O redis.tar.gz http://download.redis.io/releases/redis-5.0.3.tar.gz RUN tar -xvf redis.tar.gz 以上执行会创建 3 层镜像。可简化为以下格式 FROM centos RUN yum -y install wget \ wget -O redis.tar.gz http://download.redis.io/releases/redis-5.0.3.tar.gz \ tar -xvf redis.tar.gz 如上以 符号连接命令这样执行后只会创建 1 层镜像。 3、常用指令 FROM 指定基础镜像用于后续的指令构建。 LABEL 添加镜像的元数据使用键值对的形式。 RUN 在构建过程中在镜像中执行命令。 CMD 指定容器创建时的默认命令。可以被覆盖 ENTRYPOINT 设置容器创建时的主要命令。不可被覆盖 EXPOSE 声明容器运行时监听的特定网络端口。 ENV 在容器内部设置环境变量。 ADD 将文件、目录或远程URL复制到镜像中。 COPY 将文件或目录复制到镜像中。 VOLUME 为容器创建挂载点或声明卷。 WORKDIR 设置后续指令的工作目录。 USER 指定后续指令的用户上下文。 ARG 定义在构建过程中传递给构建器的变量可使用 docker build 命令设置。 ONBUILD 当该镜像被用作另一个构建过程的基础时添加触发器。 STOPSIGNAL 设置发送给容器以退出的系统调用信号。 HEALTHCHECK 定义周期性检查容器健康状态的命令。 SHELL 覆盖Docker中默认的shell用于RUN、CMD和ENTRYPOINT指令。5、Docker ComposeCompose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。Compose 使用的三个步骤 使用 Dockerfile 定义应用程序的环境。 使用 docker-compose.yml 定义构成应用程序的服务这样它们可以在隔离环境中一起运行。 最后执行 docker-compose up 命令来启动并运行整个应用程序。

更多文章