docker的安装及使用
Docker 是开源的应用程序容器引擎,环境打包可移植,不同容器相互隔离,目的是解决软件的跨环境迁移问题,Docker 内的配置不会对主机造成影响。轻量级:比传统虚拟机占用更少资源可移植:跨平台一致性,开发与生产环境无差异敏捷性:开发者可快速构建、测试与部署强大生态:拥有庞大的镜像仓库与社区支持Docker 是基于客户端-服务器 (C/S) 的架构模式,其中包括多个关键组件,使用远程 API 来管
一、Docker 介绍
Docker 是开源的应用程序容器引擎,环境打包可移植,不同容器相互隔离,目的是解决软件的跨环境迁移问题,Docker 内的配置不会对主机造成影响。
为什么要选择 Docker?
轻量级:比传统虚拟机占用更少资源
可移植:跨平台一致性,开发与生产环境无差异
敏捷性:开发者可快速构建、测试与部署
强大生态:拥有庞大的镜像仓库与社区支持
Docker 架构
Docker 是基于客户端-服务器 (C/S) 的架构模式,其中包括多个关键组件,使用远程 API 来管理和创建 Docker 容器,确保容器化应用的高效构建、管理和运行。
通过下图可以得知,Docker在运行时分为Docker引擎(服务端守护进程)和客户端工具,我们日常使用各种docker命令,其实就是在使用客户端工具与Docker引擎进行交互。

