Docker

Docker介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低
Docker应用场景
Web 应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用

Docker结构

Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板,镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来
Docker 容器(Container):容器是独立运行的一个或一组应用。镜像相当于类,容器相当于类的实例
Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信
Docker 主机(Host): 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
Docker守护进程: Docker服务器端进程,负责支撑Docker 容器的运行以及镜像的管理
Docker仓库:DockerHub (Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库
Docker Hub提供了庞大的镜像集合供使用。用户也可以将自己本地的镜像推送到Docker仓库供其他人下载
Docker安装与操作
安装过程
1 | # 1、yum 包更新到最新 |
配置镜像
1 | # 执行如下命令: |
- daemon.json
1 | { |
Docker启动与停止指令
1 | # 启动docker服务: |
Docker操作镜像指令
- 查看本地镜像
1 | # 查看镜像 |
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期
SIZE:镜像大小
- 搜索镜像
1 | # 从网络中查找需要的镜像 |
NAME:镜像名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
- 拉取镜像
1 | # 拉取镜像就是从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本 |
- 删除镜像
1 | # 可以按照镜像id删除镜像: |
Docker操作容器指令
- 查看容器
1 | 查看正在运行的容器使用命令: |
创建容器
- 交互式容器
启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态
1 | # 拉取一个镜像 |
- 守护式容器
启动完成后长期运行,不直接进入容器
1 | #创建并启动守护式容器 |
停止并启动容器
1 | # 停止正在运行的容器:docker stop 容器名称或者ID |
文件拷贝
宿主机拷贝到容器
1 | # docker cp 需要拷贝的文件或目录 容器名称:容器目录 |
容器拷贝到宿主机
1 | # docker cp 容器名称:容器目录 需要拷贝的文件或目录 |
目录挂载
可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而同步容器
创建容器时添加-v参数
1 | # 创建linux宿主机器要挂载的目录 |
如果是多级的目录,可能现权限不足,需要添加参数--privileged=true解决挂载的目录没有权限的问题
查看容器ip
1 | # 在linux宿主机下查看 xiaobocentos3 的ip |
容器中有一个局域网,宿主机有一个ip,所以外部访问需要通过宿主机端口代理
删除容器
1 | # 删除容器 |
部署软件
Mysql容器部署
- 搜索mysql
1 | docker search mysql |
- 拉取mysql镜像
1 | docker pull mysql:8.0 |
- 修改配置
1 | # 在/root目录下创建mysql目录用于存储mysql数据信息 |
1 | docker run -id \ |
-p 3307:3306 将容器的 3306 端口映射到宿主机的 3307 端口
-v /root/mysql/conf:/etc/mysql/conf.d \ 将主机当前目录下的my.cnf 挂载到容器
-v /root/mysql/logs:/logs \ 将主机当前目录下的 logs 目录挂载到容器的 /logs 日志目录
-v /root/mysql/data:/var/lib/mysql \ 将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 数据目录
-e MYSQL_ROOT_PASSWORD=xiaobo \ 初始化 root 用户的密码
- 进入mysql容器
1 | docker exec -it xiaobo_mysql /bin/bash |
- 测试连接即可
Tomcat部署
- 搜索tomcat
1 | docker search tomcat |
- 拉取Tomcat镜像
1 | docker pull tomcat |
- 配置
1 | # 在/root目录下创建tomcat目录用于存储tomcat数据信息 |
1 | docker run -id --name=xiaobo_tomcat \ |
Nginx部署
- 搜索
1 | docker search nginx |
- 拉取Nginx镜像
1 | docker pull nginx |
- 修改配置
1 | # 在/root目录下创建nginx目录用于存储nginx数据信息 |
1 | user nginx; |
1 | docker run -id --name=xiaobo_nginx \ |
redis部署
- 搜索
1 | docker search redis |
- 拉取Redis镜像
1 | docker pull redis:5.0 |
- 端口映射
1 | docker run -id --name=xiaobo_redis -p 6380:6379 redis:5.0 |
- 客户端连接
1 | redis-cli.exe -h 192.168.117.200 -p 6380 |
docker-compose
ompose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有服务
安装
1 | curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
卸载
1 | # 二进制包方式安装的,删除二进制文件即可 |
常用命令官网查看即可
compose模板
1 | version: "2" |
- services
服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等
- volumes
数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不同的服务下去使用
- networks
应用的网络,在它下面可以定义应用的名字、使用的网络类型等等
compose应用
- 创建模板
1 | # 创建文件夹 |
- docker-compose.yml
1 | version: '3' |
仓库的迁移和备份
迁移备份
- 容器转镜像
1 | # 保存nginx容器为镜像 |
- 镜像备份
1 | docker save –o tar文件名 镜像名 |
- 镜像恢复和迁移
1 | # 停止mynginx容器 |
Dockerfile
简单明了,创建镜像的
- 创建jdk1.8镜像
1 | # 1、创建目录 |
- Dockerfile
1 | FROM centos:7 |
- 创建刚刚的容器
1 | # 创建并启动容器 |
搭建私有仓库
- 创建目录
1 | # 1、拉取私有仓库镜像 |
- 镜像上传到私有服务器
1 | # 1、标记镜像为私有仓库的镜像 |
其它服务器拉取私有仓库镜像
1 | # 打开配置文件 |
重启之后直接拉取即可
容器和虚拟机对比
相同
具有相似的资源隔离和分配优势
不同
容器虚拟化的是操作系统,虚拟机虚化的是硬件
虚拟机可以运行不同的操作系统,容器只能运行相同的操作系统
正确的开始 微小的长进 然后持续 嘿 我是小博 带你一起看我目之所及的世界……
本文标题:Docker
发布时间:2022年10月31日 - 20:33
最后更新:2022年10月31日 - 20:35
原始链接:https://codexiaobo.github.io/posts/4126800539/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。