文章目录
Docker的介绍和作用
1. 是一个快速交付应用,运行应用的技术
- Docker分为 CE(社区版,免费) 和 EE(企业版,付费) 两个版本。
- Docker CE分为 Stable、test、Nightly 三个更新频道
2. 项目部署的问题
- 大型项目组件较多,允许环境也较为复杂,部署时会碰到一些问题
- 依赖关系复杂,兼容性问题
- 开发、测试、生成环境由差异
二、Docker如何解决依赖的兼容问题
- 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
- 将每个应用放到一个隔离容器去允许,使用沙箱机制,避免互相干扰
- Docker镜像中包含完整的运行环境,包括系统函数库。
- Docker允许到不同的操作系统时(Linux内核的系统),直接基于打包的库函数,借助于系统的Linux内核来允许
三、Docker与虚拟机
- Docker是一个系统进程,体积小,启动速度快,性能好
- 虚拟机是在操作系统中的操作系统,体积大,启动速度慢,性能一般
四、Docker架构
1. 镜像和容器
- 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置文件打包在一起,称为镜像
- 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Doker会给容器做隔离,对外不可见
2. Docker和DockerHub
- DockerHub:DockerHub是一个Docker镜像的托管平台,这样的平台称为 Docker Registry
- 国内的 Docker Registry:阿里云镜像库,网易云镜像服务等。
- 也可自己搭建一个私有的Docker Registry (私有云)
3. Docker是一个CS加构程序,由两部分组成
- 服务端(server):Docker守护进程,负责Docker指令,管理镜像,容器等
- 客户端(client):通过命令或RestApi向Docker服务端发送指令,可以在本地或远程向服务端发送指令
CentOS安装Docker
安装Docker
配置镜像加速
- docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:阿里云的镜像加速文档
Docker命令总结
Docker操作
- 启动docker:
systemctl start docker
- 关闭docker
systemctl stop docker
- 重启docker
systemctl restart docker
- docker设置随服务启动而自启动
systemctl enable docker
- 查看docker 运行状态(如果是在运行中 输入命令后 会看到绿色的active)
systemctl status docker
镜像操作
- 拉取镜像
docker pull 镜像名
- 查看镜像
docker images
- 删除单个镜像(-f 强制删除)
docker rmi -f 镜像名
- 推送镜像
docker push
- 保存镜像
docker save -o 保存的名称.tar 要被保存的镜像名
- 读取一个tar文件到镜像
docker load -i 被读取的tar文件.tar
容器操作
- 创建一个容器并运行
docker run --name 容器名称 (起一个容器名)
-p 宿主机端口:容器端口 (端口映射)
-v xxx/xxx/xxx(这里为linux目录,也可以为一个数据卷):xxx/xxx/xxx(容器中需要被挂载的目录) (目录挂载,将容器的一些文件,映射到linux的目录中)
-e (环境变量)
-d (后台运行容器)
镜像名
- 启动容器
docker start 容器ID
- 查看所有运行的容器及状态
docker ps
- 查看所有的容器
docker ps -a
- 查看容器运行的日志
docker logs -f(持续日志输出,实时刷新) 容器ID
- 进入容器
docker exec -it(创建标准输入输出终端) 容器ID bash(进入容器后执行的命令)
- 停止容器
docker stop 容器ID
- 暂停容器
docker pause 容器ID
- 暂停后恢复运行
docker unpause 容器ID
- 删除指定容器
docker rm -f(强制删除) 容器ID
- 删除所有镜像和容器
docker system prune -a
- 删除所有镜像,不删除容器
docker rmi `docker images -q`
操作数据卷
**数据卷的作用:**将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
docker volume [COMMAND]
docker volume命令是数据卷操作,更具命令后跟随的commmand来确定下一步的操作
- 创建一个volume
create
- 显示一个或多个volume的信息
inspect
- 列出所有的volume
ls
- 删除未使用的volume
prune
- 删除一个或多个指定的volume
rm
七、Dockerfile自定义镜像
镜像结构
- 镜像是将应用程序及其需要的系统函数库,环境,配置,依赖打包而成
Dockerfile语法
Dockerfile就是一个文本文件,其中包含指令(Instruction),用指令来说明要执行说明操作来构建镜像。每一个指令都会形成一层Layer
指令
- 指定基础镜像: FROM
FROM centos:7
- 设置环境变量,可在后面指令使用: ENV
ENV key value
- 拷贝本地文件到镜像的指定目录: COPY
COPY ./mysql-5.7.rpm /tmp
- 执行Linux的shell命令,一般是安装过长的命令: RUN
RUN yum install gcc
- 指定容器运行时监听的端口,是给镜像使用者看的: EXPOSE
EXPOSE 8080
- 镜像中应用的启动命令,容器运行时调用: ENTRYPOINT
ENTRYPOINT java -jar xx.jar
更新详细语法说明,请参考官方文档:点击跳转
八、DockerCompose
- Docker Compose 可以基于Compose文件快速部署分布式应用,无需手动一个个的创建和允许容器!
- Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
安装:
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改文件权限:
# 修改权限
chmod +x /usr/local/bin/docker-compose
Base自动补全命令:
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
DockerCompose 部署微服务集群
编写Compose文件
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
使用如下命令启动
docker-compose up -d