目录
介绍:dockerfile是用来构建docker镜像的文件,命令参数脚本。
介绍:
Docker 是一种容器化技术,它可以让开发者将应用及其依赖环境“打包”成一个轻量级、可移植的容器,从而实现“一次构建,随处运行”。
核心概念:镜像(Image),容器(Container),仓库(Registry)
docker默认工作路径:/var/lib/docker
Docker和VM区别
特性 | Docker 容器 | 虚拟机 |
隔离级别 | 进程级隔离(共享内核) | 硬件级隔离(独立内核) |
启动速度 | 毫秒级 | 分钟级 |
资源占用 | 低(MB 级内存,共享镜像) | 高(GB 级内存,独立镜像) |
性能损耗 | 接近原生 | 较高(虚拟化开销) |
典型应用 | 云原生应用、微服务、DevOps | 传统应用、多操作系统环境 |
Docker安装
1.卸载残留docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
3.添加阿里镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
4.安装docker
yum install -y docker-ce
5.启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker
6.配置镜像加速器
编辑 /etc/docker/daemon.json 文件内容
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"https://mirror.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"AtomHub 已下线",
"uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn"
]
}
systemctl daemon-reload
systemctl restart docker
Docker常用命令
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
docker stats 查看cpu使用情况
镜像命令
查看本地所有镜像:
docker images
常用参数:-a 列出所有镜像,-q 只显示镜像id
搜索镜像 :
docker search 镜像名
常用参数: --filter 过滤信息
下载镜像:
docker pull 镜像名[:tag](tag:版本)
返回信息:分层下载,docker image的核心联合文件;签名; 真实地址
删除镜像:
docker rmi -f 镜像/id
删除全部镜像:docker rmi -f $(docker image -aq)
容器命令
有镜像才可以创建容器
新建容器并启动:
docker run [可选参数] image
进入交互式centos:docker run -it centos /bin/bash
常用参数:
--name=‘Name’ 容器名字,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口
四种指定方式
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
-e 环境配置
列出所有的运行的容器
docker ps [参数]
无参 列出当前正在运行的容器
-a 列出历史运行过的容器
-n=? 显示最近创建的容器
-q 只显示容器的编号
退出容器:
exit 直接停止容器并退出
Ctrl+P+Q 容器不停止退出
删除容器:
docker rm 容器id 删除指定的容器,不能删除正在运行的容器,可以rm -f 强制删除
docker rm -f $(docker ps -aq) 删除所有容器
docker ps -aq |xargs docker rm 删除所有容器
启动和停止容器的操作:
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前容器
其他常用命令:
后台运行进程
docker run -d centos
当使用docker ps时,发现centos停止。docker容器使用后台运行,需要有一个前台进程,docker发现没有应用,则会停止。
解决:启动一个服务进程;
docker run -d centos /bin/bash -c "while true; do echo '心跳信号'; sleep 1; done"
这个命令会在容器内启动一个无限循环,让 bash 进程持续运行,从而保证容器不会停止
查看日志
docker logs [参数] 容器id
参数:
-tf 显示日志
--tail number 显示的日志条数
查看容器中进程信息
docker top 容器id
查看镜像元数据
docker inspect 容器id
进入当前正在运行的容器
法1:进入容器后开启一个新的终端,可以在里面操作:
docker exec -it 容器id bash
法2:进入容器正在执行的终端,不会启动新的进程:
docker attach 容器id
从容器内拷贝文件到主机(反之)
docker cp 容器id:容器内文件路径 主机路径
实战:
部署tomcat
获取镜像:docker pull tomcat
启动容器:docker run -d --name=tomcat1 -p 3355:8080 tomcat
进入容器:docker exec -it tomcat1 /bin/bash
cp webapps.dist/* webapps/
可视化
安装Portainer面板
拉取镜像:docker pull portainer/portainer-ce
启动容器:
docker run -d \
--name portainer \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
--restart always \
portainer/portainer-ce:latest
Docker镜像
介绍
镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行某个软件所需的内容,包括代码,
库,环境变量和配置文件,所有应用直接打包成docker镜像,就可以直接跑起来。
获取镜像:
远程仓库下载;拷贝;自己制作DockerFile
联合文件系统UFS
联合文件系统(UnionFS)是一种将多个独立文件系统或目录层透明叠加为单一视图的技术。
Boots(基础层)
- 定义:
只读的基础镜像层(如操作系统镜像),提供系统运行所需的核心文件。 - 特点:
不可修改,多个容器共享以节省存储。
Roots(可写层)
- 定义:
容器运行时生成的读写层(容器层),保存对基础层的修改(如新增文件、配置变更)。 - 特点:
通过写时复制(CoW) 机制动态生成。
容器删除后,该层数据通常被清除。
commit镜像
docker commit 提交容器成为一个新的副本
docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[TAG]
容器数据卷
容器的持久化和同步操作,容器间也是可以数据共享的
卷技术:目录的挂载,将我们容器内的目录,挂载到linux上。
适应场景:当容器内缺少vim/vi,命令但是想操作,可以挂到主机上
操作:
法1:直接使用命令来挂载(双向绑定)
docker run -it -v 主机目录:容器目录 容器
实战:mysql数据持久化
绑定宿主机目录
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='Aa!123456' --name mysql1 mysql
注意:/home/mysql/data下不可以有内容,否则MySQL无法启动。
容器间数据共享(共享卷):
注意:需要先设置共享卷,才可以使用--volumes-from共享数据
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD='Aa!123456' --name mysql2
--volumes-from mysql1 mysql
扩展:
改变读写权限:容器目录:ro/rw
ro只读,这个路径只能通过宿主机来操作,容器内部是无法操作的
rw读写,可读可写
具名和匿名挂载
docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data
匿名挂载
-v 容器目录;在-v时只写容器内目录,不写主机目录
具名挂载
-v 卷名:容器目录
创建卷
docker volume create
查看所有volume的情况
docker volume ls
查看卷具体情况
docker volume inspect 卷名
法2:DockerFile
构建dockerfile文件:
FROM centos
# 定义volume1,volume2挂载卷
VOLUME ["volume1","volume2"]
CMD echo "------ok-------"
CMD /bin/bash
DockerFile
介绍:dockerfile是用来构建docker镜像的文件,命令参数脚本。
构建步骤:
编写一个dockerfile文件
构建成为一个镜像:
docker build -f <Dockerfile文件名> -t <镜像名> <上下文路径>
运行镜像:docker run
发布镜像:docker push
基础知识:
1.指令必须都是大写字母
2.执行顺序是从上到下
3.# 表示注释
4.每个指令都会创建一个新的镜像层,并提交
dockerFile:构建文件,定义了一切步骤和源代码
dockerImages:通过dockerFile构建生成的镜像,最终发布和运行的产品
docker容器:容器就是镜像运行起来提供服务器
常用命令:
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像来源 ,姓名+邮箱
RUN # 镜像构建时需要运行的命令
ADD # 支持解压压缩包或从 URL 下载文件
WORKDIR # 设置后续命令的工作目录(类似 cd)
VOLUME # 定义匿名卷(建议运行时通过 -v 显式挂载)。
EXPOSE # 暴露端口配置(需通过 -p 映射到宿主机)。
CMD # 指定容器启动时要运行的命令。当执行run,带命令时,dockerfile中命令被替代
ENTRYPOINT # 指定容器启动时要运行的命令,当执行run,带命令时,dockerfile中追加命令
ONBUILD # 当构建一个被继承的dockerfile时运行onbuild的指令,触发指令
COPY # 类似ADD,复制本地文件到镜像
ENV # 构建的时候设置环境变量
实战
安装vim到centos7
dockerfile:
FROM centos:7
MAINTAINER NY<666>
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 将容器内的yum源换为阿里源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum makecache
RUN yum -y install vim
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
构建镜像 docker build -f dockerfile01 -t dockerfile01 .
小结:
docker网络
原理:
1.每启动一个docker容器就会分配一个ip,只要安装了docker,就会有一个网卡docker0桥接,使用veth-pair技术
2.Docker 容器通过 veth-pair 连接到宿主机的 docker0 网桥,实现容器间、容器与外部网络的通信。
将一个接口(如 veth0)放入容器的网络命名空间;另一个接口(如 veth1)留在宿主机的默认命名空间;
数据通过这对接口在容器和宿主机之间传输。
容器A(veth0) <--> 宿主机(veth1) <--> docker0网桥 <--> 宿主机物理网卡
自定义网络:
查看所有docker网络:docker network ls
网络模式:bridge;host;none;container
定义网络:
docker network create --driver 网络模式 --gateway 网关 --subnet 子网 自定义网络
注意:子网不要与虚拟级子网相同
实例:docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet1
查看定义网络的具体信息:
docker network inspect 自定义网络
使用网络(添加容器到网络):
--net 自定义网络
实例:docker run -it -d --name centos1 --net mynet1 centos /bin/bash
测试网络
docker exec -it centos1 ping centos2
网络连通:
容器连接到网络:docker network connect [参数] 网络 容器
实例: docker network connect mynet1 centos3
Docker-compose
介绍
容器编排工具:通过 YAML 文件定义和管理多容器应用,简化容器生命周期管理。
与 Dockerfile 的关系:
Dockerfile:定义单个容器镜像的构建规则。
docker-compose.yml:定义多容器应用的组合、网络、存储等。
核心概念
服务(Service) :对应一个容器实例
项目(Project) :由一组服务组成的应用
YAML语法
image: 指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉去这个镜像。
ports: 暴露端口信息。使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
volumes: 卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
net: 设置网络模式。使用和 docker client 的 --net 参数一样的值。
links: 链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 ([SERVICE:ALIAS](service:ALIAS)) 格式都可以。
command: 覆盖容器启动后默认执行的命令。
基础结构(yaml结构)
version: '3' # 指定 Compose 版本
services:
service1: # 服务名称
image: nginx:1.21 # 使用镜像
container_name: # 自定义容器的名称
ports:
- "80:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 挂载目录
environment: # 设置环境变量
- NGINX_ENV=production
networks: # 添加关联网络
- mynet1
restart: always # 容器重启策略,always 表示无论何时停止都会重启
depends_on: # 定义服务依赖关系,确保当前服务启动前依赖的服务已启动
volumes:
data: # 定义命名卷
networks:
app-net: # 自定义网络
driver: #网络模式
核心命令
命令 | 作用 |
docker-compose up | 启动所有服务(-d 后台运行,-f指定文件) |
docker-compose down | 停止并删除容器、网络、卷 |
docker-compose build | 重新构建服务镜像 |
docker-compose ps | 查看运行中的容器状态 |
docker-compose logs | 查看服务日志(-f 实时跟踪) |
docker-compose exec | 进入运行中的容器执行命令 |
docker-compose pull | 拉取服务所需镜像 |
docker-compose config | 验证配置文件语法 |
注意:
docker-compose [全局选项] <命令> [命令选项]
全局选项:如 -f(指定文件)、-p(项目名称)等,必须放在命令(如 up、down)之前。
命令选项:如 -d(后台运行)、--build(重新构建镜像)等,必须放在命令之后。
实例: