Docker知识点整理

Docker工具学习与应用

标签(空格分隔): 测试工具

一、容器与虚拟化

1.1 Docker简述

1.1.1 一些特性
  • 容器没内核,直接运行在宿主机内核上,能使用宿主机最大系统资源
  • 启动速度较快
  • 迁移方便
1.1.2 组件
  • image 镜像
  • container 容器
  • dockerhub 镜像仓库
  • dockerfile 部署的操作文件
1.1.3 用户获取docker权限
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker  #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker images    #测试docker命令是否可以使用sudo正常使用
1.1.4 引用Docker优势

使用前:

  • 环境不兼容
  • 破坏当前宿主机环境
  • 卸载环境残余

使用后:

  • 解决环境兼容问题
  • 保证宿主机环境干净
  • 迁移方便

1.2 Docker指令

1.2.1 获取镜像

从Dokcer镜像站中拉取

# 搜索
docker search 镜像名:tag   # tag就是具体的版本
# 拉取
docker pull nginx    
1.2.2 查看当前镜像
docker image ls
# 或者
docker images 镜像名(:tag)  
    -q             # 只列出id
    --format  ""   # 格式化显示 
    -a             # 列出所有镜像
# 查看镜像信息    
docker info 
# 查看镜像详细信息
docker image inspect 镜像ID
1.2.3 删除镜像
docker rmi 镜像ID/名字/容器使用记录/反引号引用(如下)
           `docker images -aq`    

指定ID的前三位也可

删除容器

docker rm 容器ID
          `docker ps -aq`
1.2.4 运行镜像
  • -d 后台运行容器
  • -p 80:80 端口映射(宿主机端口:容器内端口)

    netstat -tunlp 查看当前宿主机的端口占用情况

  • -i 交互式命令操作
  • -t 开启一个终端
  • –rm 容器退出时删除该容器
docker run 参数 镜像的名字/ID  (/bin/bash)

/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash。

run的作用是创建加启动,如果镜像不存在本地,就会去下载该镜像

1.2.5 导入/导出镜像
# 导出
docker image save centos:7.8.2003 > /opt/centos782003.tgz
# 导入
docker image load -i /opt/centos782003.tgz

1.2.6 查看容器运行状态
docker ps 
# CONTAINER ID   IMAGE     COMMAND     CREATED    STATUS         PORTS           NAMES
# 容器ID         依赖镜像  运行的命令     创建时间    运行持续时间    容器的端口映射   容器生成的随机名字
1.2.7 停止容器
docker stop 容器ID

1.3 Docker 的生命周期

  1. Dockerfile:构建镜像的脚本
  2. Images: 镜像文件
  3. Push/Pull:从仓库里拉取与推送
  4. Save/Load: 本地镜像文件导入与导出
  5. Start/Restart/Stop:镜像文件的启停
  6. Containers:具体的容器
  7. Commit:将容器生成镜像

1.4 镜像原理

linux内核:提供操作系统基本功能,和硬件交互(读取磁盘数据的内存管理、进程调度、文件管理、管理网络)
centos、ubuntu:提供软件功能,如apt、yum安装等
cat /etc/redhat-release 查看centos版本
cat /etc/lsb-release 查看ubuntu版本

一个完整的系统 = linux内核 + 发行版

Docker镜像分层原理
镜像相当于【发行版】作用,需要准备好linux内核,上层使用不同【发行版】。

Docker 通过联合文件系统,将不同层整合为一个文件系统,为用户隐藏了多层视角。
视频链接

Docker镜像是在基础镜像之后开始安装软件,配置软件,添加新的层构建出来

特性点

  • 多个容器共享一个镜像
  • 容器写入存在复制特性

容器运行后会在最上层创建一个可写的容器层,其他的基础镜像层是只读的。一切操作都是在容器层,会从上往下寻找需要的内容。
删除操作会对镜像层记录删除操作。

1.4.1 镜像和容器的关系

docker 容器=镜像+可读层
简单来说,镜像是文件,容器是进程。
容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
参考链接

二、容器管理

2.1 容器运行

docker run = 创建 + 启动
每次执行都会产生 容器记录