Client 客户端
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
Host 主机(Docker 引擎)
一个物理或者虚拟的机器用于执行Docker守护进程和容器。
Image 镜像
什么是Docker镜像?简单的理解,Docker镜像就是一个Linux的文件系统(Root FileSystem),这个文件系统里面包含可以运行在Linux内核的程序以及相应的数据。
通过镜像启动一个容器,一个镜像就是一个可执行的包,其中包括运行应用程序所需要的所有内容:包含代码,运行时间,库,环境变量和配置文件等。
Docker 把 App 文件打包成为一个镜像,并且采用类似多次快照的存储技术,可以实现:
多个App可以共用相同的底层镜像(初始的操作系统镜像);
App运行时的IO操作和镜像文件隔离;
通过挂载包含不同配置/数据文件的目录或者卷(Volume),单个App镜像可以用来运行无数个不同业务的容器。
#Container 容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
二、Docker 安装
1. Ubuntu 安装
由 Canonical 公司支持的开源操作系统,基于 Debian 发行版。它强调用户友好性和桌面体验,同时也非常适用于服务器环境。
它拥有庞大的社区和官方支持,为用户提供了一个图形界面来安装软件,对新手更加友好。更加频繁的更新,确保了系统的现代性和安全性。
更新软件包列表
确保你的本地软件包列表是最新的,执行命令:
sudo apt-get update
安装必要的软件包,以便可以通过 HTTPS 使用存储库:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置 Docker 稳定版存储库:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker 引擎:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
验证安装是否成功
运行一个简单的Docker命令来验证是否正确安装了Docker引擎:
sudo docker run hello-world
如果一切正常,你将看到一条消息表明Docker已正确安装和运行。
2. CentOS 安装
CentOS 是一个基于 Red Hat Enterprise Linux (RHEL) 源代码的开源项目,旨在提供一个免费的企业级操作系统。它强调稳定性和安全性,适合需要长时间支持周期的服务器环境。
它适合那些寻求企业级稳定性和不需要商业支持的用户,受到专业IT管理员的青睐。CentOS 的更新周期较长,提供长期支持版本,确保系统的稳定性。
安装yum-utils包
yum install -y yum-utils
设置存储库
# 官方地址(比较慢)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云地址(国内地址,相对更快)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
卸载旧版本
首先,如果系统中已经安装了旧版本的Docker,建议卸载:
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
安装依赖
安装所需的软件包以允许使用存储库:
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-ce-cli containerd.io
运行之后Is this ok [y/N]: 选择y
启动 Docker 服务
sudo systemctl start docker
配置镜像
Docker默认拉取镜像是从这里拉取(https://hub.docker.com),国外地址拉取的速度比较慢。我们也可以配置国内镜像源。
阿里云镜像加速器
访问地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,进入容器镜像服务控制台创建加速器。
使用配置文件/etc/docker/daemon.json(没有时新建该文件)。
进入文件后按 i 进入编辑状态,然后把如下内容粘贴进文件中,然后按esc键结束编辑,在按 :wq 进行保存并退出
vim /etc/docker/daemon.json
# 添加如下内容,可以自己替换。默认地址是我的创建的
{
"registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dtnwukyb.mirror.aliyuncs.com",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug": true,
"experimental": false
}
重启Docker Daemon即可。
systemctl daemon-reload
验证安装是否成功
运行一个简单的Docker命令来验证是否正确安装了Docker引擎:
sudo docker run hello-world
如果一切正常,你将看到一条消息表明Docker已正确安装和运行。
设置Docker开机自启
sudo systemctl enable docker
3. windows 安装
开启Hyper-V
安装 WSL 2
提前下载安装包
wsl_update_x64.msi
以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
等待命令行加载结束,关闭命令行,重启电脑
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
等待命令行加载结束,关闭命令行,重启电脑
运行提前下载安装包 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
以管理员身份打开 PowerShell,将 WSL 2 设置为默认版本
wsl --set-default-version 2
下载Docker Desktop
Get Started with Docker
下载完成后,按照引导提示一步步安装完即可。
使用阿里云镜像加速
打开安装好的docker的主界面:在设置界面找到Docker Engin,将复制好的加速器地址填入即可。
安装完成后,Docker 会自动启动。通知栏上会出现个小鲸鱼的图标,这表示 Docker 正在运行。
以管理员身份打开 PowerShell,输入docker version 查看 docker 的版本信息:
三、Docker Compose 安装
Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的定义、配置和部署过程。它通过一个 YAML 格式的配置文件(docker-compose.yml)统一管理多个关联容器,解决以下核心问题:
简化多容器应用部署
允许通过单一配置文件定义多个服务(如 Web 应用、数据库、缓存等),无需手动编写复杂 docker run
命令链,实现一键启动 / 停止所有关联容器。
统一环境配置
将容器依赖(镜像版本、网络、端口映射、数据卷、环境变量等)集中声明,确保开发、测试、生产环境的一致性,避免因环境差异导致的运行问题。
自动化服务依赖管理
支持定义服务间的启动顺序和依赖关系(如先启动数据库再启动应用),确保容器按逻辑顺序初始化。
隔离与复用性
通过独立网络和卷配置,隔离不同项目的容器环境,同时复用同一物理机的资源,提升开发效率。
命令行快速安装(Linux/macOS)
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授予执行权限
# 授予执行权限
sudo chmod +x /usr/local/bin/docker-compose
验证安装
docker-compose --version
基本使用
version: '3.8' # 指定兼容的 Compose 规范版本
services: # 服务定义区块
webapp: # 服务名称(自定义)
image: nginx:alpine # 基础镜像
container_name: my-nginx # 容器命名(可选)
ports:
- "80:80" # 端口映射(主机:容器)
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # 挂载配置文件
- html:/usr/share/nginx/html # 使用命名卷
networks:
- frontend # 加入指定网络
depends_on:
- database # 声明依赖关系
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secure_password # 环境变量注入
volumes:
- mysql_data:/var/lib/mysql # 数据持久化
networks:
- backend
volumes: # 声明数据卷(自动创建)
html:
mysql_data:
networks: # 自定义网络(隔离通信)
frontend:
backend:
常用命令
# 指定其他目录或文件名
docker compose -f /path/to/custom-compose.yml up
# 使用多个 Compose 文件(合并配置)
docker compose -f docker-compose.yml -f docker-compose.prod.yml up

四、Docker 命令
常用命令
查看容器
正在运行的容器: docker ps
查看停止的容器
执行命令:docker ps -f status=exited
查看所有容器(包括运行和停止)。
执行命令:docker ps -a
查看最后一次运行的容器。
执行命令:docker ps -l
列出最近创建的 n 个容器。
执行命令:docker ps -n 5

停止容器
docker stop <容器ID或容器名>
查看镜像列表
docker images

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下。
搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索。
docker search 镜像名称

删除镜像
docker rmi <镜像ID或镜像名>
数据卷
使用数据卷将本地目录与容器内目录关联:
docker run -v /本地目录:/容器目录 -d <镜像名>
Dockerfile
通过 Dockerfile 构建镜像,实现环境自动化配置:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
通过以下命令构建镜像:
docker build -t mynginx:v1
多容器协作
使用 Docker Compose 管理多个容器,定义服务、网络、卷等:
version: '3'
services:
web:
image: nginx:alpine
database:
image: mysql:5.7
通过以下命令启动服务:
docker-compose up -d
创建与启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run 设置项 镜像名 镜像启动运行的命令(镜像里面默认是有的,一般不用管)
# -restart=always 开机自启
docker run -name=MyNginx -restart=always nginx
# 更新容器的设置项
# 1、查看容器ID
docker ps
# 2、修修改配置
docker update 容器ID/名字 -restart=always
# 端口映射
docker run -name=MyNginx -restart=always -p 88:80 nginx
-i:表示运行容器;
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端;
–name:为创建的容器命名;
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
-d:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射。
-P:随机使用宿主机的可用端口与容器内暴露的端口映射。
删除容器
# 删除容器
docker rm 容器ID/名字
# 强制删除运行中的容器
docker rm -f 容器ID/名字
创建并进入容器
下面这行命令的意思就是通过镜像 AA 创建一个容器 BB,运行容器并进入容器的/bin/bash。
docker run -it --name 容器名称 镜像名称:标签 /bin/bash
注意:Docker容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,就会自动退出。
守护式方式创建容器
docker run -di --name 容器名称 镜像名称:标签
登录守护式容器方式(进入容器的内部系统,修改容器内容)
docker exec -it 容器名称|容器ID /bin/bash
退出当前容器
exit
文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令。
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来。
docker cp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。
但是容器被删除的时候,宿主机的内容并不会被删除。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。
创建容器添加-v参数,格式为宿主机目录:容器目录,例如:
docker run -di -v /home/project/data:/usr/local/data --name centos7-01 centos:7
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
提示
目录挂载操作可能会出现权限不足的提示。这是因为CentOS7中的安全模块SELinux把权限禁掉了,在docker run时通过–privileged=true给该容器加权限来解决挂载的目录没有权限的问题。
匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker/volumes中生成。
# 匿名挂载
docker run -di -v /usr/local/data --name centos7-02 centos:7
# 查看 volume 数据卷信息
docker volume ls
具名挂载
具名挂载就是给数据卷起了个名字,容器外对应的目录会在/var/lib/docker/volume中生成。
# 匿名挂载
docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7
# 查看 volume 数据卷信息
docker volume ls
指定目录挂载
之前挂载方式就属于指定目录挂载,这种方式的挂载不会在/var/lib/docker/volume目录生成内容。
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
查看目录挂载关系
通过docker volume inspect数据卷名称 可以查看该数据卷对应宿主机的目录地址。
执行命令:docker volume inspect docker_centos_data
通过docker inspect容器ID或名称 ,在返回的JSON节点中找到Mounts,可以查看详细的数据挂载信息。
查看容器 IP 地址
我们可以通过以下命令查看容器的元信息。
docker inspect 容器名称|容器ID
也可以直接执行下面的命令直接输出 IP 地址。
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID
提交镜像的改变(容器快照)
将自己修改好的镜像提交(相当于备份一份修改好的镜像)
docker commit [选项] 容器ID或容器名 新镜像名:标签
# 基本提交
docker commit container_name myimage:v1.0
# 带作者和描述信息
docker commit -a "Your Name" -m "Add new feature" container_id myrepo/myimage:latest
# 提交时修改启动命令
docker commit -c 'CMD ["nginx", "-g", "daemon off;"]' container_name nginx-custom:v1.0
# 查看是否提交成功
docker images
常用选项:
-a 或 --author:指定作者信息
-m 或 --message:提交信息
-c 或 --change:应用Dockerfile指令
镜像传输
# 将镜像保存成压缩包
docker save [选项] 镜像名[:标签] > 文件名.tar
# 或者如下方式
docker save -o 文件名.tar 镜像名[:标签]
# 备份单个镜像
docker save -o nginx-backup.tar nginx:latest
# 备份多个镜像
docker save -o multi-images.tar nginx:latest ubuntu:20.04 redis:alpine
# 传输到远程服务器
scp nginx-backup.tar user@remote-server:/path/to/destination/
# 完整的传输流程
# 本地操作:
docker save nginx:latest > nginx-backup.tar
# 传输到远程服务器:
scp nginx-backup.tar deploy@192.168.1.100:/home/deploy/images/
# 在传输过去的服务器上使用这个镜像
docker load [选项]
docker load -i nginx-backup.tar
# 或者
docker load < nginx-backup.tar
# 验证加载结果
docker images
常用选项:
-o, --output:指定输出文件名
可以同时保存多个镜像
搜索镜像
docker search [选项] 关键词
# 搜索nginx镜像
docker search nginx
# 搜索mysql镜像
docker search mysql
常用选项:
–limit:限制返回结果数量(默认25个)
–filter:过滤搜索结果
Dockerfile 将自己的JAVA应用打包成镜像
原来传统的部署方式
1、spring boot应用打包成可执行的jar包
2、把jar包上传服务器
3、在服务器上运行 java -jar xxx.jar
使用docker容器的方式进行部署
1、编写 Dockerfile 文件
# 所使用构建的基础镜像(可以自己在docker hub 仓库中匹配的镜像)
FROM penjdk:8-jdk-alpine
# 创建一个挂载点 /tmp 目录
# 容器运行时可以将此目录挂载到宿主机,便于日志文件等临时数据的持久化
VOLUME /tmp
# 将构建好的Java应用jar包复制到容器根目录下
# 更具自己上传jar包的位置对路径自行进行更改
COPY app-system.jar /app-system.jar
# 设置容器时区为上海时区(东八区)
RUN echo 'Asia/Shanghai' > /etc/timezone
# JVM参数配置
# 内存配置:
# -Xms512m:初始堆内存512MB
# -Xmx2048m:最大堆内存2048MB(2GB)
# -Xss256k:每个线程栈大小256KB
# 故障诊断:
# -XX:+HeapDumpOnOutOfMemoryError:发生OOM时生成堆转储文件
# -XX:HeapDumpPath=dump:堆转储文件保存到dump目录
# -XX:+PrintGCDetails:打印详细的GC信息
# -Xloggc:gc.log:GC日志输出到gc.log文件
# -XX:-OmitStackTraceInFastThrow:禁用快速抛异常时省略堆栈信息的优化
ENV JAVA_OPTS="-Xms512m -Xmx2048m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump -XX:+PrintGCDetails -Xloggc:gc.log -XX:-OmitStackTraceInFastThrow"
# 使用shell执行Java应用
# $JAVA_OPTS 引用前面定义的JVM参数
# -Djava.security.egd=file:/dev/./urandom:加速随机数生成(避免阻塞)
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app-system.jar" ]

2、spring boot应用打包成可执行的jar包
3、把打好的jar包和编写好的Dockerfile 文件上传到服务器
4、使用docker命令构建镜像
docker build [OPTIONS] PATH | URL | -
主要参数说明
核心参数
PATH: 构建上下文路径(通常是包含 Dockerfile 的目录)
-t, --tag: 为镜像指定名称和标签,格式为 name:tag
-f, --file: 指定 Dockerfile 的路径(默认在构建上下文中查找 Dockerfile)
常用选项
–build-arg: 设置构建时变量
–no-cache: 不使用缓存进行构建
–pull: 构建前拉取基础镜像的最新版本
–rm: 构建成功后删除中间容器(默认行为)
–platform: 指定目标平台架构
# 基本语法 (在Dockerfile文件所在目录执行)
docker build -t myapp:latest .
# 指定 Dockerfile 路径
docker build -t myapp:latest -f ./docker/Dockerfile.prod .
# 带构建参数
docker build -t myapp:latest --build-arg VERSION=1.0.0 .
# 不使用缓存强制重新构建
docker build -t myapp:latest --no-cache .
5、查看镜像是否构建成功
docker images
6、启动容器
docker run -d -p 8080:8080 myapp:latest
7、查看是否启动成功
docker ps
更多推荐
所有评论(0)