文章目录
Docker产生的背景
派生出不同的进程来控制不同的服务,——产生了容器技术
虚拟化层的抽象层剥离,使用docker engine
容器的6个名称空间(namespace)
mount | 文件系统、挂载点 |
---|---|
user | 操作进程的用户和用户组 |
pid | 进程编号 |
uts | 主机名和主机域 |
ipc | 信号量、消息队列,共享内存 |
net | 网络设备、网络协议栈、端口等 |
该pid命名空间:进程隔离(PID:进程ID)
该net命名空间:管理网络接口(net:网络)
该ipc命名空间:管理访问IPC资源
该mnt命名空间:管理文件系统挂载点
该uts命名空间:隔离内核和版本标识符
Docker
Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件
是一个开源的应用容器引擎,让开发者可以打包方式封装应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制(隔离机制),相互之间不会有任何接口
沙箱(Sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制
Docker在2013年一炮而红,直到现在,已经成为容器技术的代名词。
Docker从一开始就以提供标准化的运行时环境为目标,真正做到"build once, run anywhere",可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦(不吃操作系统)。在此基础上还进一步发展出了caas(容器即服务〉技术。
小结:Docker 是基于容器技术的轻量级虚拟化的解决方案
docker是 容器引擎,把Linux的cgroup、namespace等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷页面
docker技术的意义
docker 引擎统一了基础设施环境——docker环境
docker 引擎统一了程序打包(装箱)方式——docker镜像
docker 引擎统一了程序部署(运行)方式——docker容器
docker使用环境
打包应用程序简化部署
可脱离底层硬件任意迁移
例:服务器从腾讯云迁移到阿里云
docker核心概念
镜像
一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础依赖包
容器
基于镜像的一种运行时状态
仓库
存放image镜像,
仓库大类:1、公共仓库——docker hub
2、私有仓库 registry harbor
docker和虚拟化的区别
不同点 | container | vM |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行) | 50%左右损失 |
磁盘占用 | MB | GB(操作系统镜像2G) |
数量 | 成百上千(进程) | 一股几十台(操作系统级别) |
隔离性 | 进程级别 | 系统级别(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 克整的操作系统,与宿主机嗝离 |
docker解决了vm的一个环境孤岛的问题
安装20版Docker
环境配置
systemctl stop firewalld.service
setenforce 0
vim /etc/selinux/config
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce社区版
yum install -y docker-ce
启动docker
systemctl start docker
systemctl enable docker
配置镜像加速
加速器介绍地址
配置加速地址
tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://i657xnlq.mirror.aliyuncs.com"]
> }
> EOF
systemctl daemon-reload
systemctl restart docker
网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
docker配置文件
"graph": " /data/docker",
数据目录
"storage-driver": "overlay2",
存储引擎LXc -》overlay —》overlay2
"insecure-registries": ["registry.access.redhat.com","quary.io"]
私有仓库
"registry-mirrors": ["https://q"]
镜像加速
"bip" : "172.7.5.1/24",
docker网络
"exec-opts":[ "native.cgroupdriver=systemd" ],
启动时候的额外参数(驱动)
"live-restore" : true
当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
Docker基本操作命令
镜像操作的基本命令
查看docker 版本信息
格式:docker version
[root@localhost ~]# 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.6
GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d
runc:
Version: 1.0.0-rc95
GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
docker-init:
Version: 0.19.0
GitCommit: de40ad0
镜像搜索
格式:docker search 关键字
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14946 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2032 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 813 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 192
linuxserver/nginx An Nginx container, brought to you by LinuxS… 147
下载nginx镜像
格式:docker pull 关键字
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
69692152171a: Pull complete
30afc0b18f67: Pull complete
596b1d696923: Pull complete
febe5bd23e98: Pull complete
8283eee92e2f: Pull complete
351ad75a6cfa: Pull complete
Digest: sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
下载后存放的路径:/var/lib/docker/image/overlay2/repositories.json
查看镜像
格式:docker images
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest d1a364dc548d 4 days ago 133MB
查看镜像信息
格式:docker inspect 镜像ID
[root@localhost ~]# docker inspect d1a364dc548d
[
{
"Id": "sha256:d1a364dc548d5357f0da3268c888e1971bbdb957ee3f028fe7194f1d61c6fdee",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750"
],
"Parent": "",
"Comment": "",
"Created": "2021-05-25T15:43:43.382480482Z",
"Container": "7b06b818c018bb8563a3d786d6b16971c6f470c3d4c5288d908a3851b8261086",
"ContainerConfig": {
添加镜像标签
格式:docker tag 镜像标签 新标签
[root@localhost ~]# docker tag nginx:latest nginx:web
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest d1a364dc548d 4 days ago 133MB
nginx web d1a364dc548d 4 days ago 133MB
删除镜像
格式: docker rmi 镜像标签
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest d1a364dc548d 4 days ago 133MB
nginx web d1a364dc548d 4 days ago 133MB
[root@localhost ~]# docker rmi nginx:web
Untagged: nginx:web
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest d1a364dc548d 4 days ago 133MB
镜像输出
格式:docker save -o 导出文件名 镜像标签
[root@localhost ~]# cd /opt/
[root@localhost /opt]# docker save -o nginx nginx:latest
ls
[root@localhost /opt]# ls
containerd nginx rh
镜像导入
格式: docker load < 镜像文件
容器操作的命令
容器列表查询
格式:docker ps -a (-a 列出最近一次启动的容器)
[root@localhost /opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
创建容器
格式:docker create -it 选项 /bin/bash
- -i让容器的标准输入保持打开
- -t 让docker分配一个伪终端
#/bin/bash 指定终端
#statys :created 创建状态,暂时还未开启
#container id 容器ID
启动容器
格式:docker start 容器ID
[root@localhost /opt]# docker start 3d19df778e44
3d19df778e44
[root@localhost /opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d19df778e44 nginx:latest "/docker-entrypoint.…" About a minute ago Exited (127) 8 seconds ago nostalgic_pare
一次性执行容器操作
格式: docker run 镜像名称 操作指令
[root@localhost /opt]# docker run centos:7 /usr/bin/bash -c ls /
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
如果不希望执行命令后结束进程,可以给一条循环语句命令
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
进入容器
格式:
docker run -it 容器名 容器环境
在容器运行状态下:docker e’x’ec -it 容器ID 容器环境
[root@localhost /opt]# docker run -it nginx:latest /bin/bash
root@1a02ab298caf:/#
root@1a02ab298caf:/#
root@1a02ab298caf:/# exit
exit
容器导出
格式:docker export 容器ID > 导出的容器名
容器删除
格式: docker rm 容器ID (必须先停止)
总结
镜像命令
###镜像基本命令
#镜像搜索
docker search 关键字(nginx)
#镜像下载
docker pull 关键字(nginx)
#镜像查询
docker images
#查看镜像详细信息
docker inspect 镜像ID
#添加镜像标签
docker tag 镜像标签 新标签
docker tag nginx:latest nginx:web
#删除镜像
docker rmi 镜像标签(nginx:latest)
#镜像输出
docker save -o nginx_img nginx:latest
#镜像导入
docker load <镜像文件(nginx_img)
容器命令
##容器基本操作命令
#容器列表查询
docker ps -a
#创建容器
docker create -it nginx:latest /bin/bash
#启动容器
docker start 容器ID
#一次性容器操作
docker run 镜像名称 操作指令
docker run centos:7 /usr/bin/bash -c ls /
#进入容器
docker run -it 容器名 环境
docker run -it nginx:latest /bin/bash
#容器导入
cat 容器ID | docker import -镜像名 (会生成镜像,不会生成容器)
#容器导出
docker export 容器ID > 导出的容器名
#容器删除
docker rm 容器ID (必须先停止再删除)