docker笔记(挺详细的)

一.docker介绍

1什么是docker
◆使用最广泛的开源容器引擎
◆一种操作系统级的虚拟化技术
◆依赖于Linux内核特性:Namespace和Cgroups
◆一个简单的应用程序打包工具

2.docker的设计

◆提供简单的应用程序打包工具
◆开发人员和运维人员职责逻辑分离
◆多发环境保持一致
3.docker的基本组成
◆Docker Client:客户端
◆Docker Daemon:守护进程
◆Docker Images:镜像
◆Dcoker Container:容器
◆Docker Registry:镜像仓库

在这里插入图片描述

4.容器 VS 虚拟机
ContainerVM
启动速度秒级分钟级
运行性能接近原生5%损失
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级别系统级(更彻底)
操作系统只支持Linux几乎所有
封装程序只打包项目代码和依赖关系,共享宿主机内核完整的操作系统
5.docker应用场景
◆应用程序打包和发布
◆应用程序隔离
◆持续集成
◆部署微服务
◆快速搭建测试环境
◆提供PaaS产品(平台即服务)
6.支持平台

Linux(centos,Debian,Oracle Linux,RHEL,SUSE和Ubuntu)
MAC
Windows
在这里插入图片描述

二.Linux下安装docker

1.关闭防火墙

systemctl stop firewalld 
systemctl disable firewalld  //设置禁止开机自启动

2.修改/etc/selinux/config

将为SELINUX=disabled  //重启后生效

3.卸载旧版本

 yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

4.设置存储库

yum install -y yum-utils

5.配置docker源

 yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

6.安装docker

yum install -y docker-ce

7.将docker加入开机自启动

systemctl start docker
systemctl enable docker

8.通过运行hello world映像来验证Docker引擎安装是否正确。

 docker run hello-world

9.查看已安装docker版本

docker -v

10.查看docker详细信息

docker info

三.docker的简单操作

1.启动一台容器并查看

docker run -it nginx

解析 :docker run 使用
-i 交互式的
-t 分配终端
-d 把容器放在后台运行

在这里插入图片描述

2.查看容器状态

docker ps

在这里插入图片描述

3.查看正在运行容器的ip

docker inspect 6901c8bf4e2a 

解析:docker inspect 虚拟机ID(使用docker ps查看的CONTAINER ID 列)
在这里插入图片描述

4.连接docker的容器

docker exec -it 6901c8bf4e2a bash

解析:docker exec -it 虚拟机的ID bash

四.镜像的管理

镜像是什么?
◆一个分层存储的文件
◆一个软件的环境
◆一个镜像可以创建N个容器
◆一种标椎化的交付
◆一个不包含linux内核而又精简的linux操作系统
镜像不是单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME>查看镜像中各层内容及大小,每层对应着dockerfile中的一条指令。docker镜像默认存储在/var/lib/docker/<strorage-driver>中。

镜像从哪里来?
Docker Hub是有Docker公司负责维护的公告注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
地址:https://hub.docker.com/search?q=&type=image

配置镜像加速器:https://www.daocloud.io/mirror
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

1.配置国内docker源

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。
重启docker服务

systemctl restart docker

2.拉取镜像

解析:pull拉取一个nginx镜像

docker pull nginx:1.12

解析:冒号后面加上版本号,不加默认下最新版本

3.查看docker现有镜像

docker images

查看docker分层信息

在这里插入图片描述
如图,容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。
如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统过来操作的,并不会修改镜像的源文件,这种方式提高磁盘利用率。
Docker镜像默认存储在/var/lib/docker/overlay2中。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层

 docker history nginx:1.14

解析:nginx:1,12 指定查看的镜像加具体的版本信息(只能查看本地已缓存的镜像文件)

5.docker支持的驱动

在这里插入图片描述

五.镜像管理命令

管理镜像的常用命令

命令描述
使用方法docker + image + 命令
ls列出镜像
build构建镜像来自Dockerfile
history查看镜像信息
inspect显示一个或多个镜像详细信息
pull从镜像仓库拉取镜像
push推送一个镜像到镜像仓库
rm移除一个或多个镜像
prune移除未使用的镜像。没有被标记或者没有被任何容器引用的。
tag创建一个引用源镜像标记到目标镜像
export导出容器文件系统到tar归档文件
import导出容器文件系统tar归档文件创建镜像
save保存一个或多个镜像到一个tar归档文件
load加载镜像来自tar归档或标准输入

