Lazy loaded image
🐋Docker入门
Words 4065Read Time 11 min
2026-4-10
2026-4-12
type
Post
status
Published
date
Apr 10, 2026
slug
summary
tags
category
icon
password

1. 安装

1.1 官方教程

1.2 卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

1.3 配置Docker的yum库

首先要安装一个yum工具
安装成功后,执行命令,配置Docker的yum源(已更新为阿里云源):
更新yum,建立缓存

1.4 安装Docker

最后,执行命令,安装Docker

1.5 启动和校验

1.6 配置镜像加速

镜像地址可能会变更,如果失效可以百度找最新的docker镜像。
配置镜像步骤如下:

2. 命令

2.1 官方教程

2.2 常见命令

命令
说明
文档地址
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
查看容器详细信息
用一副图来表示这些命令的关系:
notion image

2.3 命令别名

3. 数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁。
命令
说明
文档地址
docker volume create
创建数据卷
docker volume ls
查看所有数据卷
docker volume rm
删除指定数据卷
docker volume inspect
查看某个数据卷的详情
docker volume prune
清除数据卷
💡
提示
/var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data
为什么不让容器目录直接指向宿主机目录呢
  • 因为直接指向宿主机目录就与宿主机强耦合了,如果切换了环境,宿主机目录就可能发生改变了。由于容器一旦创建,目录挂载就无法修改,这样容器就无法正常工作了。
  • 但是容器指向数据卷,一个逻辑名称,而数据卷再指向宿主机目录,就不存在强耦合。如果宿主机目录发生改变,只要改变数据卷与宿主机目录之间的映射关系即可。
不过,我们通过由于数据卷目录比较深,不好寻找,通常我们也允许让容器直接与宿主机目录挂载而不使用数据卷,具体参考2.2.3小节。
 
两种方式,注意区分:
  • 目录挂载: v /app/nghtml:/usr/share/nginx/html
  • 卷映射:v ngconf:/etc/nginx

4. 自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

4.1 镜像结构

自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成。
举个例子,我们要从0部署一个Java应用,大概流程是这样:
  • 准备一个linux服务(CentOS或者Ubuntu均可)
  • 安装并配置JDK
  • 上传Jar包
  • 运行jar包
那因此,我们打包镜像也是分成这么几步:
  • 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)
  • 安装并配置JDK
  • 拷贝jar包
  • 配置启动脚本
上述步骤中的每一次操作其实都是在生产一些文件(系统运行环境、函数库、配置最终都是磁盘文件),所以镜像就是一堆文件的集合
但需要注意的是,镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成,每一层形成的文件都会单独打包并标记一个唯一id,称为Layer)。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作。
例如,第一步中需要的Linux运行环境,通用性就很强,所以Docker官方就制作了这样的只包含Linux运行环境的镜像。我们在制作java镜像时,就无需重复制作,直接使用Docker官方提供的CentOS或Ubuntu镜像作为基础镜像。然后再搭建其它层即可,这样逐层搭建,最终整个Java项目的镜像结构如图所示:
notion image

4.2 Dockerfile

由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。而这种记录镜像结构的文件就称为Dockerfile,其对应的语法可以参考官方文档:Docker DocumentationDocker DocumentationDockerfile reference
指令
说明
示例
FROM
指定基础镜像
FROM centos:6
ENV
设置环境变量,可在后面指令使用
ENV key value
COPY
拷贝本地文件到镜像的指定目录
COPY ./xx.jar /tmp/app.jar
RUN
执行Linux的shell命令,一般是安装过程的命令
RUN yum install gcc
EXPOSE
指定容器运行时监听的端口,是给镜像使用者看的
EXPOSE 8080
ENTRYPOINT
镜像中应用的启动命令,容器运行时调用
ENTRYPOINT java -jar xx.jar
基于Ubuntu镜像来构建一个Java应用,其Dockerfile内容如下:
很多java项目需要打包为镜像,都需要Linux系统环境、JDK环境这两层,只有上面的3层不同(因为jar包不同)。有人提供了基础的系统加JDK环境,我们在此基础上制作java镜像,就可以省去JDK的配置了:

4.3 构建镜像

5. 网络

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:
notion image
但是,容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。所以,我们必须借助于docker的网络功能来解决这个问题,官方文档:Docker DocumentationDocker Documentationdocker network
常见命令有:
命令
说明
文档地址
docker network create
创建一个网络
docker network ls
查看所有网络
docker network rm
删除指定网络
docker network prune
清除未使用的网络
docker network connect
使指定容器连接加入某网络
docker network disconnect
使指定容器连接离开某网络
docker network inspect
查看网络详细信息
 

5.1 Redis主从同步集群

5.2 启动MySQL

6. Docker Compose

Docker Compose可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。docker-compose.yml文件的基本语法可以参考官方文档:Docker DocumentationDocker DocumentationLegacy versions

6.1 命令式安装

6.2 compose.yaml

6.3 基础命令

编写好docker-compose.yml文件,就可以部署项目了。常见的命令:Docker DocumentationDocker Documentationdocker compose 基本语法如下:
其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
类型
参数或指令
说明
Options
-f
指定compose文件的路径和名称
-p
指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
Commands
up
创建并启动所有service容器
down
停止并移除所有容器、网络
ps
列出所有启动的容器
logs
查看指定容器的日志
stop
停止容器
start
启动容器
restart
重启容器
top
查看运行的进程
exec
在指定的运行中容器中执行命令

6.3 特性

  • 增量更新
    • 修改 Docker Compose 文件。重新启动应用。只会触发修改项的重新启动。
  • 数据不删
    • 默认就算down了容器,所有挂载的卷不会被移除。比较安全

6. Dockerfile

7. 附录 - 一键安装超多中间件

7.1 yaml

注意:
  • 将下面文件中 kafka119.45.147.122 改为你自己的服务器IP。
  • 所有容器都做了时间同步,这样容器的时间和linux主机的时间就一致了
准备一个 compose.yaml文件,内容如下:

7.2 启动

tip:如果重启了服务器,可能有些容器会启动失败。再执行一遍 docker compose up -d即可。所有程序都可运行成功,并且不会丢失数据。请放心使用。

7.3 访问

上一篇
Linux入门
下一篇
Docker