docker的概述何况基本应用

Docker

【容器是什么?】
Linux系统中的容器是用来干什么的
-linux中的容器是装应用的
-容器就是将软件打包成标准化单元,用于开发,交付和部署
-容器技术已经成为应用程序封装和交符核心技术,

【容器原理】
容器技术的核心由一下几个核心技术组成:
-资源管理–cgroups
-selinux安全
-namespace–命令空间

Linux的namespace(六大隔离空间)
-UTS NETWORK MOUNT USER PID IPC

【容器的优缺点】
优点
-相比于传统的虚拟化技术,容器更加简介高效
-传统的虚拟机需要给每个vm安装操作系统
-容器使用的共享公共库和程序
缺点
-容器的隔离性没有虚化强
-共用linux内核 安全性有先天缺陷

【Docker是什么?】
-docker完整的一套容器管理系统
-docker提供了一组命令,让用户更加方便的直接地使用容器技术,而不需要更多关
底层内核技术

【docker 安装】
1 在跳板机上配置 yum 仓库
拷贝 kubernetes/docker 目录到 /var/ftp/localrepo
创建createrepo . //创建本地yum仓库(一般在rpm包在的位置创建yum从菜单文件)
更新索引 createrepo --update .

2 购买 2 台云主机,最低配置 2cpu,2G内存

192.168.1.31  node-0001
  192.168.1.32  node-0002

3 在所有 node 节点配置路由转发
/etc/sysctl.conf 添加 net.ipv4.ip_forward = 1
sysctl -p

4 按装 docker(在华为的yum仓库中有docker的依赖包)

yum remove firewalld-*
  yum makecache
  yum install docker-ce
注释: 在本地的虚拟中安装docker

5 修改默认规则

编辑 /usr/lib/systemd/system/docker.service
  添加 ExecStartPost=/sbin/iptables -P FORWARD ACCEPT		//启动时候运行修改默认防火墙规则
  重新加载启动文件 systemctl daemon-reload
  设置开机自启动 systemctl enable docker
  重启服务 systemctl restart docker

6 验证 docker version

【docker 镜像的管理命令】
docker  images   查看本机镜像
docker  search   查找镜像(官方仓库)
docker  pull     下载镜像
docker  push    上传镜像
docker  rmi     删除镜像(需要先删除容器)
docker  save    备份
docker  load    恢复
docker  history  镜像制作历史
docker  inspect  镜像详细信息
docker  tag     镜像标签(类似于别名)


docker  run  参数  镜像名称:标签  启动命令
     	run == 创建  +  启动运行  +  连接进入
           Create  +     start  +  attach

【容器的管理命令】

docker  ps	查看容器信息(-a 所有容器,-q只显示id)
docker  rm	删除容器(-f 强制删除)
docker  inspect	查看详细信息
docker  top	查看容器内运行的进程
docker  start|stop|restart  启动、停止、重启一个已经存在的容器

【镜像类型】
可交互:centos, busybox, ubuntu(镜像文件是可以交互的 -it 交互式终端)
不可交互:nginx, redis (服务:-itd 在后台启动)

docker  ps	查看容器信息(-a 所有容器,-q只显示id)
docker  rm	删除容器(-f 强制删除)
docker  inspect	查看详细信息
docker  top	查看容器内运行的进程
docker  start|stop|restart  启动、停止、重启一个已经存在的容器
docker  attach  进入容器(退出后容器会关闭,只能进交互式的容器)
docker  exec -it 容器id  /bin/bash  进入容器的主要维护命令
docker  cp 本机文件路径  容器id:容器内路径(上传)
docker  cp 容器id:容器内路径  本机文件路径(下载)

【自定义镜像原理】
-镜像采用分层设计
-创建读写层
-修改配置
-重新打包

【自定义镜像】
使用现有镜启动容器,在该容器基础上修改
使用commit制作新镜像
1、创建容器

docker run -it centos:latest
创建并进入容器

2、配置容器

删除默认的 yum 配置
添加yum源(docker cp)
安装常用软件包
vim-enhanced bash-completion net-tools psmisc iproute
清理缓存,退出

3、创建自定义镜像

docker commit 容器id 新镜像名称:标签

用Dockerfile快速创建(创建一个新的文件名字必须是Dockerfile)
Dockerfile 创建镜像(基于脚本类快速创建)