docker run 参数(-it) 容器名字/ID (某条命令)

  • -d 参数 表示在后台运行
  • –rm 一般调试用,用于某程序挂了自动删除记录
  • –name 给容器设置参数
  • -p (宿主机端口:容器内端口) 端口映射
  • -P 随机端口映射
2.1.1 注意点
  • 容器内的进程必须处于前台运行,否则会直接退出
2.1.2 日志查看
docker logs -f  容器ID  
# -f 代表实时刷新,不加则表示打印所有的
2.1.3 进入正在运行的容器
docker exec -it 容器ID  bash

/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash。

2.1.4 查看容器映射端口
docker port 容器ID
2.1.5 容器提交
docker commit  容器ID 镜像名

对容器进行操作后提交生成新的镜像。

三、DockerFile 镜像定制

3.1 主要组成

基础镜像信息 FROM 镜像名
制作镜像指令 RUN 语句
容器启动时候执行指令 CMD 【“bin/bash”】

3.2 指令集

FROM 指定基础镜像版本
MAINTAINER 指定维护者信息,可以没有
RUN 为容器安装配置一些环境,依赖软件等
ADD 添加宿主机文件到容器内,但是多了一个自动解压操作
COPY 添加宿主机文件到容器内,无任何别的操作(会保留元数据,如权限和访问时间等)
WORKDIR 设置工作目录,相当于cd 某个目录
VOLUME 设置存储卷,目录映射
EXPOSE 在容器内暴露端口
CMD 容器启动后运行的指令

3.3 构建流程

1.编写dockerfile文件

FROM nginx
RUN echo '<meta charset='utf-8'>阿畅学Docker' > /usr/share/nginx/html/index.html

2.构建镜像

docker build XXXXX

3.修改镜像名

docker tag  镜像ID  想要修改的名字

3.4 部分指令说明

3.4.1 ADD

特性和COPY基本一致,有以下特点

  1. 源文件是URL,docker 会访问该URL,放入目标路径,权限为6 0 0 ,需要加RUN指令进行调整。
  2. 源文件是URL,且为压缩包,不会自动解压,需要使用RUN指令去解压。
  3. 源文件是压缩文件(gzip,bzip2,xz,tar)等,会自动解压到目标路径。
3.4.2 CMD

CMD [“参数1”,“参数2”](注意需要中括号)

容器内没有后台进程概念,必须前台运行。容器是为了主进程存在的。
启动容器应该如下
CMD [“nginx”, “-g”, “daemon off;”]

3.4.3 ENTRYPOINT

作用和CMD一样,若dockerfile中同时存在CMD和ENTRYPOINT,会把CMD的内容当做参数传给ENTRYPOINT

一些坑

  1. CMD运行的指令如果不是前台运行的,会立刻挂掉容器,生成容器使用记录。
  2. dockerfile如果有CMD指令,生成的容器 通过 docker run XXXX (指令语句),指令语句会 覆盖 dockerfile里的CMD指令。
    • 一个方法是使用完整语句覆盖原先的
    • 另一个是使用 ENTRYPOINT ,可以在run后跟指令语句实现新增
3.4.4 ENV和ARG

设置环境变量

# dockerfile脚本
ENV NAME="Tian"
ENV AGE="18"
ENV MYSQL_VERSION=5.6

# 后续语句所有操作都可以通过 $变量名 使用,方便维护dockerfile脚本

# ARG 和 ENV 都一样设置环境变量
# ENV在构建镜像和容器运行时可以使用
# ARG只能用于构建镜像需要设置,容器运行时候消失
3.4.5 VOLUME

容器运行时,存储层不写入任何数据,运行在容器内产生数据,推荐方式是挂载,写入宿主机,进行维护。
作用是将容器内的目录挂载到宿主机上.
也可以通过docker run -v 参数进行映射挂载操作

VOLUME  路径
# 
VOLUME ["/data1","/data2"]
3.4.6 EXPOSE

指定容器运行时对外提供的端口

docker port 容器ID
# 查看容器的端口
3.4.7 WORKDIR

用于dockerfile中指定工作目录

3.4.8 USER

用于改变环境,用于切换用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值