docker
Posted @红茶不加糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker相关的知识,希望对你有一定的参考价值。
1. 初始docker
1.1 docker概念
Docker是一个管理容器的软件, 容器: 可以理解为"没有操作系统内核的虚拟机",容器的运行需要借助宿主机的操作系统内核
Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,
1.2 安装docker
官网:https://www.docker.com
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
1.3 相关概念
- **镜像(Image):**Docker 镜像,就是安装操作系统的时候所使用的"系统镜像"。
- 容器(Container):就是根据"系统镜像"创建出来的"没有操作系统内核的伪虚拟机"。
- 仓库(Repository):保存镜像的的仓库。
2. docker命令
2.1 服务相关命令
2.1.1 启动docker服务
systemctl start docker
2.1.2 停止docker服务
systemctl stop docker
2.1.3 重启docker服务
systemctl restart docker
2.1.4 查看docker服务状态
systemctl status docker
2.1.5 开机启动docker服务
systemctl enable docker
2.2 Docker 镜像相关命令
2.2.1 查看镜像
docker images #查看所用镜像 REPOSITORY:镜像名称,TAG:镜像标签,IMAGE ID:镜像ID,CREATED:镜像的创建日期,SIZE:镜像大小
2.2.2 搜索镜像
docker search 镜像名称 #从网络中查找需要的镜像
2.2.3 拉取镜像
docker pull 镜像名称
2.2.4 删除镜像
docker rmi 镜像id(镜像名称) # 删除指定本地镜像
docker rmi `docker images -q` # 删除所有本地镜像
2.3 容器相关的命令
2.3.1 查看容器
docker ps –a #查看所有容器,包括正在运行和停止的容器
2.3.2 创建容器
docker create 参数 镜像名称:版本号
#参数可以包含: --name 容器名 -p 端口映射 -v 目录映射
2.3.3 启动容器
docker start 容器名称或者容器id
2.3.4 进入容器
docker exec -it 容器名 /bin/bash
2.3.5 创建并启动容器
docker run 参数 create参数 /bin/bash #相当于create + start + exec
注意:
docker run -it create参数 /bin/bash #创建并运行的是"交互式容器",也就是,当退出容器时,容器自动关闭
docker run -id create参数 /bin/bash #创建并运行的是"守护式容器",也就是,当退出容器时,容器不会关闭
2.3.6 停止容器
docker stop 容器名称或者容器id
2.3.7 删除容器
#删除指定容器-需要停止容器才能删除
docker rm 容器名称或者容器id
# 删除所有容器:
docker rm `docker ps -a -q`
2.3.8 查看容器信息
docker inspect 容器名称或者容器id
3. 映射通道
3.1 概述
docker所创建的容器, 理论上来说, 是于外部机器隔离的.
如果外部机器想访问docker容器, 就必须先访问宿主机, 由宿主机把请求传达给容器.
外部机器 --> 宿主机 --> docker容器
为了方便外部机器访问docker容器, 需要在宿主机与docker容器之间建立映射通道
当外部机器访问宿主机的映射通道时, 映射会自动把对应的请求映射到docker容器内部.
映射通道分为两种: 目录映射, 端口映射
3.2 目录映射
-v 宿主机目录:容器目录
注意:
1.必须在创建容器时指定
2.一个容器可以指定多个目录映射
3.目录必须是绝对路径
3.3 端口映射
-p 宿主机端口号:容器端口号
注意:
1.必须在创建容器时指定
2.一个容器可以指定多个端口映射
4. Dockerfile
4.1 概述
- Dockerfile是一个文本文件. 文件中记录的是"创建镜像的每条指令"
- 每一条指令都是一个操作镜像的步骤
- 可以根据文件生成一个镜像
- Dochub网址:https://hub.docker.com
4.2 步骤
① 创建Dockerfile文件, 文件名任意
② 在文件中书写Dockerfile语法
③ 通过dockerfile构建镜像:
docker bulid -f dockerfile文件路径 -t 自定义镜像名称:自定义版本 .
4.3 语法
关键字 | 作用 | 备注 |
---|---|---|
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 |
4.4 案例
FROM centos:7 #定义父镜像,也就是在这个镜像的基础上继续操作
MAINTAINER itheima <itheima@itcast.cn> #定义作者信息
RUN yum install -y vim #在父镜像内部要指定的命令,可以有多个
WORKDIR /usr #运行由该镜像生成的容器时,默认进入的路径
CMD /bin/bash #运行由该镜像生成的容器时,默认执行的命令
5. Docker Compose
5.1 概述
- Docker Compose 中文名称叫做"容器编排"
- 是用于定义和运行多容器 Docker 应用程序的工具
- 简单来说,通过 Compose,可以使用 YML 文件来配置需要启动的所有容器,也可以指定这些容器的启动顺序。
5.2 下载及安装
5.2.1 下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
5.2.2 设置执行权限
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
5.3 步骤
① 创建docker-compose.yml文件
② 在文件中定义docker-compose语法
③ 执行 docker-compose up
命令来启动并运行整个应用程序
5.4 语法
# compose 版本信息,不同版本的compose 有差异。
version: '3'
# 一个service代表一个服务编排
services:
# 用户自定义的容器名称(在一个services中可以有多个容器)
容器名称:
# 指定创建容器的Dockerfile文件,与image存在一个即可
build:
context: .
dockerfile: Dockerfile文件路径
# 指定创建容器的镜像和版本号。版本号默认为latest
image: 镜像名称:版本号
# 执行的命令。会覆盖镜像中CMD内容
command:
- 命令
- 命令
# 目录挂载(设置数据卷)
volumes:
- 宿主机路径:容器路径
- 宿主机路径:容器路径
# 端口映射
ports:
- "宿主机端口号:容器端口号"
- "宿主机端口号:容器端口号"
# 链接的容器
links:
- 容器名
- 容器名
# 依赖的容器。简单来说,就是先启动指定的容器,然后再启动当前容器
depends_on:
- 容器名
- 容器名
# 对外暴露的端口
expose:
- "8080"
# 环境变量
environment:
- 变量名=变量值
# 环境变量文件。当需要设置的环境变量比较多时,可以直接指定配置文件,文件一般为env结尾。文件格式是properties形式
env_file:
- 文件路径
容器名称:
.....
以上是关于docker的主要内容,如果未能解决你的问题,请参考以下文章