Docker详解

目录

[Docker 安装](#Docker 安装)

[docker-compose 安装](#docker-compose 安装)

[Docker 命令](#Docker 命令)

[Docker 数据卷、网络](#Docker 数据卷、网络)

Dockerfile制作镜像

docker-compose管理容器


Docker可以理解为一个虚拟出来的操作系统,自带了一个或多个软件。

Docker与虚拟机的区别:虚拟机是物理上划分的,比如内存,磁盘,CPU;Docker与宿主机共享的CPU、内存、磁盘, Docker的性能取决于宿主机,虚拟机性能取决于分配给虚拟的具体大小。

Docker 安装

安装环境:centos7;安装软件:社区版docker

1、安装所需要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、配置阿里镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装
yum install -y docker-ce
4、设置跟随主机启动
systemctl enable docker # 设置跟随主机启动
systemctl start docker # 启动Docker
5、查看Docker 版本
docker -v

docker-compose 安装

docker-compose实际上就是把一堆的启动容器的参数写到一个文件里边,批量的启动容器和批量的管理容器,他就是一种容器编排技术。安装步骤如下:

yum install -y docker-compose
docker-compose --version #查看 docker-compose版本

Docker 命令

1、镜像搜索
docker search OPTIONS 镜像名称
示例:搜索mysql :docker search mysql
2、拉取镜像到本地
docker pull 镜像名称:TAG
:TAG不写默认就是:latest 最新版
3、查看镜像列表
docker images
4、删除镜像
docker rmi -f 强制 删除 镜像id
5、启动容器
镜像运行起来,就会生成一个容器,这个程序就在这个容器中独立的运行,容器之间是互相隔离的, 数据互相不影响。
启动容器:docker run options 镜像名称:tag

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,保持输入状态打开,通常与 -t 同时使用;

-t: 为容器重新分配一个伪输入终端(TTY),通常与 -i 同时使用;

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-P: 随机端口映射,容器内部端口随机映射到主机的端口

--name="nginx-lb": 为容器指定一个名称;

-h "mars": 指定容器的hostname;

-e password="123456": 设置环境变量;

--env-file=\[\]: 从指定文件读入环境变量;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类

型;

--link=\[\]: 添加链接到另一个容器;

--expose=\[\]: 开放一个端口或一组端口;

--volume , -v: 绑定一个卷

--privileged=true :给容器扩展权限

--restart always:跟随docker重启而启动容器

--rm:容器退出的时候自动删除容器

6、列出正在运行的容器
docker ps
7、进入容器
docker exec -it 容器id/名称 /bin/bash
8、 停止容器的运行
docker stop 容器id/容器名称
9、移除容器
docker rm -f 容器id 强制移除(移除正在运行的容器)
10、宿主机与容器内部文件复制
docker cp 宿主机路径 容器id:容器路径 (从宿主机复制到容器)

docker cp 容器id:容器路径 宿主机路径 (从容器复制到宿主机)

比如很多程序启动以后有默认的配置文件,我们需要从容器中复制到宿主机中修改:比如Redis集群、 mysql配置文件等

11、查看容器的详细情况
docker inspect 容器id
12、查看镜像和容器的磁盘空间使用情况
docker system df -v
13、查看容器实时运行状态
docker stats
14、保存镜像
docker save OPTIONS IMAGE [IMAGE】
示例:保存镜像到tar.gz压缩文件
docker save myimage:latest | gzip > myimage_latest.tar.gz
15、加载镜像
docker load < 压缩包文件
示例: docker load < myimage_latest .tar.gz
16、 列出容器的端口映射
docker port 容器id/名称
<容器端口>/协议 -> <宿主机IP>:<宿主机端口>
结果:容器端口映射到宿主机端口,而非相反。

Docker 数据卷、网络

容器启动以后,产生的数据在容器内,如果容器销毁,那么数据就会丢失,所以需要将容器产生或者使用的数据保存在宿主机上,那么就用到了数据卷的概念。启动容器时通过设置-v参数实现挂载数据卷,如下:
-v 宿主机路径文件:容器路径文件 -v 宿主机路径文件1:容器路径文件1
使用场景:java应用部署在容器上,容器长生的日志通过数据卷挂载到宿主机上
Docer 网络包括:host模式、container模式、none模式、 bridge桥接模式(默认模式)。
host模式:跟宿主机一个网段

container模式:这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享,如各种中间件集群内部通信可以考虑设置此种网络方式

none模式:不配置

bridge-桥接模式:bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
创建新的网络:docker network create OPTIONS 网络名称
docker network create -d bridge my-bridge-network #创建一个我的桥接模式的网络
将容器连接到指定网络:docker network connect 网络名称 容器id/名称

Dockerfile制作镜像

通过Dockerfile制作镜像,Dockerfile就是一个脚本文件,记录一行行的指令。

镜像制作:

docker build -t 镜像名称:版本号 .
进入Dockerfile文件所在的目录执行制作镜像的命令:
1、注意:需要合成的所有文件或者文件夹,请跟Dockerfile文件放在一起。
2、注意:执行制作镜像的命令的时候,必须在Dockerfile文件所在的路径下才可以。
示例:java应用jar文件,Dockerfile文件,docker-compose.yml文件都在一个目录中,通过执行
docker build -t iot-lift:1.0 . 后就可以重新生成镜像。


Dockerfile文件编写说明:
1、 FROM 指令基于某个镜像
指定基础镜像,镜像是一层一层构建的,比如说Tomcat 要在JDK镜像的基础之上构建,所有构建镜像需要指定基本的镜像。
2、WORKDIR 工作目录
格式为 WORKDIR <工作目录路径>。

使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定 的目录,如该目录不存在,WORKDIR 会帮你建立目录。进入容器的时候,默认也会进入到工作目 录。

3、ENV 声明变量环境变量
语法:ENV key value 或者 ENV key=value
环境变量声明后,可以在启动容器的时候,替换变量的值

比如:docker run --env <key>=<value

4、COPY 复制指令

在构建镜像的时候,可以把源文件复制到docker引擎中。

COPY <源路径>... <目标路径>

5、RUN 运行指令
RUN 指令是用来 执行命令行命令的。 其格式有两种:shell 格式和exec 格式
6、VOLUME 数据卷
示例: VOLUME "/data","/abc"
7、端口声明
格式为 EXPOSE <端口1> \<端口2\>...
8、 ENTRYPOINT 入口点
指定容器启动时运行的命令
ENTRYPOINT中的参数始终会被使用(一定会执行,而且无可替代!),而CMD中的额外参数可以在 容器启动时动态替换掉。

9、CMD 指令
指定容器启动时默认运行命令, 如果 docker run 指定了其他命令, CMD 指定的默认命令将会被忽略掉。
示例:spring boot java程序镜像 Dockerfile文件如下:

编写完Dockerfile文件后,将编译好的打包文件iot-lift-0.0.1-SNAPSHOT.jar 放入到和Dockerfile相同的目录下,通过执行:docker build -t iot-lift:1.0 . 就可以制作镜像了,制作完镜像后,可以通过docker run 镜像 来运行容器。

docker-compose管理容器

docker-compose是一种容器编排技术,通过编写docker-compose.yml文件(建议通过idea编写,由很好的提示)实现对容器批量的启动和管理

容器启动: docker-compose up -d #在docker-compose.yml文件目录下执行
容器停止:docker-compose down #在docker-compose.yml文件目录下执行
示例如下:

注意:ports格式为:宿主机端口:容器端口,上述示例就是宿主机的38080端口映射到容器的10020端口

相关推荐
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
2601_961875243 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
程序员老赵3 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏3 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主3 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang3 天前
Docker 使用完整指南
运维·docker·容器
正经教主3 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
CodeStats3 天前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨3 天前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算