1:拉取镜像

docker image pull nginx:1.15

解析:冒号后面加上版本号,不加默认下最新版本

2:查看现有镜像

docker images

3:删除镜像

docker image rm nginx:1.14

4:镜像标签

 docker image tag nginx:1.15 nginx:a12

5:保存镜像

docker save nginx:1.15 > nginx1.15.tar

6:导入镜像

docker image load < centos.tar 

7:运行容器(运行的虚拟机)

docker run -itd centos

8:导出容器

docker export 容器id > centos.tar

解析:查看容器id:docker ps

9:导入容器(保存为镜像仓库)

docker import centos.tar centos:1.1 

解析:centos1:1 是创建的一个镜像标签(如果没有则镜像名称显示为none)

6.容器的管理

选项描述
-i , -interactive交互式
-t , -tty分配一个伪终端
-d, -detach运行容器到后台
-e, env设置环境变量
-p , -publish list发布容器端口到主机
-P ,-publish-all发布容器所有EXPOSE的端口到宿主机随机端口
-name string指定容器名称
-h,-hostname设置容器主机名
-ip string指定容器IP,只能由于自定义网络
-network连接容器到一个网络
-mount mount将文件系统附加到容器
-v, -volume list绑定挂载一个卷
-restart string容器退出重启策略,默认no,可选值;[always

扩展创建容器命令

docker container run -d --name web -e test=123456 -p 88:80 nginx -h nginx

命令解析

--name 为容器起一个名字
-e     创建容器是指定变量
-p     将宿主机的88端口映射到容器的80端口
-h     修改容器的主机名默认名字随机 

在这里插入图片描述

docker run -d --name web2 -P nginx

这条命令的意思是创建一个名为web2的容器,并在主机创建一个随机端口。
在这里插入图片描述

7.容器的资源限制

1.内存限额:

允许容器最多使用500M内存和100M的Swap,并禁用OOM kiler:

docker run -d --name nginx01 --memory="500m" --memory-swap="600m" --oom-kill-disable nginx

2.cpu限额:

允许容器最多使用一个半CPU:

docker run -d --name nginx02 --cpus="1.5" nginx

允许容器最多使用50%的CPU:

docker run -d --name nginx03 --cpus".5" nginx

3.扩展管理容器常用命令

选项描述
ls列出容器
inspect查看一个或多个容器详细信息
exec在运行容器中执行命令
commit创建一个新镜像来自一个容器
cp拷贝文件/文件夹到一个容器
logs获取一个容器日志
port列出或指定容器端口映射
top显示一个容器运行的进程
stats显示容器资源使用统计
stop/start停止/启动一个或多个容器
rm删除一个或多个容器

这条命令在容器外面执行ls

 docker exec web6 ls /

演示commit命令
可以在操作下面命令之前,连接web6容器之后,在容器里创建文件夹。
执行过下面的命令之后,可以连接web8容器,在里面就可以看见之前在容器里创建
的文件。

docker commit web6 nginx6-1    /将容器web6变成一个新的镜像
docker run -d --name web8 nginx6-1  /使用nginx6-1镜像创建一个名为web8的容器 

演示cp命令

[root@localhost ~]# docker cp centos.tar web5:/
[root@localhost ~]# docker exec -it web5 ls /
1  4	boot	    docker-entrypoint.d   home	 media	proc  sbin  tmp
2  5	centos.tar  docker-entrypoint.sh  lib	 mnt	root  srv   usr
3  bin	dev	    etc			  lib64  opt	run   sys   var

其他命令都很简单就不演示了。

8.管理应用程序数据

1.将数据从宿主机挂载到容器的三种模式

Docker提供三种方式将数据从宿主机挂载到容器中:
◆ volumes: Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
◆ bind mounts: 将宿主机上的任意位置的文件或者目录挂载到容器中
◆ tmpf: 挂载存储在主机系统中的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
在这里插入图片描述

2.Volume

管理卷
1.创建一个数据卷

docker volume create nginx-vol

命令解析:docker volume create 数据卷名称
2.查看现有的数据卷

docker volume ls

3.查看数据卷的详细信息

docker volume inspect nginx-vol

在这里插入图片描述
用卷创建一个容器

docker run -d --name web --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
命令解析:src=使用哪个卷
         dst=将

查看结果

ls /var/lib/docker/volumes/nginx-vol/_data

清理数据卷

docker stop nginx-vol  停止数据卷
docker rm nginx-vol  删除数据卷
docker volume rm nginx-vol 也是删除数据卷的一种方法

注意:
1.如果没有指定卷,自动创建
2.建议使用–mount,更通用。
扩展Bind Mounts
用卷创建一个容器,名称为nginx2,并放到后台,将宿主机的89端口映射到容器的80端口,将宿主机中的目录/文件挂载带容器中的目录。

docker run -d --name nginx02 -p 89:80  --mount type=bind,src=/mnt/,dst=/usr/share/nginx/html nginx
命令解析:src=属主机的目录或文件
         dst=容器中的目录或文件

注意:
1.如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
2.如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。

Volumete特点:
◆ 多个运行容器之间共享数据。
◆ 当容器停止或被移除时,该卷依然存在。
◆ 多个容器可以同时挂载相同的卷。
◆ 当明确删除卷时,卷才会被删除。
◆ 将容器的数据存储在远程主机或其他存储上。
◆ 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)
Bind Mounts特点:
◆ 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
◆ 在Docker主机的开发环境和容器之间共享代码。列如,可以将Maven target目录挂载到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问构建的项目包
◆ 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时

