Docker学习笔记分享
Docker
简介与概述
Docker是一个开源的应用容器引擎,基于Go语言开发遵从Apache License 2.0开源协议。可以让开发者打包他们的应用以及相关依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或windows操作系统的机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。
使用Docker的好处
- 简化配置,构建一次打包后可以用于多个环境,可以省去很多配置的过程。
- 解决开发人员部署环境困难的问题。
- 每个docker中的应用隔离,服务器整合,可以在一台服务器上部署多套应用,并且隔离性很高。
- DevOps开发与运维一体化减少沟通的成本(docker或者k8s实现)
- 对运维来说,可以快速的进行扩容。
- 可以多平台部署。
Docker快速入门
Docker安装
Docker在安装时对centos7系统的内核版本要求在3.10以上。
1、 通过uname -r
命令查看你当前的内核版本;
2、 确保你的yum包更新到最新yum -y update
;
3、 卸载旧版本(如果安装过旧版本的话)
yum remove docker docker-common docker-selinux docker-engine
4、2、 安装需要的软件包, yum-util
提供yum-config-manager
功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
5、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6、 可以查看所有仓库中的docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
7、 安装docker
sudo yum install -y docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1
8、 启动并添加开机启动
# 启动Docker
systemctl start docker
# 设置docker开机自启
systemctl enable docker
9、验证docker是否安装成功(有client和service两部分表示docker安装启动都成功了)
docker version
Docker核心名词
- 镜像文件
- 容器
- 仓库
镜像:可以理解为安装包,镜像中包含了容器安装所需的配置信息和基础文件;
镜像来源:
1、自己生成镜像,如自己打包的项目
2、 拉取别人已经制作好的镜像,如Nginx、mysql、redis等。
容器:容器就是镜像运行的实例,容器状态分为:初创建、运行、停止、暂停、删除,一个镜像可以创建多个不同的容器。
每个镜像文件都有自己独立的IP信息——轻量级Linux服务器 虚拟化
仓库: 仓库可以简单理解为,专门存储镜像文件仓库, 类似于 谷歌手机市场,统一在
谷歌手机市场下载开发者的安装包。
Docker镜像下载的原理
docker pull从远程docker官方仓库下载镜像,到本地,再使用容器运行该镜像。
Docker镜像源的配置
由于国内直接访问Docker镜像比较慢,因此我们可以配置一些国内的镜像源,提高我们拉取镜像的速度,如:
科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
配置一个加速镜像后,若拉取不到镜像,请切换到另一个加速地址。国内的云服务商大都提供Docker镜像服务,建议根据运行Docker的云平台选择对应的镜像服务。
下面为阿里云Docker镜像配置方式。
1. 安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce
2. 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json
来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的阿里云加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
如何查看加速镜像是否安装成功
输入:docker info
查看Registry Mirrors:
下是否为你的阿里云加速地址。
docker常用的一些命令
-
docker --help
帮助命令 -
docker --version
查看docker版本 -
docker images
查看本地images镜像缓存 -
docker rmi 你的镜像文件名称/镜像id
删除镜像REPOSITORY(存储库名称) TAG (镜像标签,默认下载latest) IMAGE ID(镜像id) CREATED (创建时间) SIZE(镜像大小)
-
docker images -a
查看所有缓存镜像 -
docker images -q
只显示镜像的id -
docker images --digests
显示镜像的摘要信息 -
docker images --no-trunc
显示完整的镜像信息 -
docker search mysql
搜索mysql
镜像docker search -s 40 mysql
列出点赞数大于40的 -
docker pull 镜像名:版本
拉取镜像 -
docker inspect 容器id/容器名称
获取容器/镜像的元数据 -
docker run -i(保持容器一直运行) -t(给容器一个伪终端) -d(后台运行,不直接进入容器) --name=mysql5.7(给容器命名) -p 3306:3306(宿主机端口:docker容器端口) mysql5.7
通过-it创建的容器,一创建就进入容器,退出容器容器便停止运行,可用于启动容器时查看日志。 ——交互式容器容器。
通过-id创建的容器,需
docker exec -it 容器名/容器id bash
进入容器,退出容器后,容器也不会停止运行,启动失败时可以通过查看日志的方式来查看错误信息 ——守护式容器。 -
docker ps
查看正在运行的容器加-a
则为查看运行和已经关闭的容器。 -
docker start 容器名称/id
启动容器 -
docker stop 容器名称/id
停止容器 -
docker rm 容器名称/id
删除容器(删除容器前需把容器先停止) -
docker insepct 容器名称/id
查看容器信息
Docker 镜像原理
什么是镜像
镜像可以理解为一种软件安装包,是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于环境的开发软件,它包含了某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置信息。
Docker commit
主要用于当前容器制作为镜像文件。
docker commit
提交容器副本使之成为一个新的镜像,
命令:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的镜像名称:[标签名]
Docker 数据卷
基本概念
数据卷就是宿主机上的一个文件或目录,宿主机与容器目录绑定,一方修改则另一方会立即同步。
一个数据卷可以被多个容器同时挂载。
作用:容器数据持久化,外部机器与容器的间接通信,容器直接的数据交换。
数据卷的添加方式
两种方式
- 直接使用命令添加
docker run -it -v 宿主机绝对路径:容器内路径 镜像文件名称
- Dockerfile文件配置方式添加
DockerFile 解析
DockerFile 编写规范
-
描述必须注释
- 指令必须大写且后面至少跟一个参数;
- 指令是从上往下,依次执行的。
Docker File指令
- FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令
- MAINTAINER :维护者
- RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令
- ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
- COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
- CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
- ENV: 设置环境变量
- EXPOSE: 指定于外界交互的端口
- VOLUME 用于指定持久化目录
- WORKDIR 设置进入容器时的路径 默认访问的目录
Tomcat docker File参考:
Docker Compose
为何需要Docker Compose
docker compose 容器编排技术
当我们一个项目需要依赖Nginx、Redis、mysql时,我们想要启动该项目则需要先安装Nginx、Redis、mysq容器,才能够启动我们的项目,这样我们的部署流程就非常复杂,所以我们就需要引入docker compose实现容器编排技术。
基本概念
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container),Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例。
Docker Compose环境安装(离线安装)
1、 访问Docker Compose GitHub官网 https://github.com/docker/compose/releases/
2、 将docker-compose-Linux-x86_64上传至服务器,然后将其移动到/usr/local/bin/
目录下并更名为docker-compose
3、 添加可执行权限sudo chmod +x /usr/local/bin/docker-compose
4 、docker-compose -v
验证
Docker Compose常用指令
docker-compose -h
查看帮助
docker-compose up
创建并运行所有容器
docker-compose up -d
创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d
# 指定模板
docker-compose down
停止并删除容器、网络、卷、镜像。
docker-compose logs
查看容器输出日志
docker-compose pull
拉取依赖镜像
dokcer-compose config
检查配置
dokcer-compose config -q
检查配置,有问题才有输出
docker-compose restart
重启服务
docker-compose start
启动服务
docker-compose stop
停止服务
docker-compose ps
列出项目中所有的容器
docker-compose stop
停止docker-compose
docker-compose logs
查看容器中日志信息
docker-compose pull
拉取服务依赖的镜像
Docker Compose常用配置
Image 镜像名称;
Build 根据docker file 打包 成镜像;
Context 指定docker file文件位置;
Commond 使用command可以覆盖容器启动后默认执行的命令;
Container_name 容器名称;
depends_on 指定依赖那个服务;
Ports 映射的端口号;
extra_hosts 会在/etc/hosts文件中添加一些记录;
Volumes 持久化目录;
volumes_from 从另外一个容器挂在数据卷;
Dns 设置dns
一些批量的删除方法
docker rm $(docker ps -aq)
docker stop $(docker ps -q) & docker rm $(docker ps -aq) ---删除所有的容器
docker rmi $(docker images -q)