• CentOS7-Docker容器入门


    Docker由三大部分组成

    基础镜像---->中间件---->最后生成应用镜像
    一个镜像可以给多个进程使用!

    Docker是什么

    Docker是一个改进的容器技术。具体的“改进”体现在,Docker为容器引入了镜像,使得容器可以从预先定义好的模版(images)创建出来,并且这个模版还是分层的。

    Docker的特性:

    • 轻量

    • 快速

    • 隔离

    Docker技术的基础:

    • namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pid

    • cgroups,容器资源统计和隔离。主要用到的cgroups子系统:cpu,blkio,device,freezer,memory

    • unionfs,典型:aufs/overlayfs,分层镜像实现的基础

    Docker组件:

    • docker Client客户端————>向docker服务器进程发起请求,如:创建、停止、销毁容器等操作

    • docker Server服务器进程—–>处理所有docker的请求,管理所有容器

    • docker Registry镜像仓库——>镜像存放的中央仓库,可看作是存放二进制的scm

    Docker的安装与部署:

     [root@docker /]# yum install -y docker   //使用官方源安装docker

    也可以使用国内源安装docker,例如,阿里,中科大,网易 的源

    启动docker:

     [root@docker /]# systemctl start docker 

     

    搜索docker官方镜像文件:OFFICI [OK]表示官方镜像,其余表示非官方上传

    图片.png

    下载与上传镜像文件:

        docker pull [镜像文件名] //拉取镜像
        docker push [镜像文件名] //上传镜像

    也可以直接下载站点镜像:
               docker pull hub.c.163.com/library/tomcat:latest  //复制站点链接用 pull 下来

    查看docker本地镜像:

        docker images  

    运行docker镜像:

        docker run -it [镜像名]:[标签名] /bin/bash
                -i 使用交互模式运行镜像  -t 分配输入伪终端

    使用后台运行docker进程:
        docker run -d [镜像名]:[标签名] /bin/bash -c "[脚本]"
                    -d 后台运行docker返回容器的ID好   -c 完成后面的命令
    例:docker run -d [镜像名]:[标签名] /bin/bash -c "while true;do echo hello world;sleep 2;done"

    查看docker进程:

        docker ps     //加 -a 参数列出所有

    读取docker日志:    
        docker logs [PID]         //短ID也可以,只要是唯一的

    docker镜像的停止、开启、重启:

            docker stop [PID] //关闭docker镜像
            docker start [PID] //继续运行docker images
            docker restart [PID] //restart docker images

    通过docker镜像的PID进程ID来杀死docker进程:

            docker kill [PID]

    删除docker镜像:

        docker rm [image ID] //删除images file   -f 强制删除

    图片.png

    Docker镜像制作方法:
        方法一:docker commit  //保存 container 当前状态到image 然后生成image
        方法二:docker build   //使用 Dockerfile 文件自动化制作 images

    在实例中创建一个apache服务:
        docker run -it [docker name]:[docker taget] /bin/bash
        yum install -y httpd
        exit

    保存安装apache的  centos image:          
        docker commit [container imageID] [image name]:[Taget] //docker.io/centos:apache (这个标签可以随便写)

        imageID用的是docker ps -a 中的ID  不是 docker image 中的镜像ID!!!!!!

    通过Dockerfile来创建容器:
        dockerfile文件中执行命令中的所有需要被调用到的文件,必须放在Dockerfile所在的目录下
        基础镜像可以不放在dockerfile文件目录下,但是docker image中必须要有所需的基础镜像

     [root@docker docker/]# vim Dockerfile 
    FROM docker.io/centos:latest  //基于哪个镜像
    MAINTAINER <zxq@qq.com>      //MAINTAINER 镜像创建者
    RUN yum install -y httpd  //RUN 安装应用
    ADD start.sh /usr/local/bin/start.sh
    ADD index.html /var/www/html/index.html   //ADD 将此目录中的文件拷贝到对应的镜像系统路径下。

     

     [root@docker docker /]# vim Dockerfile

    /usr/sbin/httpd -DFOREGROUND" 

    [root@docker docker /]# index.html
    Docker a Web!

    chmod a+x start.sh

    所有拷贝到镜像中的文件 权限默认为 0755  uid和pid都为0
    CMD systemctl start httpd   //container中启动时执行的命令,一个Dockerfile只能有一个CMD命令,
    有多条只能执行最后一条

    通过docker build创建镜像:
    docker build -t [image name]:[taget] [Dockerfile路径]  
    [root@docker docker /]# docker buile -t docker.io/centos:httpd ./

    图片.png

     

    Docker镜像导出:
        docker save image to tarball
        保存image到tar包当中
        docker save -o 导出镜像名.tar 本地镜像名:image标签  //这里导出的镜像名不能有冒号,注意特殊符号!
        
    Docker image 导入镜像:
        docker load -i [本地镜像名]

    Container容器端口映射:
        docker run -d -p 80(物理机端口):80(容器端口) [image name]:[taget] /bin/bash -c /usr/local/bin/start.sh

    图片.png
    访问一个正在运行的docker镜像:
        docker exec -it <container id|name> /bin/bash

    图片.png

    发布镜像到docker hub :
        push image to docker hub
    1、注册docker hub 账号
    https://hub.docker.com/
    2、登录 docker hub
    docker login -u username -p password -e 2235590965@qq.com
    3、上传镜像
    docker push [image name]:[taget]
    4、下载镜像
    docker pull username/[image name]:[taget]

    如果在运行docker镜像的时候提示网络错误,查看 /proy/sys/net/ipv4/ip_forward值,正常的是 1

    原文地址:https://blog.51cto.com/13735335/2177648?source=dra

  • 相关阅读:
    SQL 2008R2问题:用户、组或角色'XXX'在当前数据库中已存在?
    修改sqlserver 2008 R2 实例名称
    keepalived vip做网关
    Django(HttpResponse、render,、redirect)的用法
    Linux脚本中$#、$0、$1、$@、$*、$$、$?
    linux定时删除历史日志文件实现方式--shell脚本
    Long转换为date
    java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
    2016年新年伊始
    linux下环境搭建
  • 原文地址:https://www.cnblogs.com/reasonzzy/p/11128719.html
Copyright © 2020-2023  润新知