关于docker:docker

13次阅读

共计 8910 个字符,预计需要花费 23 分钟才能阅读完成。

docker 容器虚拟化平台
1. 什么是容器
容器就是在隔离的环境运行的一个过程, 如果过程进行, 容器就会销毁. 隔离的环境领有本人的系统文件,ip 地址, 主机名等
系统文件:kvm 虚拟机,linux, 系统文件
程序: 代码, 命令
过程: 正在运行的程序, 代码运行起来的时候就是一个过程

2. 容器和虚拟化的区别
Linux 容器技术:. 容器虚拟化和 kvm 虚拟化的区别
kvm 虚拟化: 须要硬件的反对, 须要模仿硬件, 能够运行不同的操作系统, 启动分钟级(开机启动流程)
1)Linux 开机启动流程
bios 开机自检
依据 bios 设置的优先启动项 u 盘 boot 网卡 硬盘 光驱
读取 mbr 疏导 2T UEFI(gpt 分区) mbr 硬盘分区信息, 内核加载门路
加载内核
启动第一个过程 /sbin/init systemd
零碎初始化实现
运行服务
……

2)容器启动流程
容器共用宿主机内核
第一个过程, 服务 nginx,httpd,mysql 过程号为 1
容器: 共用宿主机内核. 容器的第一个过程间接运行服务, 轻量级.. 损耗少, 启动块,x 性能高
虚拟机: 须要硬件反对, 须要模仿硬件, 须要走开机流程, 能够运行不同的操作系统

3. 容器技术的倒退历史
1)chroot 技术, 新建一个子系统(领有本人残缺的系统文件)
CHROOT 就是 Change Root,也就是扭转程序执行时所参考的根目录地位。CHROOT 能够增进零碎的安全性,限度使用者能做的事。
wget https://mirrors.tuna.tsinghua…
chroot /opt/

作业一: 应用 chroot 监狱限度 ssh 用户拜访指定目录和应用指定命令

2)linux 容器(lxc)linux container(namespaces 命名空间 隔离环境 及 cgroups 资源限度)
cgroups 限度一个过程可能应用的资源 cpu 内存 硬盘 io
namespaces 资源隔离
kvm 虚拟机资源限度(1c 1G 20G)

装置 lxc
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y

3)docker 容器
10.0.0.11 docker01 host 解析
10.0.0.12 docker02 host 解析
Docker 是通过过程虚拟化技术(namespaces 及 cgroups cpu、内存、磁盘 io 等) 来提供容器的资源隔离与平安保障等. 因为 Docker 通过操作系统层的虚拟化实现隔离, 所以 Docker 容器在运行时, 不须要相似虚拟机 (vm) 额定的操作系统开销, 进步资源利用率
namespace 资源隔离
cgroups 过程的资源限度
kvm 虚构磁盘文件, 资源隔离 qemu-img create test.raw 10G
kvm 资源限度,–cpus –memory
docker 初期把 lxc 二次开发,libcontainer

docker 进行资源隔离的 6 种 namespace

docker 最佳的运行环境是 centos7 3.10

                   centos6 2.6

docker 在起初做了 centos 的 docker

4)docker 和 lxc 的关系
在 2013 年 Docker 刚公布的时候,它是一款基于 LXC 的开源容器治理引擎。把 LXC 简单的容器创立与应用形式简化为 Docker 本人的一套命令体系。随着 Docker 的一直倒退,它开始有了更为远大的指标,那就是反向定义容器的实现规范,将底层实现都抽象化到 Libcontainer 的接口。这就意味着,底层容器的实现形式变成了一种可变的计划,无论是应用 namespace、cgroups 技术抑或是应用 systemd 等其余计划,只有实现了 Libcontainer 定义的一组接口,Docker 都能够运行。这也为 Docker 实现全面的跨平台带来了可能。

(1)Docker 并不是 LXC 的替代品,Docker 的底层就是应用了 LXC 来实现的。LXC 将 Linux 过程沙盒化,使得过程之间互相隔离,并且可能管制各过程的资源分配。
(2)在 LXC 的根底之上,Docker 提供了一系列更强的性能。

