容器.docker

概念 优缺点 镜像的一些命令 容器的一些命令
自定义镜像与仓库
持久化存储
Docker网络架构

容器:
容器技术:应用程序封装和交付的核心技术
容器技术核心的内核技术组成:
1 资源管理:CGroups(Control Groups)
2 进程隔离:NameSpace
3 SELinux安全
在物理机上实施隔离,启动一个容器,就像启动一个进程一样快速

Docker:
1 完整的一套容器管理系统
2 提供一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术

Docker特性:
优点:
1 相比传统的虚拟化技术,容器更加简洁高效
2 传统虚拟机需要给每个VM安装操作系统
3 容器使用的公共库和程序
缺点:
1 容器的隔离性没有虚拟化强
2 共用 Linux内核,安全性有先天缺陷
3 SELinux难以驾驭
4 监控容器和容器排错是挑战

部署Docker
安装软件
需求:64位操作系统,RHEL6.5以上版本,推荐RHEL7,建议关闭防火墙

安装Docker
包:docker-engine docker-engine-selinux

Docker镜像
概念:
1 在Docker中容器是基于镜像启动的
2 镜像是启动容器的核心
3 镜像采用分层设计
4 使用快照的COW技术,确保底层数据不丢失

Docker hub镜像仓库
1 https://hub.docker.com
2 Docker官方提供公共镜像的仓库(Registry)

镜像操作
可以查看帮助
Docker help pull
Docker help push
下载镜像
Docker pull rhel7 下载rhel7镜像
上传镜像
Docker push rhel7 上传rhel7镜像

导入镜像(通过tar包文件导入镜像)
Docker load < xx.tar
导出镜像(将本地镜像导出为tar文件,方便其他主机使用镜像)
Docker save image_name > xx.tar
查看镜像
Docker images

启动镜像
Docker run -it centos bash 启动centos镜像生成一个容器

查看容器信息
Docker ps -a
查看正在运行的容器信息
Docker ps

查看镜像制作历史
Docker histoy
查看镜像底层信息
Docker inspect

删除本地镜像
Docker rmi
删除容器
Docker rm

镜像另存为tar包
Docker save
使用tar包导入镜像
Docker load

搜索镜像
Docker search
修改镜像名称和标签
Docker tag
Docker tag centos:latest(镜像名:标签) test:v1

Docker images 查看镜像列表里显示的信息:
镜像仓库名称 镜像标签 镜像ID 创建时间 大小

Docker histor 查看镜像历史:
可以了解镜像的制作过程

Docker inspect 查看镜像底层信息:
了解镜像环境变量、存储卷、标签等信息

Docker rmi 删除本地镜像:
注意事项 启动容器时删除镜像会提示错误

容器常用命令

运行容器
Docker run
Docker run -it centos bash
Docker run -itd centos bash (-itd 放入后台执行)

查看容器列表
Docker ps (查看正在运行的容器)
Docker ps -a (查看所有容器列表)
Docker ps -aq (仅显示容器ID)

关闭容器
Docker stop 容器ID

启动容器
Docker start 容器ID

重启容器
Docker restart 容器ID

进入容器
Docker attach|exec 容器ID(用attach进入容器退出,容器会关闭 用exec进入容器退出,容器不会关闭)

查看容器底层信息
Docker inspect 容器ID

查看容器进程列表
Docker top

删除容器
Docker rm 容器ID
删除正在运行的容器时会提示错误

查看版本
docker version

自定义镜像(相当于配置好环境然后直接打包,拿出来直接可以使用,不用再配置环境)
1、创建容器
docker run -itd centos bash

2 查看正在运行的容器(验证)
docker ps

3、进入容器
docker exec -it centos bash

4、修改配置、安装软件

5、创建镜像
docker ps -a
docker commit 容器ID 镜像名称:标签

6、查看镜像是否生成
docker images

Dockerfile (相当于脚本,创建了容器,然后进入容器后进行一些命令的操作,比如装包等)
Dockerfile语法格式
FROM 基础镜像
MAINAINER 镜像创建者信息
EXPOSE 开放的端口
ENV 设置变量
ADD 复制文件到镜像
RUN 制作镜像时执行的命令,可以有多个
WORKDIR 定义容器默认的工作目录
CMD 容器启动时执行的命令,仅可以有一条