FROM 基础镜像
RUN  在容器内运行命令
COPY 把一个文件拷贝到容器内(拷贝的文件必须在本地目录内)
CMD 设置默认的启动命令
FROM myos:latest
CMD  ["/usr/bin/python"]   //在解释器中有选项时 空格用”逗号“表示 选项用双引号抱起来 【定义启动命令】
ENV  					//定义环境变量
WORKDIR				//定义自己的位置
EXPOSE					//定义监听端口
FROM centos:latest
RUN  rm -f /etc/yum.repos.d/*.repo
COPY CentOS-Base.repo /etc/yum.repos.d/
RUN  yum install -y net-tools vim bash-completion iproute psmisc && yum clean all

执行创建的dockerfile

Docker build -t [新的名字:标签名]  /绝对路径/		注释:据对路径后面不用跟文件名称
创建容器 docker build -t 新镜像名称:标签  Dockerfile目录
         docker build -t myos:v1804 .

【制作服务镜像】
查看服务运行的文件cd /usr/systemd/system/ //里面定义了环境变量和执行文件

FROM myos:latest							//定义初始镜像文件
RUN  yum -y install httpd php				//在容器中安装软件包
ENV  LANG=C							//定义环境变量
ADD  webhome.tar.gz  /var/www/html		//和拷贝的命令差不多拷贝并自动解压
WORKDIR /var/www/html					//定义自己所在的路径 在后边的位置都有效
EXPOSE 80								//定义监听端口
CMD  ["httpd","-DFOREGROUND"]			//容器启动命令

启动服务: docker build -t myos:httpd /myhttpd/
导出容器: docker save myos:httpd -o httpd.tar

【发布服务打包的服务】

Docker run -itd --name (定义一个新的名字)  -p(宿主机端口):(容器内服务端口) myos:httpd

默认容器可以访问外网
但外网的主机不可以访问容器内的的资源
容器每次创建IP地址都会改变
解决这个问题的最佳方法是端口绑定
容器可以于宿主机的端口进行绑定
从而把宿主机变成对应的服务 不用关系容器的IP地址

【发布docker服务】
我们使用-p 参数把容器端口和宿主机端口绑定
同一宿主机端口只能绑定一个容器服务

-p 【可选IP】:宿主机端口:容器端口(可有多个)

【主机卷的映射】
Docker可以映射宿主机文件或目录到容器中
-目录对象不存在就自动创建
-目标对象存在就直接覆盖掉
-多个容器可以映射同一个目标对象来达到数据共享的目的
-如果宿主的目录映射到容器中的目录则 宿主机的目录下的内容则会覆盖容器中目录 下的内容(不影响写的名称)

-docker run -itd -v 宿主机对象:容器内对象 myos:latest 

案例:

docker run  -itd --name web -p 80:8080 -v /var/webroot/:/var/www/html  
-v /var/webconf/httpd.conf:/etc/httpd/conf/httpd.conf myos:httpd 

【nginx 的Dockekrfile】
注释:docker run -itd -p 5080:80 myos:nginx3 /usr/local/nginx/sbin/nginx -g “daemon off;”

【共享网络】
在/etc/php-fpm.d/www.conf //中修改配置文件让php可以接受 0.0.0.0:9000
注释点
listen.allowed_clients = 127.0.0.1
listen = 0.0.0.0:9000

【php的Dockerfile】
FROM myos:latest
RUN yum -y install php php-fpm
COPY www.conf /etc/php-fpm.d/www.conf
WORKDIR /usr/local/nginx/html/
COPY info.php info.php
EXPOSE 9000
CMD ["/usr/sbin/php-fpm", “–nodaemonize”]

【nginx的Dockerfile】
FROM myos:latest
RUN yum -y install pcre openssl && useradd nginx
ADD nginx.tar.gz /usr/local/
EXPOSE 80
WORKDIR //usr/local/nginx/html/
CMD ["/usr/local/nginx/sbin/nginx", “-g”, “daemon off;”]

docker run -itd --name nginx -p 80:80 -v /var/webroot/:/usr/local/nginx/html/ -v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf myos:nginx-l
-e 指定环境变量

docker run  -itd -v /var/webroot/:/usr/local/nginx/html/ 
 --network=container:nginx myos:php-fpm			//共享网络回环IP地址

【创建私有仓库】
安装私有仓库服务端
yum install docker-distribution
启服务
systemctl start docker-distribution.service
开机自启
systemctl enalble docker-distribution.service
访问测试
curl http://192.168.1.100:5000/v2/_catalog

私有仓库服务器
-仓库配置文件及数据存储路径
/etc/docker-distribution/registry/config.yml
/var/lib/registry/

在每个私有docker服务器中
Vim/etc/docker/daemon.json

{
“exec-opts”: [“native.cgroupdriver=systemd”],
“registry-mirrors”: [“https://hub-mirror.c.163.com”],
“insecure-registries”: [“192.168.1.100:5000”]
}
curl http://192.168.1.100:5000/v2/_catalog //查看私有仓库
tag busybox:latest 192.168.1.100:5000/busybox:latest //给镜像打标签
docker push 192.168.1.100:5000/busybox //上传到私有仓库
curl http://192.168.1.100:5000/v2/镜像名/tags/list //查看单个镜像的标签
docker run -itd 192.168.1.100:5000/myos:httpd //直接在仓库中运行下载镜像

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值