Docker:一个用来快速构建,运行,管理应用的工具
1.旧版本卸载
如果存在旧版本,则需要先行卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置Docker的yum库
2.1安装yum工具
yum install -y yum-utils
2.2成功后,执行下列命令,配置Docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
执行下列命令
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.启动Docker
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
5.查看是否正常运行
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
6.配置镜像加速(阿里云)
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
7.入门案例
使用Docker部署mysql
docker run -d \ # 使用 `docker run` 命令以分离模式(后台运行)启动一个新的容器
--name mysql \ # 为容器指定一个名称,这里是 `mysql`
-p 3306:3306 \ # 将容器内部的 3306 端口映射到宿主机的 3306 端口上,通常用于数据库服务访问
-e TZ=Asia/Shanghai \ # 设置环境变量 `TZ`(时区)为 `Asia/Shanghai`,确保容器内部时间与上海时间一致
-e MYSQL_ROOT_PASSWORD=123 # 设置环境变量 `MYSQL_ROOT_PASSWORD`,这是 MySQL 服务的 root 用户的密码,此例中设置为 `123`
mysql # Docker 镜像的名称。这告诉 Docker 你想要基于哪个镜像来创建和启动容器,在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
9.Docker基础
9.1常见命令
命令 | 说明 |
docker pull | 拉取镜像 |
docker push | 推送镜像到DockerRegistry |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重启启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
9.2docker run命令中常见参数
-d:让容器后台运行
--name:给容器命名
-e:环境变量
-p:宿主机端口映射到容器内端口
镜像名称结构:Repository:TAG
10.Docker数据卷
数据卷(volume):是一个虚拟目录,是容器内目录于宿主机目录之间映射的桥梁
使用方法:在执行docker run命令时,使用-v 数据卷:容器内目录可以完成数据卷挂载
数据卷其他常见命令:
docker volume ls:查看数据卷
docker volume rm:删除数据卷
docker volume inspect:查看数据卷详情
docker volume prune:删除未使用的数据卷
11.本地目录挂载
使用方法:在执行docker run命令时,使用-v 本地目录:容器内目录可以完成本地目录挂载
本地目录必须以"/"或"./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录,例如:
-v mysql:/var/lib/mysql会被识别为一个数据卷叫mysql
-v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录
12.自定义镜像
镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
镜像结构:
入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数
层(Layer):添加安装包,依赖,配置等,每次操作都形成新的一层
基础镜像(BaseImage):应用依赖的系统函数库,环境,配置,文件等
13.Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行说明操作来构建镜像。将来Docker可以更具Dockerfile帮我们构建镜像。常见指令如下:
指令 | 说明 | 示例 |
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./test.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/test.tar.gz && EXPORTS path=/tmp/test:$path |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
当我们编写好了Dockerfile,可以利用下面命令来构建镜像:
docker build -t myimage:1.0 .
-t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
.:是指定Dockerfile所在目录,如果就在当前目录,则指定为"."
14.Docker网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:
15.自定义网络
加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:
命令 | 说明 |
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
16.使用docker部署项目
(1)先将java项目在idea或者手动使用命令mvn package,,将项目打包成jar
(2)然后手动编写dockerfile文件,逻辑参考如下:
# 使用官方Java运行环境作为基础镜像
FROM openjdk:11-jre-slim
# (可选) 设置工作目录,也就是应用运行的目录
WORKDIR /app
# 将构建产物的jar文件复制到容器内
COPY target/my-application.jar /app/my-application.jar
# 声明容器对外暴露的端口号,应与应用配置的端口号相匹配
EXPOSE 8080
# 指定容器启动时执行的命令
CMD ["java", "-jar", "/app/my-application.jar"]
(3)将jar和dockerfile文件都上传至服务器
(4)在其文件目录下,使用命令docker build -t 镜像名 . 来创建镜像
(5)docker run -d --name 容器名 -p 端口映射 --network 网络名 镜像名
17.DockerCompose
Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
使用方式:docker compose [OPTIONS] [COMMAND]
类型 | 参数或指令 | 说明 |
Option | -f | 指定compose文件的路径和名称 |
-p | 指定project名称 | |
Comands | up | 创建并启动所有service容器 |
down | 停止并移除所有容器,网络 | |
ps | 列出所有启动的容器 | |
logs | 查看指定容器的日志 | |
stop | 停止容器 | |
start | 启动容器 | |
restart | 重启容器 | |
top | 查看运行的进程 | |
exec | 在指定的运行容器中执行命令 |
18.发布镜像
发布 Docker 镜像通常意味着将其推送到 Docker Hub 或其他 Docker 镜像仓库(例如 GitHub Packages, GitLab Container Registry, Amazon Elastic Container Registry (ECR), Google Container Registry (GCR) 等)
步骤 1: 创建 Docker Hub 账户(如果还没有)
如果你还没有 Docker Hub 账户,你需要先在 Docker Hub 上注册一个。
步骤 2: 登录到 Docker Hub
在你的终端或命令行界面,使用 docker login
命令登录到 Docker Hub:
docker login
输入你的 Docker Hub 用户名和密码。成功登录后,你就可以推送镜像到你的 Docker Hub 仓库了。
步骤 3: 标记你的 Docker 镜像
在推送镜像之前,你需要为它添加一个标签(tag),这个标签应该包含你的 Docker Hub 用户名、仓库名和可选的标签。
docker tag 你的镜像名字:你发布的版本(自定义) docker网页端的用户名/镜像命名:标签
步骤 4: 推送镜像到 Docker Hub
现在,你可以使用 docker push
命令将镜像推送到 Docker Hub:
docker push docker网页端的用户名/镜像命名:标签
这会将你的镜像上传到 Docker Hub。根据你的网络速度和镜像大小,这可能需要一些时间。
步骤 5: 验证
登录到你的 Docker Hub 账户,检查你的仓库列表,确认你的镜像已经上传。
19.将镜像到处为压缩包
1. 使用 docker save
保存镜像
首先,使用 docker save
命令导出镜像到一个 tar 文件。比如,如果你想保存名为 try/test/newtest:latest
的镜像,可以运行:
docker save try/test/newtest:latest > myimage.tar
这会创建一个名为 myimage.tar
的文件,其中包含了你指定的 Docker 镜像。
2. 压缩 tar 文件
接下来,使用 gzip
(或其他压缩工具)来压缩这个 tar 文件。运行:
gzip myimage.tar
这会生成一个名为 myimage.tar.gz
的压缩文件,并且原来的 myimage.tar
文件会被替换。现在,你的 Docker 镜像已经被打包成了一个压缩包,可以更方便地进行传输或存储。
3. 分享或存储压缩包
现在,你可以将这个压缩包 myimage.tar.gz
通过网络分享给其他人,或者存储在安全的位置以备未来使用。
4. 加载镜像(可选)
如果你或其他人需要从这个压缩包中恢复 Docker 镜像,首先需要解压缩这个文件,然后使用 docker load
命令加载镜像。解压缩并加载镜像的命令如下:
gunzip -c myimage.tar.gz | docker load
或者,如果你首先解压缩文件:
gunzip myimage.tar.gz docker load < myimage.tar
这样,镜像就会被加载到 Docker 中,可以像使用任何其他 Docker 镜像一样使用它了。
20.Docker压缩包部署
步骤 1: 加载镜像到 Docker
首先,如果你的镜像已经被打包成 .tar.gz
文件,你需要解压并加载它到 Docker 中。这里假设你的压缩文件名为 myimage.tar.gz
:
gunzip -c myimage.tar.gz | docker load
或者,如果你首先解压缩文件:
gunzip myimage.tar.gz docker load < myimage.tar
这将把镜像加载到你的 Docker 安装中,现在你可以通过 docker images
命令查看它。
步骤 2: 准备 docker-compose.yml
接下来,创建一个 docker-compose.yml
文件来定义如何运行你的容器。这个文件应该包括使用你刚加载的镜像以及任何相关配置,如端口映射、卷挂载或环境变量等。
假设你的镜像名为 myapp:latest
,一个简单的 docker-compose.yml
示例可能如下所示:
version: '3'
services:
myapp:
image: myapp:latest
ports:
- "8080:8080"
environment:
- MY_ENV_VAR=value
这个配置定义了一个服务 myapp
,使用 myapp:latest
镜像,并将容器的 8080 端口映射到宿主机的 8080 端口。你可以根据需要调整这个文件。
步骤 3: 使用 docker-compose
启动服务
确保你的 docker-compose.yml
文件准备好后,你可以使用 docker-compose up
命令来启动服务:
docker-compose up -d
这个命令会根据 docker-compose.yml
文件中的定义来启动你的应用容器。-d
参数意味着容器会在后台运行。
步骤 4: 验证运行
使用 docker-compose ps
查看你的服务状态,确保它们按预期运行。
docker-compose ps
这样,你就完成了从压缩包恢复镜像,并使用 docker-compose
构建和启动容器的过程。