Docker学习笔记

Docker学习笔记

1、容器化

1.1、容器简单概念

初始概念:一个服务器的三种进程想放入不同的容器中
Docker学习笔记_第1张图片
早期的虚拟化技术:宿主机上安装虚拟机,实现不同的操作系统,不同的程序运行
Docker学习笔记_第2张图片
发展到现在的容器技术,通过docker引擎(或者其他容器)把不同的进程连接到宿主机操作系统上
Docker学习笔记_第3张图片

1.1.2、进程隔离的几个方面

Docker学习笔记_第4张图片

1.1.3、 什么是Docker

  • Docker是基于容器化技术的轻量级解决方案
  • Docker是容器引擎,把Linux的cgroup,namespace等容器底层技术进行封装抽象,为用户提供了创建和管理容器的便捷界面
  • Docker容器技术的优点
    Docker学习笔记_第5张图片

1.1.4 docker部署及dockerhub注册

selink设置

docker部署1
docker部署2

****docker login遇到的问题

Error response from daemon: Get “https://registry-1.docker.io/v2/”: unauthorized: incorrect username or password

2、docker镜像

2.1 Docker镜像的结构

Docker学习笔记_第6张图片

镜像的结构:

${registory_name} / ${repository_name} / ${image_name}:
${tag_name}

  • registory:远端仓库的地址url
  • repository_name:分类仓库的名称
  • image_name:镜像名称
  • tag_name:标签名称

例子:docker.io/library/alpine:3.10.1

2.1 docker镜像管理

1、Linux命令行

<-----镜像搜索----->
docker search alpine
<-----镜像下载----->
docker pull alpine
docker pull alpine:3.10.1 下载指定版本
<-----查看本地镜像----->
docker images/docker image ls
docker images|grep alpine ==>查看带有alpine的镜像
<-----给镜像打标签,不同的标签可以指向同一个镜像----->
docker tag $image_id docker.io/library/alpine:v3.10.3(路径)
<-----推送镜像,也就是把镜像推送到docker hub上----->
docker push docker.io/library/alpine:v3.10.3(路径)
<-----删除镜像,rmi===remove images ----->
docker rmi docker.io/library/alpine:vv3.10.3 ===>只删除了标签
docker rmi -f $image_id ====> 彻底删除镜像
<------登录镜像------->
docker login docker.io

Docker学习笔记_第7张图片
Docker学习笔记_第8张图片

***2.1.2、docker的镜像管理详解

  • 典型的Linux文件系统由bootfs和rootfs两部分组成-
  • bootfs (boot file system)主要包含bootloader和kernel,
    bootloader主要是引导加载kernel,当kernel被加载到内存中后bootfs就被umount了。
  • rootfs (root file system) 包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。
  • Docker容器是建立在Aufs基础上的,(Advanced Union FS)是一种Union FS, 简单来说就是支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种layer的概念。
  • Aufs将挂载到同一虚拟文件系统下的多个目录分别设置成read-only,read-write以及whiteout-able权限,对read-only目录只能读,而写操作只能实施在read-write目录中。
  • 重点在于,写操作是在read-only上的一种增量操作,不影响read-only目录。当挂载目录的时候要严格按照各目录之间的这种增量关系,将被增量操作的目录优先于在它基础上增量操作的目录挂载,待所有目录挂载结束了,继续挂载一个read-write目录,如此便形成了一种层次结构。

Docker学习笔记_第9张图片
Docker的镜像特性

  • Docker镜像位于bootfs之上
  • 每一层镜像的下面称为其父镜像
  • 第一层镜像为Base Image
  • 容器在其最顶层
  • 其下的所有层都为readonly
  • Docker将readonly的FS层乘坐“image”,image都只是可读
  • 每次都只是同步增量部分

*** Docker 推送远程镜像仓库遇到的问题

Docker学习笔记_第10张图片

原因分析:在build自己的镜像的时候添加tag时必须在前面加上自己的dockerhub的username,如下图红圈所示,然后再push就可以了

3、Docker容器的基本操作

*容器启动过程四个步骤:

  • Docker客户端联系Docker服务端。
  • Docker服务端从Docker中心拉取“hello-world”镜像。
  • Docker服务端(用新拉的镜像)创建了一个新的容器,该容器运行可执行文件(脚本),生成您当前读取的输出。 - Docker服务端将信息流推到Docker客户端,由客户端展示在你的终端。

1、linux命令行

<----列出本地容器的进程----->
docker ps -a ===>无论存活或者删除的容器都列出来
docker ps ===>只列出还存在的容器
<----启动容器(运行镜像)----->
docker run [OPTIONS] image [COMMAND][ARG...]
OPTIONS:
-i:表示启动一个可交互的容器,并且持续打开输入标准
-t:表示使用终端关联到容器的标准输入输出
-d:表示将容器放置到后台运行
-rm:表示退出后即删除容器
-name:表示定义容器唯一的名称
image:表示镜像
[COMMAND]:表示启动容器时要运行的命令