4. 部署 docker 容器化平台
4.1 yum 源装置
1) 配置 yum 源
yum install -y yum-utils device-mapper-persistent-data lvm2 #yum 管理工具
yum-config-manager –add-repo http://mirrors.aliyun.com/doc… #增加阿里源
yum-config-manager –add-repo https://download.docker.com/l… #增加官网源
2) 列出 docker-ce 可装置的版本
yum list docker-ce –showduplicates | sort -r
yum install docker-ce-19.03.9-3.el7 #装置 1903 版本
systemctl start docker #启动 docker
systemctl enable docker #退出开机自启动

4.2 本地 rpm 包装置
下载地址 https://download.docker.com/l…
注: 如果装置的是 17 版本要下载 docker-ce-selinux 下载

5.docker 架构
docker 是传统的 c / s 架构, 有 docker clinet 和 docker server 端组成
[root@docker01 ~]# docker version
Client: Docker Engine – Community
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:45:33 2021
OS/Arch: linux/amd64
Context: default
Experimental: true

Server: Docker Engine – Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:43:57 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@docker01 ~]# docker system info/docker info #docker 的后盾信息,Zabbix 取值能够在这里

docker 次要组件有: 镜像、容器、仓库、网络、存储
docker 容器必须须要一个镜像, 仓库中只存储镜像
容器—镜像—仓库

6.docker 初始体验
咱们传统 nginx 搭建 nginx 要有以下步骤
1) 下载压缩包
2) 解压
3) 创立启动用户, 装置依赖
4) 编译装置
而咱们 docker 只须要执行一条命令
docker run –name nginx -d -p 80:80 nginx
Options
Mean

-i
以交互模式运行容器,通常与 -t 同时应用;

-t
为容器重新分配一个伪输出终端,通常与 -i 同时应用;

-d
后盾运行容器,并返回容器 ID;

7.docker 镜像治理
7.1. 搜寻镜像
docker search 搜寻镜像
只有一个名称, 没有 / 宰割代表他是官网镜像
抉择镜像倡议:
1.)官网
2)stars 数量多
官网仓库 hub.docker.com

7.2. 获取镜像
docker pull(push)
镜像加速器: 阿里云加速器,daocloud 加速器, 中科大加速器,Docker 中国官网镜像减速 https://registry.docker-cn.com
docker pull centos6.8(没有指定版本, 默认会下载最新版本)
配置减速: 阿里云

7.3 查看镜像命令
docker images
docker image ls

7.4 删除镜像
docker rmi
docker image rm

7.5 导出镜像
docker save
docker image save > /opt/nginx.tar.gz nginx
docker image save -o /opt/nginx.tar.gz nginx
7.6 导入镜像
docker load
docker image load -I /opt/nginx.tar.gz
docker image load < /opt/nginx.tar.gz

7.7 镜像改名
docker image tag nginx:latest wakuang:latest
8. 容器治理
8.1 启动一个容器

docker run
docker container run –name centos -it /bin/bash
-it 调配一个交互式终端, 启动容器, 并进入 到这个容器里
-d 是指后盾启动
8.2 查问容器
docker ps -a
docker container ls -a
-a 显示所有
-q 只显示 id, 通常状况下在批量删除时候应用
-l 只显示最新创立的容器
–no-trunc 长格局显示所有信息

8.3 进行容器
docker stop Id
docker container stop ID
docker kill container_name/ID

8.4 启动容器
docker start container_n ame/ID
docker container start container_name/ID

8.5 进入容器
docker exec -it container_name/ID /bin/bash
docker container exec -it container_name/ID /bin/bash
docker attach #弃用
nsenter #须要装置一个软件包

8.6 删除容器
docker rm -f container_name/ID
docker container rm -f container_name/ID
-f 强制删除, 能够删除启动中的容器

8.7 容器重命名
docker rename old_container_name new_container_name
列子: docker container rename nginx nginx01

