什么是Docker?
-
定义:是一个开源的、流行的、牛逼的容器技术
-
场景:
- Docker在多环境中(开发、测试、生成)过程中迁移环境
- 自动化运维
- DevOps
- GitOps
- AiOps
-
特点:
- 容器是完全使用沙箱机制,相互隔离
- 容器性能开销极低(体积小和启动快)
-
原理
- daemon守护进程,监控docker容器运行状态【了解】
- docker客户端:用于数据docker指令操作docker的客户端
- image(镜像):是docker容器运行的程序包(类似被人写的jar)
- repository(镜像仓库):用于存放镜像程序包
- container(容器):docker镜像运行后的转态
Docker安装
环境要求:centos7及以上
- 安装软件
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源,/etc/yum.repos.d
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
-
配置
-
创建文件/etc/docker/daemon.json
-
在文件中配置docker镜像源
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]}
-
重启docker 服务
systemctl restart docker
-
Docker服务管理命令【6个】【精通】
- systemctl start docker 启动
- systemctl stop docker 停止
- systemctl restart docker 重启
- systemctl status docker查看状态
- systemctl enable docker 设置开启启动
- systemctl disable docker 设置开启不自动启动
Linux防火墙服务管理命令【6个】【精通】
- systemctl start firewalld 启动
- systemctl stop firewalld 停止
- systemctl restart firewalld 重启
- systemctl status firewalld 查看状态
- systemctl enable firewalld 设置开启启动
- systemctl disable firewalld 设置开启不自动启动
Docker镜像管理命令【6个】【精通】
- docker search 查询可用的镜像(hub.docker.com)
- docker pull [镜像名称,镜像名称:镜像版本]下载镜像
- docker images 查看本地镜像列表
- docker rmi [镜像名称,镜像名称:镜像版本,镜像ID]
- docker tags 设定镜像的名称
- docker push 推送镜像到远程
Docker镜像制作命令【6个】【精通】
-
使用容器制作(注意:制作容器时,只生成容器内的数据)
- docker commit 容器id 镜像名称:镜像版本
- docker save -o 文件名称 把镜像打包成tar压缩包
- docker load -i 文件名称 把tar压缩包恢复成镜像
-
使用Dokcerfile
-
docker build 把dockerfile制作成镜像
docker build -f dockerfile文件 -t 镜像名称:镜像版本 .
-
Docker容器管理命令【8个】【精通】
-
docker run 创建
-
交互式:退出之后,容器自动停止。开发过程,做容器的检查测试
docker run -it --name=[自定义容器名称] 镜像名称:镜像版本 /bin/bash
-
守护式(后台运行):一直后台运行。生成程序运行
docker run -d --name=[自定义容器名称] 镜像名称:镜像版本
-
-
docker exec 进入守护式容器
docker exec -it 容器名称 /bin/bash
-
docker ps 查看容器列表
- docker ps 只查看运行中的容器
- docker ps -a 查看所有容器
-
docker start 容器名称 启动
-
docker stop 容器名称 停止
-
docker restart 容器名称 重启
-
docker rm 容器名称 删除
-
docker inspect 容器名称 查看容器的详细信息
- ip
- 端口
- 网络
Docker 数据卷【了解】
- 作用
- 在宿主机上存放重要数据
- 包括类似mysql数据文件
- 包括部署的程序
- 在宿主机上存放重要数据
Docker创建时的参数【重要】
-
-v 挂载本地文件夹到容器中
- 可以挂载多个目录
dockerrun -d -v 本地目录:容器目录 -v 本地目录:容器目录 -v 本地目录:容器目录 --name=c1 镜像名称 # 下面省去了宿主机的目录,docker会自动创建一个宿主机目录与之挂载 docker run -it --name c3 -v /volume centos
-
-volume-from 复制容器的-v参数到当前容器中
docker run -it --name c3 -v /volume:/volume centos docker run -it --name c1 -v /volume:/volume centos docker run -it --name c2 -v /volume:/volume centos
-
-p 端口映射
- -e 配置系统的环境,可配置多个(environment)
Docker 安装Mysql步骤【熟悉】
-
查找对应的可用镜像
-
下载镜像
-
运行容器
docker run -id \ -p 3306:3306 \ --name=c_mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ mysql:5.7
DockerFile关键字【9个】【精通】
关键字 | 作用 | 重要程度 | 备注 |
---|---|---|---|
FROM | 指定父镜像 | 必要 | 指定dockerfile基于那个image构建 |
MAINTAINER | 作者信息 | 要 | 用来标明这个dockerfile谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 | |
RUN | 执行命令 | 要 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”] |
CMD | 容器启动命令 | 要 | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”] |
ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 | |
COPY | 复制文件 | 要 | build的时候复制文件到image中 |
ADD | 添加文件 | 要 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 |
ENV | 环境变量 | 要 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
ARG | 构建参数 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 | |
VOLUME | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”] | |
EXPOSE | 暴露端口 | 要 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目录 | 要 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
USER | 指定执行用户 | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 | |
HEALTHCHECK | 健康检查 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 | |
ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 | |
STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 | |
SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell |
Docker-compose【熟练】
-
定义:是一个容器编排工具
-
语法:
docker run -it -v ./nginx/conf.d:/etc/nginx/conf.d -p 3307:3306 --name=[自定义容器名称] 镜像名称:镜像版本 /bin/bash
- 文件名称必须是docker-compose.yml
- version: ‘3’ 指定语法版本可用关键字,3~3.7
- services 定义多个服务
- nginx/app 是服务名称 --name
- images 指定基础镜像名称 镜像名称:镜像版本
- ports:指定端口 -p
- links:指定服务可用直接访问的容器列表,服务名称
- volumes:挂载文件目录 类似-v
- expose:暴露端口,作用类似 -p 8080:8080
version: '3' services: nginx: image: nginx ports: - 80:80 links: - app volumes: - ./nginx/conf.d:/etc/nginx/conf.d app: image: app expose: - "8080"
-
命令
- docker-compose up 创建并启动一组容器
- docker-compose down 停止并删除一组容器
- docker-compose start 启动一组容器
- docker-compose stop 停止一组容器