9.容器网络

1.网络模式

◆ bridge
 -net=bridge
 默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
◆ host
  -net=host
  容器不会获得一个独立的network namespace,而是与宿主机共用一个。这意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。
◆ none
  -net=none
  获取独立的network namespace,但不为容器进行任何网络配置需要我们手动配置。
◆ container
  -net=container:Name/ID
  与指定的容器使用同一个network namespace,具有同样的配置信息,两个容器除了网络,其他都还是隔离的
◆ 自定义网络
  与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。

2 .下载这个镜像用于测试

docker pull busybox   这是一个很小的镜像

3.使用busybox镜像创建一个容器

docker run -it busybox

在这里插入图片描述

4.使用busybox镜像创建一个容器并指定网络模式为host

docker run -it --net=host busybox   --net=host指定网络模式

在这里插入图片描述

5.使用busybox镜像创建一个容器并指定网络模式为none

docker run -it --name shiyan  --net=none busybox  指定网络模式为none

在这里插入图片描述

6.使用busybox镜像创建一个容器并加入其它容器的网络模式

docker run -itd --name bs -p99:80 busybox
docker run -itd --name nginx001 --net container:bs nginx  让新创建的容器加入bs的网络模式

7.使用busybox镜像创建容器并使用自定义网络模式

在这里插入图片描述

10.Dockerfile

1.Dockerfile格式

在这里插入图片描述

2.Dockerfile指令
指令描述
FROM构建新镜像是基于那个镜像
MAINTAINER镜像维护者姓名或邮箱地址
RUN构建镜像时运行的shell命令
COPY拷贝文件或目录到镜像中
ENV设置环境变量
USER为RUN,CMD,和ENTRYPOINT执行命令指定用户
EXPOSE声明容器运行的服务端口
HEALTHCHECK容器中服务健康检查
WORKDIR为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录
ENTRYPOINT运行容器是执行,如果有多个ENTRYPOINT指令,最后一个生效
CMD运行容器是执行,如果有多个CMD指令,最后一个生效
3.Build镜像

Usage:docker build [OPTIONS] PATH |URL| - [flags]
Options:
-t, - -tag list #镜像名称**
-f, - - file string #指定Dockerfile位置
#docker bulid .
#docker bulid -t shykes/myapp .
#docker bulid -t shykes/myapp -f /path/Dockerfile /path
#docker bulid -t shykes/myapp http://www.example.com/Dockerfile

4.
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值