9.docker 容器的网络拜访(端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort
-P 指定监听所有 IP 的随机端口映射到容器的端口
-p ip::configtainerPort
-p hostPort:containerPort:udp
-p 10.0.0.10::53/udp
-p 81:89 -p 443:443

iptables -l nat -L -n
sysctl -a | grep ipv4 | grep rang
net.ipv4.ip_local_port_range = 32768 60999 一个端口池

10.docker 存储卷治理
docker volume 卷治理命令
10.1 挂载目录卷
docker run –name nginx -d -p 80:80 -v /html:/usr/share/nginx/html nginx:latest
10.2 挂载卷名

docker volume create test

默认生成到 /var/docker/volumes 卷的 ID 名中

docker run -v test:/usr/share/nginx/html -d -p 80:80 nginx #如果没有卷会创立
10.3 多网站
[root@docker01 ~]# cat /data/blog.conf
server{
listen 81;
server_name localhost;
location / {

root /data;
index index.html;

}
}

[root@docker01 ~]# cat /html/index.html
<HTML>
<H1>1</H1>
</HTML>

docker run –name nginx -it -p 80:80 -p 81:81 -v /data/blog.conf:/etc/nginx/conf.d/blog.conf -v /html/:/data nginx

10.4 容器卷

第一个日志,

网站配置

conf.d

站点

docker run –name test-volumes –volumes-from nginx

docker restart #

11. 前台守护过程
docker 容器必须有一个前台守护过程, 比方 tail -f 就会始终不退出在前台, 如果没有就会间接退出容器
tail -f
sshd -D
nginx -g“daemon off”
运行的命令, 不退出, 会在前台运行这个过程
-d 的前提也是有一个前台守护过程

12. 容器做成镜像

将容器制作镜像

docker commit ID/container_name new_containername[: 版本号]
-a : 提交的镜像作者;
-c : 应用 Dockerfile 指令来创立镜像;
-m : 提交时的阐明文字;
-p : 在 commit 时,将容器暂停。

12.1 制作单服务镜像
1) 启动制作零碎并装置服务

docker run –name centos6.9 -it centos:centos6.9

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-…
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456 | passwd –stdin root

制作 sshd 镜像必须要先在制作实现之后启动一下 sshd 因为他会生成一些文件

2)讲容器制作成镜像
docker container commit ID/containername centos6:v1

3)测试
docker run –name test1 -d -p 1022:22 centos6.9:v1 /usr/sbin/sshd -D
12.2 制作多服务镜像
1) 启动制作零碎并装置服务

docker run –name test -it centos:centos6.9

rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://file.kangle.odata.cc/r…
curl -o /etc/yum.repos.d/epel.repo http://file.kangle.odata.cc/r…

yum install openssh-server nginx -y
/etc/init.d/sshd start
echo 123456 | passwd –stdin root

2)讲容器制作成镜像
docker container commit ID/containername centos6:v2

3)测试
docker run –name test1 -d -p 80:80 -p 1022:22 centos:v4 su -s /bin/bash -c “/etc/init.d/sshd start;nginx -g ‘daemon off;'” root

12.3 写脚本制作镜像简洁 docker 命令

/bin/bash

/etc/init.d/sshd start
/usr/sbin/nginx -g “daemon off;”

docker run -d -p 1025:22 -p 88:80 centos:v7 /bin/bash /init.sh
12.4 搭建 lnmp 环境
yum install php-fpm php-mbstring php-gd nginx -y
作业一: 搭建一个 lnmp 容器

13.dockerfile 主动构建镜像
13,1 意识 dockerfile 指令
相似于 ansibleplaybook 剧本, 大小几 kb
手动做镜像: 大小几百 M +
docker image history

写之前先手动装置一遍

1.FROM
格局为 FROM image 或 FROM image:tag,并且 Dockerfile 中第一条指令必须是 FROM 指令,且在同一个 Dockerfile 中创立多个镜像时,能够应用多个 FROM 指令。
2.MAINTAINER
格局为 MAINTAINER user_name user_email,指定维护者信息

LABEL:
代替 MAINTAINER