使用Dockerfile工作流程
mkdir buid;cd buid (创建目录,进入目录)
vim Dockerfile (编辑文件,内容参考下面的例子)
docker buid -t imagename Dockerfile (生成Dockerfile文件,之后直接可以使用)

例子:
Dockerfile 01
FROM centos:latest
RUN rm -f /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum install -y net-tools psmisc vim

Dockerfile 02
FROM myos:latest
CMD [“/usr/bin/python”]

Dockerfile 03
FROM myos
RUN yum install -y httpd
WORKDIR /var/www/html
RUN echo “hello nsd1804” >index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
EXPOSE 80
CMD [“/usr/sbin/httpd”, “-DFOREGROUND”]

自定义镜像仓库(里面可以放多个镜像,用什么镜像创建容器时,直接可以从这个仓库下载)
registry
共享镜像的一台服务器(镜像化的一台服务器)

自定义私有仓库
流程:
1 docker pull registry
2 vim /etc/docker/daemon.json
{
“insecure-registries” : [“本机IP地址(192.168.1.11):5000”]
}

3 完成配置以后重启 docker 服务
systemctl restart docker

4 启动私有仓库服务
docker run -d -p 5000:5000 registry

5 打标记(标记你想要的)
docker tag busybox:latest 192.168.1.11:5000/busybox:latest
docker tag myos:latest 192.168.1.11:5000/myos:latest
docker tag myos:python 192.168.1.11:5000/myos:python
docker tag myos:httpd 192.168.1.11:5000/myos:httpd

6 上传镜像
docker push 192.168.1.11:5000/busybox:latest
docker push 192.168.1.11:5000/myos:latest
docker push 192.168.1.11:5000/myos:python
docker push 192.168.1.11:5000/myos:httpd

7 客户机使用私有镜像源

8 配置 daemon.json(内容同上,也可以直接远程传过来)

9 重启服务 systemctl restart docker

10 启动容器
docker run -it 192.168.1.11:5000/busybox
docker run -it 192.168.1.11:5000/myos
docker run -d 192.168.1.11:5000/myos:httpd

11 查看私有仓库有什么样的镜像
curl http://192.168.1.11:5000/v2/_catalog

12 查看私有仓库的镜像有什么样的标签
curl http://192.168.1.11:5000/v2/myos/tags/list

持久化存储

利用一台服务器提供存储,利用NFS共享到容器所在主机上进行挂载操作,然后利用主机卷的映射,把挂载的那个目录映射到容器中,就是下方的‘容器内文件夹’ ,当容器使用这个文件夹时,文件最终的存储位置是提供存储的那台服务器上

卷的概念:
1 docker 容器不保持任何数据
2 重要数据要使用外部卷存储(数据的持久化)
3 容器可以挂载在真实机目录或共享存储卷

主机卷的映射
docker run -itd -v 物理机文件夹:容器内文件夹 镜像:标签
docker run -V /data:/data -it centos bash

共享存储基本概念
一台共享存储服务器可以提供给所有Docker主机使用
共享存储服务器可以是:
使用NFS创建的共享存储服务器,客户端挂载NFS共享,并最终映射到容器中

案例:
服务器:(NFS没有做细致的书写)
yum -y install nfs-utils
vim /etc/exports
systemctl start nfs

Docker主机:
mount 挂载共享(vim /etc/fstab)
运行容器时,使用-v选项映射磁盘到容器中

docker 网络架构
linux 网桥
创建虚拟网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:0
vim ifcfg-eth0:0
(把eth0改为eth0:0)

创建虚拟网桥
在上面的文件夹内
vim ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
其他与网卡内容保持一致
查看
brctl show

Docker 网络拓扑
查看默认Docker创建的网络模型
docker network list
ip a s docker0
brctl show docker0
启动容器会绑定dockr0网桥

创建虚拟交换机
docker network create –driver=bridge –subnet 192.168.100.0/24 docker1
创建一个新的容器,使用新的交换机(网桥)
docker run -it –network=docker1 myos

创建容器,使用宿主机的端口 -p 宿主机端口:容器端口
docker run -d -p 80:80 -v /var/webroot:/var/www/html 192.168.1.11:5000/myos:httpd
默认容器通过SNAT可以访问外网,外网不可以访问容器内的资源,但使用端口映射可以实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值