<----查看宿主机进程----->
ps aux|grep sleep|grep -v grep

<----进入容器----->
docker exec -ti  容器id /bin/sh

<----停止容器进程----->
docker stop 容器id

<----重启容器进程----->
docker start/stop/restart 容器id/容器名称

<----删除容器----->
docker rm [-f] 容器名称
docker rmi [-f] 容器名称 # 删除本地一个或多个镜像,-f强制删除

for i in `docker ps -a|grep -i exit|awk '{print $1}'`;do docker rm -f $i;done

<----从容器创建一个新的镜像----->
docker commit -p (容器名)myalpine (新的镜像名)oldboy1103/alpine:v3.10.3_with_1.txt


<----导入/导出镜像----->
<----导出----->
docker images 
docker save $image_id > alpine:v3.10.3_with_1.txt.tar
<----导入----->
docker load <alpine:3.10.3_with_1.txt.tar

<----查看日志----->
docker logs $image_id


持续输入输出的容器
Docker学习笔记_第11张图片
非交互式的容器
在这里插入图片描述
后台运行,加一个sleep 300==>后台运行时间可以持续5分钟
在这里插入图片描述
导出镜像
Docker学习笔记_第12张图片
导入镜像
Docker学习笔记_第13张图片
查看日志
在这里插入图片描述
Docker学习笔记_第14张图片

4、Docker的高级操作

4.1 映射端口

<------映射端口------->
docker run -p 容器外端口:容器内端口
docker run --rm(用完就删) --name(起名) mynginx -d -p81:80 oldboy1103/nginx:v1.12.2

Docker学习笔记_第15张图片
Docker学习笔记_第16张图片

4.2 挂载数据卷

Docker学习笔记_第17张图片

<-------挂载数据卷--------->

mkdir html
wget www.baidu.com -O index.html
docker run -v 容器外目录:容器内目录
![请添加图片描述](https://img-blog.csdnimg.cn/df72b4bc935945e4949f103b62b21c87.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVG9uQ0M=,size_20,color_FFFFFF,t_70,g_se,x_16)

Docker学习笔记_第18张图片
Docker学习笔记_第19张图片
Docker学习笔记_第20张图片

4.3 传递环境参数

docker run -e 环境变量key=环境变量value

Docker学习笔记_第21张图片

4.4 容器内安装软件

yum/apt-get/apt

yum源一般是在etc/yum/repos.d
debian系发行版使用的更多 etc/apt/sources.list
Rehat系发行版使用的更少

5、Dockerfile

5.1 Dockerfile概述

1、容器的生命周期

  • 检查本地是否存在镜像,如果不存在就从远端仓库检索
  • 利用镜像启动容器
  • 分配一个文件系统,并在只读的镜像层外挂载移断层可读写层
  • 从宿主机配置的网络接口中桥接一个虚拟机接口到容器
  • 从地址池配置一个ip地址给容器
  • 执行用户指定的指令
  • 执行完毕后容器终止

Docker学习笔记_第22张图片
2、docker镜像制作的途径

  • docker commit
  • Dockerfile
    dockerfile通过指令构建镜像
    txt文件

    Docker学习笔记_第23张图片
    Docker学习笔记_第24张图片
    3、Dockerfile的规则

3.1 基本规则
Docker学习笔记_第25张图片
3.2 四组核心的Dockerfile指令

  • USER/WORKDIR指令
  • ADD/EXPOSE指令
  • RUN/ENV指令
  • CMD/ENTRYPOINT指令

1、进入编辑模式
在这里插入图片描述
2、创建

USER/WORKDIR指令
Docker学习笔记_第26张图片
Docker学习笔记_第27张图片
ADD/EXPOSE指令
Docker学习笔记_第28张图片
Docker学习笔记_第29张图片
RUN/ENV指令

Docker学习笔记_第30张图片

Docker学习笔记_第31张图片
CMD/ENTRYPOINT指令

docker CMD/ENTRYPOINT指令

5.2 Docker的四种网络模型

1、NAT模式(默认)

Docker学习笔记_第32张图片
2、None ------ Docker中不需要由网络设备或者网卡,不对外i提供http服务,tcp服务等等

Docker学习笔记_第33张图片

3、Host——Docker没有用到NAT的网络,而是跟宿主机保持一致
Docker学习笔记_第34张图片
4、联合网络

Docker学习笔记_第35张图片

你可能感兴趣的:(docker,容器,运维)