Docker介绍
Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows服务器上。容器是完全使用沙箱机制(程序受控的环境),相互之间不会有任何接口(类似iPhone的app)而且更轻量级。
docker核心:容器 镜像 仓库
当我们利用docker安装应用时,docker会自动搜索并下载应用镜像(image).镜像不仅包含应用本身,还包含应用运行所需要的环境,配置,系统函数库。docker会在运行镜像时创建一个隔离环境,称为容器(container)
容器Container:
容器是镜像创建的运行实例,它是一个轻量级的、可执行的独立软件包,包含了运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
容器化技术使得软件可以在几乎任何地方以相同的方式运行,解决了“在我的机器上可以运行”的问题。
镜像Image:
镜像是构建容器的模板,它是一个只读的模板,用于创建Docker容器。
镜像通常是通过一个Dockerfile定义的,Dockerfile包含了构建镜像所需的指令。
仓库Registry:
Docker仓库用于存储和分发Docker镜像。
公共的Docker Hub是最大的Docker镜像仓库,用户可以在那里找到、分享和运行高质量的Docker镜像。
Docker的主要特点:
可移植性:Docker容器可以在任何支持Docker的操作系统上运行,应用部署和迁移变得非常简单。
隔离性:容器之间是相互隔离的,一个容器的崩溃不会影响其他容器。
轻量级:容器不需要像虚拟机那样启动一个完整的操作系统,因此它们可以快速启动,并且占用更少的系统资源。
安全性:容器运行在自己的隔离环境中,并且可以限制对系统资源的访问,从而提供了额外的安全层。
Docker的工作流程:
编写Dockerfile:定义应用的依赖、环境变量、配置等。
构建镜像:通过Dockerfile构建应用镜像。
运行容器:从镜像启动一个或多个容器实例。
管理容器:启动、停止、监控和删除容器。
共享镜像:将构建好的镜像推送到Docker仓库,以便在其他机器上使用
使用Docker的优势:
快速部署和扩展:容器可以在秒内启动,这对于需要快速扩展服务的应用场景非常有用。
持续集成和持续部署(CI/CD):Docker可以简化从开发到生产环境的部署流程。
微服务架构:Docker容器非常适合微服务架构,因为它允许将应用分解为多个独立的服务。
Docker的yum库
Docker的yum源是一个软件仓库,它允许用户通过yum包管理器在基于Red Hat的Linux发行版(如CentOS、Fedora)上轻松地安装、更新和卸载Docker及其相关组件。Yum(Yellowdog Updater, Modified)是一个用于RPM-based Linux系统的自动化更新和软件包安装的工具。
安装yum工具
yum install -y yum-utils
配置Docker的yum源(更新为阿里云yum源)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum,建立缓存
sudo yum makecache fast
安装Docker
安装命令:
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动和校验:
docker -v #查看Docker版本
systemctl start docker # 启动Docker
docker images #列出运行在本地Docker主机上的所有镜像
systemctl stop docker # 停止Docker
systemctl restart docker # 重启
systemctl enable docker # 设置开机自启
docker ps # 执行docker ps命令,如果不报错,说明安装启动成功
配置镜像加速:
mkdir -p /etc/docker # 创建目录
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF
systemctl daemon-reload # 重新加载配置
systemctl restart docker # 重启docker
Docker常用命令
帮助命令
docker version #显示docker版本信息
docker info #显示docker系统信息,包含镜像和容器数量
docker [conmand] --help #帮助命令
镜像命令
docker images #查看所有本地主机上的镜像 相当于docker image ls
docker iamges -aq #查看所有镜像id
docker search #搜索镜像
docker pull #下载镜像
docker pull image[:tag] #下载指定版本镜像,tag不写默认是latest版本
docker rmi #删除镜像
docker rmi -f imageid #删除指定镜像
docker commit #镜像提交
docker save #保存镜像
docker load #加载镜像
docker push #上传镜像
docker build #构建镜像
docker tag
docker login #登录dockerhub
docker loout #登出
容器命令
docker run #运行容器(如果镜像不存在会自动拉取镜像并运行)
--name: #为容器指定一个名称;
-d: #后台运行容器,并返回容器ID,也即启动守护式容器;
-p: #端口映射,-p标志用于指定端口映射,它允许你将容器内的端口映射到镜像端口#映射有以下格式
# -p ip:主机端口:容器端口
# -p 主机端口:容器端口(常用)
# -p 容器端口
# 容器端口
-P: #随机端口映射;
-w: #指定命令执行时,所在的路径
#例:docker run -d --name nignx -p 80:80 nginx
#后台运行最新版本nginx ,容器名字定义为nginx,镜像,容器端口都是80docker stop #停止容器
docker kill #强停容器
docker ps #查看运行中的容器
docker ps -a #查看所有容器
docker rm #删除容器(只能删除已经停止的容器)
docker rm -f #删除容器(可以删除运行中的容器)
docker start #启动容器
docker restart #重启容器
docker stats #查看容器状态(cpu情况等)
docker logs #查看容器日志
docker logs -f #查看日志,持续输出日志
docker logs --tail number #查看number条数量的日志
docker top #查看容器进程信息
docker exec -it container bash #进入容器内部
docker attach container #进入容器正在执行的终端
docker cp container:容器文件路径 主机路径 #从容器内复制文件到主机
docker inspect #查看容器详情
docker network #自定义网络
数据卷(volume)是一个虚拟目录,容器目录与宿主机目录之间映射的桥梁。
宿主机文件系统目录 /var/lib/docker/volumes
数据卷相关命令
docker volume --help #查看帮助信息
docker volume create #创建数据卷
docker volume ls #查看所有数据卷
docker volume rm #删除指定数据卷
docker volume inspect 卷名 #查看某个数据卷的详情
docker volume prune #清除数据卷(未使用的数据卷)
docker -v 本地目录:容器目录 #具名挂载,完成本地目录挂载
#例 docker -v /mysql:/var/lib/mysql 挂在到mysql目录下(目录挂载) **目录挂载必须以"/"或者"./"开头**
# docker -v mysql:/var/lib/mysql 会被识别为数据卷挂载,数据卷为mysql(卷映射)
Dockerfile制作镜像
FROM | 指定镜像基础环境 |
RUN | 运行自定义命令 |
CMD | 容器启动命令或参数 |
LABEL | 自定义标签 |
EXPOSE | 指定暴露端口 |
ENV | 环境变量 |
ADD | 添加文件到镜像 |
COPY | 复制文件到镜像 |
ENTRYPOINT | 容器固定启动命令 |
VOLUME | 数据卷 |
USER | 指定用户和用户组 |
WORKDIR | 指定默认工作目录 |
ARG | 指定构建参数 |
#简单Dockerfile例子
FROM openjdk:17
LABEL author=Olivia
COPY app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -f Dockerfile -t myjavaapp:v1.0 . #构建镜像,最后的.不可缺少
DockerCompose
用来批量管理容器的工具
docker-compose.yaml-------用来定义一组相关联的应用容器
顶级元素
name
services
networks
volumes
configs
sercets
常用命令:
docker compose -f yaml文件名 up -d #创建和运行容器 默认会查找compose.yaml文件,也可以指定具体文件名
docker compose -f yaml文件名 down #停止并删除所有由up子命令启动的服务