3.RUN
格局为 RUN command 或 RUN [“EXECUTABLE”,”PARAM1″,”PARAM2″…..],前者在 shell 终端中运行命令,/bin/sh -c command,例如:/bin/sh -c “echo hello”;后者应用 exec 执行,指定其余运行终端应用 RUN[“/bin/bash”,”-c”,”echo hello”], 在一个 dockerfile 中只能呈现一个 CMD
4.CMD
反对三种格局:
CMD [“executable”,”param1″,”param2″],应用 exec 执行,这是举荐的形式。
CMD command param1 param2 在 /bin/sh 中执行。
CMD [“param1″,”param2”] 提供给 ENTERYPOINT 的默认参数。
CMD 用于指定容器启动时执行的命令,每个 Dockerfile 只能有一个 CMD 命令,多个 CMD 命令只执行最初一个。若容器启动时指定了运行的命令,则会笼罩掉 CMD 中指定的命令。
5.EXPOSE
格局为 EXPOSE port [port2,port3,…],例如 EXPOSE 80 这条指令通知 Docker 服务器裸露 80 端口,供容器内部连贯应用。
在启动容器的应用应用 -P,Docker 会主动调配一个端口和转发指定的端口,应用 - p 能够具体指定应用哪个本地的端口来映射对外开放的端口。
6.ENV
格局为:EVN key value。用于指定环境变量,这些环境变量,后续能够被 RUN 指令应用,容器运行起来之后,也能够在容器中获取这些环境变量。
例如
ENV word hello
RUN echo $word
7.ADD
格局:ADD src dest
该命令将复制指定本地目录中的文件到容器中的 dest 中,src 能够是是一个绝对路径,也能够是一个 URL 或一个 tar 文件,tar 文件会主动解压为目录。
8.COPY
格局为:COPY src desc
复制本地主机 src 目录或文件到容器的 desc 目录,desc 不存在时会主动创立。
9.ENTRYPOINT
格局有两种:
ENTRYPOINT [“executable”,”param1″,”param2″]
ENTRYPOINT command param1,param2 会在 shell 中执行。
用于配置容器启动后执行的命令,这些命令不能被 docker run 提供的参数笼罩。和 CMD 一样,每个 Dockerfile 中只能有一个 ENTRYPOINT,当有多个时最初一个失效。
10.VOLUME
格局为 VOLUME [“/data”]
作用是创立在本地主机或其余容器能够挂载的数据卷,用来存放数据。
11.USER
格局为:USER username
指定容器运行时的用户名或 UID,后续的 RUN 也会应用指定的用户。要长期应用管理员权限能够应用 sudo。在 USER 命令之前能够应用 RUN 命令创立须要的用户。
例如:RUN groupadd -r docker && useradd -r -g docker docker
12.WORKDIR
格局:WORKDIR /path
为后续的 RUN CMD ENTRYPOINT 指定配置工作目录,能够应用多个 WORKDIR 指令,若后续指令用得是相对路径,则会基于之前的命令指定门路。
13.ONBUILD
格局 ONBUILD [INSTRUCTION]
该配置指定当所创立的镜像作为其余新建镜像的根底镜像时所执行的指令。
例如上面的 Dockerfile 创立了镜像 A:
ONBUILD ADD . /app
ONBUILD RUN python app.py
则基于镜像 A 创立新的镜像时,新的 Dockerfile 中应用 from A 指定基镜像时,会主动执行 ONBBUILD 指令内容,等价于在新的要构建镜像的 Dockerfile 中减少了两条指令:
FROM A
ADD ./app
RUN python app.py
14.docker build
创立好 Dockerfile 之后,通过 docker build 命令来创立镜像,该命令首先会上传 Dockerfile 文件给 Docker 服务器端,服务器端将逐行执行 Dockerfile 中定义的指令。
通常倡议搁置 Dockerfile 的目录为空目录。另外能够在目录下创立.dockerignore 文件,让 Docker 疏忽门路下的文件和目录,这一点与 Git 中的配置很类似。
通过 -t 指定镜像的标签信息,例如:docker build -t regenzm/first_image . ##”.” 指定的是 Dockerfile 所在的门路

13.2dockerfile 构建一个上一个 sshd 镜像

FROM centos:centos6.9
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-…
RUN yum install openssh-server -y
RUN /etc/init.d/sshd start
RUN echo 123456 | passwd –stdin root

docker run -d ssh:v1 /usr/sbin/sshd -D

13.3 排除文件.dockerignore
vim .dockeriginre

13.4 构建 nginx 配置文件

正文完
 0