
容器概述
容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。
隔离的环境拥有自己的系统文件,ip地址,主机名等
容器与虚拟化的区别
kvm虚拟化:需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)1.linux开机启动流程:bios开机硬件自检 basic input output system根据bios设置的优先启动项boot 网卡 硬盘 u盘 光驱 读取grub(mbr)引导 2T UEFI(gpt分区) mbr硬盘分区信息,内核加载路径,加载内核启动第一个进程/sbin/init systemd系统初始化完成 运行服务(nginx,httpd,mysql) 。。。2.容器启动流程:共用宿主机内核:第一个进程直接启动服务(nginx,httpd,mysql)容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统
Docker引擎安装
10.0.0.11:修改主机名和host解析rm -fr /etc/yum.repos.d/*curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.reposed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo安装docker-ceyum install docker-ce -y
Docker结构
docker是传统的CS架构分为docker client和docker server,和mysql一样查看docker版本:docker versiondocker主要组件有:镜像、容器、仓库, 网络,存储启动容器必须需要一个镜像,仓库存储镜像 容器--->镜像--->仓库
启动第一个容器
docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行 部署服务,环境问题一次构建,处处运行docker是一种软件的打包技术docker初次体验:安装Nginx步骤:官网下载Nginx源码包wgettar 创建Nginx用户编译安装 ./config.... 修改配置文件, 启动配置docker镜像加速vi /etc/docker/daemon.json{"registry-mirrors": ["https://registry.docker-cn.com"]}docker run -d -p 80:80 nginxrun(创建并启动一个容器)-d 放在后台-p 端口映射nginx docker镜像的名字
Docker镜像管理
搜索镜像 docker search 选镜像的建议:1,优先考虑官方2,stars数量多官方镜像仓库地址:hub.docker.com获取镜像docker pull(push) 镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com官方pull docker pull centos:6.8(没有指定版本,默认会下载最新版)私有仓库pulldocker pull daocloud.io/huangzhichong/alpine-cn:latest查看镜像列表docker images or docker image ls删除镜像docker rmi例子:docker image rm centos:latest导出镜像docker save例子:docker image save centos:latest -o docker-centos7.4.tar.gz导入镜像docker load例子:docker image load -i docker-centos7.4.tar.gz===============================================================================================docker search php 在官方仓库中查询镜像docker pull nginx 拉取镜像docker image ls 查看所有镜像docker imagesdocker image import docker_centos6.9.tar.gz 导入镜像但不带镜像名称和版本号docker image load -i docker_alpine3.9.tar.gz 导入镜像docker image save nginx:latest -o /tmp/docker_nginx.tar.gz 导出镜像docker image rm busybox:latest 删除镜像docker rmidocker image history nginx 查看镜像历史docker image tag a19653214294 centos:6.9 给镜像设定名称版本号
Docker容器管理
docker run -d -p 80:80 nginx:latestrun(创建并运行一个容器)-d 放在后台-p 端口映射-v 源地址(宿主机):目标地址(容器)nginx docker镜像的名字docker run -it --name centos6 centos:6.9 /bin/bash-it 分配交互式的终端interactive tty--name 指定容器的名字/bin/sh覆盖容器的初始命令运行容器docker run image_namedocker run 等同于 docker create + docker start启动容器docker start停止容器docker stop CONTAINER_ID杀死容器docker kill container_name查看容器列表docker ps(-a -l -q)进入正在运行的容器(目的,调试,排错)*** docker exec (会分配一个新的终端tty)docker exec [OPTIONS] CONTAINER COMMAND [ARG...]docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)docker attach(使用同一个终端) 偷偷离开的快捷键ctrl+p,ctrl+qdocker attach [OPTIONS] CONTAINER删除容器docker rm批量删除容器docker rm -f `docker ps -a -q`总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!业务在容器中运行:初始命令一定要夯住并且启动服务例如:nginx -g 'daemon off;'/usr/sbin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf===================================================================================docker create centos:6.9 创建一个容器docker start 4a0ab8445501 启动容器docker stop 4a0ab8445501 停止一个容器docker restart 20da4e87d10f 重启一个容器docker ps:查看容器,默认查看正在运行的-a:查看所有容器-l:查看最新的容器-q: 查看所有容器的iddocker run -d nginx:latest:创建运行一个容器相当于 create+start-d:将程序放在后台执行-p:指定映射端口-v:指定将宿主机文件挂载到容器中的指定文件docker rm b3d15ddb5f97 删除一个容器[id]-f:强制删除docker rm -f `docker ps -a -q` 批量删除docker kill 20da4e87d10f 杀死一个容器docker exec -it 容器id或容器名字 /bin/bash(/bin/sh) 进入正在运行的容器docker attach(使用同一个终端) 偷偷离开的快捷键ctrl+p,ctrl+qdocker exec -it heuristic_buck /bin/bash 开启一个新的会话窗口并进入一个容器docker attach 20da4e87d10f 使用同一个会话窗口并进入容器docker rename heuristic_buck yiliao 修改容器的名称docker logs yiliao 查看容器的终端输出(日志)docker cp 容器:宿主机docker diff 比对容器修改的操作docker export ID 导出容器docker import ID 导入容器
Docker容器端口映射
1. docker默认使用nat网络,使用命令-p指定,docker会自动添加iptables规则实现端口映射
2. 映射80端口到容器的80端口---81到81:docker run -d -p 80:80 -p 81:81 nginx:latest
3. 多容器使用80端口
添加IP地址:ifconfig eth0:0 10.0.0.12 upifconfig eth0:1 10.0.0.13 up映射:docker run -d -p 10.0.0.11:80:80 nginx:latestdocker run -d -p 10.0.0.12:80:80 nginx:latestdocker run -d -p 10.0.0.13:80:80 nginx:latest
4. 随机端口映射:
随机端口映射到容器的80docker run -d -p ::80 nginx:latestdocker run -d -P nginx:latest随机端口映射udpdocker run -d -p ::80/udp nginx:latest
Docker数据卷管理
1. 宿主机挂容器nginx 默认站点目录:/usr/share/nginx/html-v /opt/xiaoniao:/usr/share/nginx/html #指定宿主机的目录挂载到容器的目录[root@docker01 ~]# docker run -d -p 80:80 -v /opt/xiaoniao/:/usr/share/nginx/html nginx:latest2.持久化数据卷(文件或目录)-v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)-v src(宿主机的目录):dst(容器的目录)3.数据卷容器 `--volumes-from`(跟某一个已经存在的容器挂载相同的卷)[root@docker01 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES65c952f4a88b nginx:latest "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp romantic_wozniak[root@docker01 ~]# docker run -d -p 81:80 --volumes-from 65c952f4a88b nginx:latest562625b3d4cb177e46c5a98d95b3884889686121fad3b9b903f8864c1fe80353通过浏览器访问81端口;4. 需求:基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站点。方案一:本地+容器[root@docker01 ~]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latestdf41ae2b61d286521f3bf8a0bcf1df7865af1dcf78796f824a18a6f15711584a[root@docker01 ~]# docker exec -it df41ae2b61d2 /bin/bashroot@df41ae2b61d2:/# cd /etc/nginx/conf.d/root@df41ae2b61d2:/etc/nginx/conf.d# cat xiaoniao.confserver {listen 81;server_name localhost;root /opt;location / {index index.html index.htm;}}方案二:将本地文件或目录挂载到容器的文件或目录中:[root@docker01 xiaoniao]# docker run -d -p 82:80 -p 83:81 -v /opt/xiaoniao:/opt -v /opt/xiaoniao/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf nginx:latest浏览器分别访问82和83端口进行测试5. 创建卷:docker run -d -p 80:80 -v test:/usr/share/nginx/html nginx:latestdocker volume ls 查看卷
重启docker服务,容器全部退出的解决办法
方法一:docker run --restart=always方法二:"live-restore": true docker server配置文件/etc/docker/daemon.json参考{ "registry-mirrors": ["http://b7a9017d.m.daocloud.io"], "insecure-registries":["10.0.0.11:5000"], "live-restore": true }

文章转载自云原生数字化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




