驻马店网站建设电话,域名交易,织梦cms做视频网站,做类似简书的网站文章目录 一.Docker介绍1.容器的介绍及作用1.1 docker的提出1.2 dockers的简介1.3什么是容器1.4容器和虚拟机的区别 二.Docker的安装部署1.docker的安装2.Docker体系结构3.docker镜像主要命令3.1 获取镜像3.2 镜像基本查看3.3镜像详细信息查看3.4只查看镜像ID3.5镜像的导入和导… 文章目录 一.Docker介绍1.容器的介绍及作用1.1 docker的提出1.2 dockers的简介1.3什么是容器1.4容器和虚拟机的区别 二.Docker的安装部署1.docker的安装2.Docker体系结构3.docker镜像主要命令3.1 获取镜像3.2 镜像基本查看3.3镜像详细信息查看3.4只查看镜像ID3.5镜像的导入和导出3.6镜像的删除 三.容器的管理1.运行第一个容器1.1 交互式的容器1.2 守护式容器1.3 容器的类型1.4 容器的启动\关闭\连接 2.docker端口映射3.docker数据卷 四、制作本地局域网yum源 一.Docker介绍
1.容器的介绍及作用
1.1 docker的提出
1.容器技术最早出现在FreeBSD上叫做 jail将一个进程放入jail中运行不管这个进程在其中发生怎样的错误都不会影响到系统上其他进程的运行。后来jail技术在Linux中的实现叫做vservervserver所实现的功能体现为chroot以及namespaces实现资源的隔离 容器技术出现的主要目的是为了资源隔离 2.LXC,将原来需要手工编码实现的容器技术进行了封装。实现了更加方便、快速的容器创建及管理的技术。通过固有“模板”安装并启动容器。将远程的程序包下载到本地安装并创建好我们需要的容器。 确实LXC已经很大程度上降低了容器管理的难度但是依然使用一些弊端。有些时候可能需要自定制模板以及使用LXC中自带的模板以及大规模创建及复制依然比较麻烦。所以很难大规模的应用。 3.所以出现了Docker技术。Docker是在LXC基础上使用GoLang二次开发的封装版。
1.2 dockers的简介
Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎 源代码托管在 GitHub 上, 基于Go语言并遵从Apache2.0协议开源。 Docker是通过内核虚拟化技术namespaces及cgroups等来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离所以Docker容器在运行时不需要类似虚拟机VM额外的操作系统开销提高资源利用率。
1.3什么是容器
容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理
程序: 代码,软件,命令
进程:正在运行的程序
1.4容器和虚拟机的区别
虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
bios开机自检–根据bios启动项–读取硬盘第一个扇区grub,uefi, centos7, 加载内核,启动系统第一个进程/sbin/init systemd
容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程
容器优势: 启动快,性能高,损耗少,轻量级
100虚拟机 100个服务 10宿主机
100容器 100个服务 6宿主机
二.Docker的安装部署
1.docker的安装
#安装docker-ce
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i sdownload.docker.commirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl enable docker
systemctl start docker
#验证
[rootdocker01 yum.repos.d]# docker version
Client: Docker Engine - CommunityVersion: 19.03.5API version: 1.40Go version: go1.12.12Git commit: 633a0eaBuilt: Wed Nov 13 07:25:41 2019OS/Arch: linux/amd64Experimental: false2.Docker体系结构 3.docker镜像主要命令
docker是一个cs架构, docker主要:镜像 容器 仓库 网络 存储 监控
docker是一个软件的打包技术.docker run -d -p 80:80 nginx:latest
run 创建并启动一个容器
-d 放后台启动
-p 端口映射
nginx:latest docker镜像名称docker search 搜索镜像, 优先选官方,stars数量多
docker pull 拉取镜像(下载镜像)注意版本
docker push 推送镜像(上传镜像)
docker image ls 查看镜像列表
docker load 导入镜像例子: docker load -i docker_nginx.tar.gz
docker save 导出镜像例子:docker save centos:7 -o docker_centos7.tar.gz
docker rmi 删除镜像
docker tag 给镜像打标签3.1 获取镜像
镜像查询
docker search centos
镜像下载
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx
3.2 镜像基本查看
[rootdocker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 3 days ago 132MB
centos 6.9 2199b8eb8390 16 months ago 195MB
centos 7.5.1804 cf49811e3cdb 16 months ago 200MB
标识镜像唯一性的方法
1. REPOSITORY:TAGREPOSITORY 镜像名有2种一种是官方的一种是别人写好推上去github的 TAG标识版本
centos7.5.1804
2.IMAGE ID (SHA256:64位的号码默认只截取12位)3.3镜像详细信息查看
[rootdocker /]# docker image inspect centos6.9REPOSITORY:TAG
[rootdocker /]# docker image inspect 2199b8eb8390IMAGE ID
3.4只查看镜像ID
[rootdocker /]# docker image ls -q3.5镜像的导入和导出
[rootdocker ~]# docker image save 2199b8eb8390 /tmp/centos.tar导出
[rootdocker ~]# docker image rm 2199b8eb8390
[rootdocker ~]# docker image load -i /tmp/centos.tar 导入
[rootdocker ~]# docker image tag 2199b8eb8390 lbz/centos:v1打标签
[rootdocker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 3 days ago 132MB
lbz/centos v1 2199b8eb8390 16 months ago 195MB
centos 7.5.1804 cf49811e3cdb 16 months ago 200MB3.6镜像的删除
删除某个镜像
[rootdocker ~]# docker image rm -f 2199b8eb8390
删除所有镜像
[rootdocker ~]# docker image rm -f docker image ls -q
查看
[rootdocker ~]# docker images 为空三.容器的管理
docker run 创建并启动容器例子:docker run -d -it -p 80:80 nginx:latest
docker create 创建容器 --name
docker start 启动容器
docker stop 停止容器
docker restart 重启容器
docker kill 强制停止容器
docker ps 查看容器列表 -a 查看所有容器
docker rm 删除容器批量删除所有容器 docker rm -f docker ps -a -q
docker exec 进入正在运行的容器(分配一个新终端)例子: docker exec -it 容器id/容器名字 /bin/bash(/bin/sh)
docker attach 进入正在运行的容器(使用相同的终端),偷偷离开的快捷键ctrl p,ctrl q
容器想要在后台一直运行的话,那么容器的初始命令,必须夯住(前台运行),否则容器就会退出.前台运行
nginx -g daemon off;
/usr/sbin/php-fpm --nodaemonize1.运行第一个容器
1.1 交互式的容器
[rootdocker ~]# docker pull centos:6.9
[rootdocker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.9 2199b8eb8390 16 months ago 195MB
[rootdocker ~]# docker container run -it 2199b8eb8390 此数字为镜像名-i交互式启动 -t开一个终端 #进入一个容器并启动
[rootdocker ~]# docker container run -it 2199b8eb8390
[root451dc436f99a /]# #进入容器了
[rootdocker ~]# docker container ls ---查看正在运行的容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
451dc436f99a 2199b8eb8390 /bin/bash 17 seconds ago Up 16 seconds lucid_herschel容器启动的随机名字CONTAINER ID: 容器的唯一号码(自动生成的)
NAMES ID: 容器的名字(可以自动也可以手工指定)
[rootdocker ~]# docker container run -it --namelbz_cent69手工指定的容器名字 2199b8eb8390镜像名[rootdocker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00b8ece2aa21 2199b8eb8390 /bin/bash 24 seconds ago Up 23 seconds lbz_cent69
STATUS : 容器的运行状态 (Exited , Up)[rootdocker ~]#exit ---退出容器
[rootdocker ~]# docker pull centos:6.9
[rootdocker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.9 2199b8eb8390 16 months ago 195MB
[rootdocker ~]# docker container run -it 2199b8eb8390 此数字为镜像名-i交互式启动 -t开一个终端 #进入一个容器并启动
[rootdocker ~]# docker container run -it 2199b8eb8390
[root451dc436f99a /]# #进入容器了
[rootdocker ~]# docker container ls ---查看正在运行的容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
451dc436f99a 2199b8eb8390 /bin/bash 17 seconds ago Up 16 seconds lucid_herschel容器启动的随机名字CONTAINER ID: 容器的唯一号码(自动生成的)
NAMES ID: 容器的名字(可以自动也可以手工指定)
[rootdocker ~]# docker container run -it --namelbz_cent69手工指定的容器名字 2199b8eb8390镜像名[rootdocker ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00b8ece2aa21 2199b8eb8390 /bin/bash 24 seconds ago Up 23 seconds lbz_cent69
STATUS : 容器的运行状态 (Exited , Up)[rootdocker ~]#exit ---退出容器
1.2 守护式容器
[rootdocker ~]# docker pull nginx
[rootdocker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 3 days ago 132MB
centos 6.9 2199b8eb8390 16 months ago 195MB[rootdocker ~]# docker run -d --namelbz_nginx nginx:latest -d使容器一直
运行下去不退出查询容器的详细信息
[rootdocker ~]# docker container inspect lbz_nginx可以查询到容器的ip地址
访问
[rootdocker ~]#curl -I 172.17.0.2(docker容器的地址
1.3 容器的类型
[rootdocker ~]# docker pull centos:7.5.1804
[rootdocker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 3 days ago 132MB
centos 6.9 2199b8eb8390 16 months ago 195MB
centos 7.5.1804 cf49811e3cdb 16 months ago 200MB交互式的容器 工具类 开发测试临时性的任务()
[rootdocker ~]# docker container run -it --namelbz_cent75 --rm cf49811e3cdb当容器退出时会自动被删除掉
守护式容器 网络服务
[rootdocker ~]# docker container run -d -p 8080:80 --namelbz_nginx_80 nginx:latest -p提供端口对外提供服务
在物理机访问10.0.0.200:8080能够访问相当于访问宿主机的8080端口就是访问docker的80端口
1.4 容器的启动\关闭\连接
守护式容器的关闭和启动
[rootdocker ~]# docker container stop lbz_nginx_80(容器名
[rootdocker ~]# docker container start lbz_nginx_80交互式的容器的关闭和启动
[rootdocker ~]# docker container stop nervous_allen(容器名
[rootdocker ~]# docker container start -i nervous_allen-i为交互形式容器的连接方法登陆到已存在的容器当中不会生成新的进程偷偷离开的快捷键ctrl p,ctrl q
[rootdocker ~]# docker container attach nervous_allen子进程的方式登录(在已有工作容器中生成子进程做登录可以进行容器的调试出退时也不会影响到当前容器)
[rootdocker ~]# docker container exec -it nervous_allen /bin/bash总结
让容器永生的方法即不手动关闭容器就不会宕掉
1. 进入容器后按ctrl P, Q可以使容器一直运行而不会中断不然的话退出容器就会断了
应用时再用attach 调用到前台
3. 起容器时用死循环 sleep时间
4. 让程序前台一直运行(夯在前台) -d 制作守护式容器时常用的方法
2.docker端口映射
端口映射的使用场景
容器启动快资源占用小
虚拟机有自己的内核模拟硬件走正常的开机启动流程 容器共用宿主机的内核 docker run
-p 宿主机端口:容器端口
-p 宿主机ip1:宿主机端口:容器端口 (多个容器同时使用80端口)
-p 宿主机ip1::容器端口 随机端口映射
-p 宿主机ip1::容器端口/udp 使用udp协议做随机端口映射
-p 80:80 -p 3306:3306
-p 1111-1119:1111-1119 端口范围映射
-P大写 自动随机端口映射 3.docker数据卷
docker run -v 宿主机绝对目录:容器目录 -v 容器目录 #创建一个随机卷,来持久化容器的目录下的数据 -v 卷名:容器目录 #创建一个固定名字的卷,来持久化容器的目录下的数据 –volumes-from 跟某一个容器挂载所有相同的卷
(1) 宿主机模拟数据目录
mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt(2) 启动数据卷容器
docker run -it --name nginx_volumes -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
ctrl p q(3) 使用数据卷容器
docker run -d -p 8085:80 --volumes-from nginx_volumes --name n8085 nginx
docker run -d -p 8086:80 --volumes-from nginx_volumes --name n8086 nginx
验证
[rootdocker ~]# docker container exec -it n8085 /bin/bash
rootf9c8b5d85e68:/# cd /opt/
rootf9c8b5d85e68:/opt# ls
a b
rootf9c8b5d85e68:/opt# cd a
rootf9c8b5d85e68:/opt/a# ls
a. txt
[rootdocker html]# cd /opt
[rootdocker opt]# cd Volume/[rootdocker Volume]# lltotal 0
drwxr--r-- 2 root root 19 May 1 15:49 a
drwxr--r-- 2 root root 19 May 1 15:49 b
[rootdocker Volume]# cd a/
[rootdocker a]# ls
a. txt
修改宿主机
[rootdocker a]# vim a.txt
a
查看docker
rootf9c8b5d85e68:/opt/a# cat a.txt
a
作用 在集中管理集群中大批量的容器都需要挂载相同的多个数据卷时可以采用数据卷容器进行统一管理
四、制作本地局域网yum源
1.配置
1. 安装vsftpd软件
[rootdocker ~]# yum install -y vsftpd
2. 启动ftp
[rootdocker ~]# systemctl enable vsftpd
[rootdocker ~]# systemctl start vsftpd
3. 上传系统镜像到虚拟机
[rootdocker ~]# cd /mnt
上传centos7.5和6.9的镜像
[rootdocker mnt]# rz –E
4. 配置yum仓库
mkdir -p /var/ftp/centos6.9
mkdir -p /var/ftp/centos7.5
[rootdocker ~]# mount -o loop /mnt/CentOS-6.9-x86_64-DVD-1804.iso /var/ftp/centos6.9/
[rootdocker centos6.9]# mount -o loop /mnt/CentOS-7-x86_64-DVD-1804.iso /var/ftp/centos7.5/
mount: /dev/loop0 is write-protected, mounting read-only
验证cat /etc/yum.repos.d/ftp_6.repo EOF
[ftp]
nameftpbase
baseurlftp://10.0.0.200/centos6.9
enabled1
gpgcheck0
EOF[rootdocker yum.repos.d]# yum clean all
[rootdocker yum.repos.d]# yum makecachecat /etc/yum.repos.d/ftp_7.repo EOF
[ftp]
nameftpbase
baseurlftp://10.0.0.200/centos7.5
enabled1
gpgcheck0
EOF
2.访问 ftp://10.0.0.200