一、背景
本篇文章主要阐述Docker在DevOps中的应用与价值,Docker部署与安装;因为搭建DevOps流程中所应用的工具及框架都部署到Docker,所以首先介绍Docker为后续做准备。
Docker的主要目标是Build,Ship and Run Any App,Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到一次封装,到处运行。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
二、Docker在DevOps中的作用与价值
工具链的标准化和快速部署。将实现DevOps所需的多种工具或软件进行Docker化后,可在任意环境实现一条或多条工具链的快速部署。
开发、测试和生产环境的统一化和标准化。镜像作为标准的交付件,可在开发、测试和生产环境上以容器来运行,最终实现三套环境上的应用以及运行所依赖内容的完全一致。
易于构建、迁移和部署。Dockerfile实现镜像构建的标准化和可复用,镜像本身的分层机制也提高了镜像构建的效率。使用Registry可以将构建好的镜像迁移到任意环境,而且环境的部署仅需要将静态只读的镜像转换为动态可运行的容器即可。
在微服务世界中,可能会使用Java构建一些微服务,使用Python构建一些微服务,以及使用JavaScript构建一些微服务。不同的微服务将具有不同的构建和部署方式,使用Docker,你可以构建微服务的镜像-不管它们的语言如何。你可以在任何基础架构上以相同方式运行这些镜像。
Docker使DevOps变得容易。
三、Docker 安装与部署(基于Ubuntu)
参考官方文档安装:https://docs.docker.com/engine/install/ubuntu/
1、卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
如果没卸载干净,需要删除文件,路径/var/lib/docker 默认安装路径,我的路径是/usr/bin/docker,用docker version检查docker是否卸载成功,如果是赶紧的系统则调过这一步。
2、设置仓库
- 更新apt包索引并安装包,以允许apt通过HTTPS使用存储库:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- 添加Docker的官方GPG密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 使用以下指令设置稳定版仓库:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3、安装docker
- 更新 apt 包索引
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get update
- 安装Docker Engine、containerd和Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 通过运行hello world映像验证Docker Engine安装是否成功
sudo docker run hello-world
打印出下面信息说明安装成功
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
四、Docker 常用命令
1、总览
命令 | 说明 |
docker version | 查看docker的版本信息 |
docker info | 查看docker详细的信息 |
docker --help | docker的帮助命令,可以查看到相关的其他命令 |
docker images | 列出本地主机上的镜像 |
docker search 镜像名称 | 从 docker hub 上搜索镜像 |
docker pull 镜像名称 | 从docker hub 上下载镜像 |
docker rmi 镜像名称 | 删除本地镜像 |
docker run [OPTIONS] IMAGE [COMMAND] | 创建并启动一个容器 |
docker ps [OPTIONS] | 查看当前正在运行的容器有哪些 |
exit | 容器停止退出 |
ctrl+p+q | 容器不停止退出 |
docker start 容器ID或者容器名称 | 启动容器 |
docker restart 容器id或者名称 | 重启容器 |
docker stop 容器ID或者名称 | 停止容器 |
docker kill 容器ID或者名称 | 强制停止容器 |
docker rm 容器ID | 删除容器 |
docker rm -f $(docker ps -qa) | 删除容器 |
docker ps -a -q | xargs docker rm | 删除容器 |
docker top 容器ID | 查看容器中运行的进程 |
docker inspect 容器ID | 查看容器的细节 |
exec | 在容器中打开新的终端,并且可以启动新的进程 |
attach | 直接进入容器启动命令的终端,不会启动新的进程 |
docker cp 容器ID:容器内路径 目的地路径 | 文件复制 |
docker logs -t -f --tail 3 容器ID | 查看运行的日志 |
docker top 容器ID | 查看容器中运行的进程 |
2、docker images
选项 | 说明 |
REPOSITORY | 表示镜像的仓库源 |
TAG | 镜像的标签 |
IMAGE ID | 镜像ID |
CREATED | 镜像创建时间 |
SIZE | 镜像大小 |
参数 | 说名 |
-a | 列出本地所有的镜像 |
-q | 只显示镜像ID |
--digests | 显示镜像的摘要信息 |
--no-trunc | 显示完整的镜像信息 |
3、 Docker rmi
删除方式 | 命令 |
删除单个 | docker rmi -f 镜像ID |
删除多个 | docker rmi -f 镜像1:TAG 镜像2:TAG |
删除全部 | docker rmi -f $(docker images -qa) |
4、docker run [OPTIONS] IMAGE [COMMAND]
options | 说明 |
--name | "容器新名字": 为容器指定一个名称 |
-d | 后台运行容器,并返回容器ID,也即启动守护式容器 |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
-P: | 随机端口映射 |
-p | 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort |
docker run -it Ubuntu /bin/bash
5、docker ps [OPTIONS]
OPTIONS | 说明 |
-a | 列出当前所有正在运行的容器+历史上运行过的 |
-l | 显示最近创建的容器。 |
-n | 显示最近n个创建的容器。 |
-q | 静默模式,只显示容器编号。 |
--no-trunc | 不截断输出。 |
五、DockerCompose 安装
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
1、DockerCompose的使用步骤:
创建对应的DockerFile文件
创建yml文件,在yml文件中编排我们的服务
通过 docker-compose up 命令 一键运行我们的容器
2、Compose安装
官网地址:https://docs.docker.com/compose/install/linux/
- 卸载历史版本:
sudo apt-get remove docker-compose-plugin
- 更新包索引,并安装最新版本的Docker Compose:
sudo apt-get update
sudo apt-get install docker-compose-plugin
- 通过检查版本验证Docker Compose是否正确安装:
docker compose version