zoukankan      html  css  js  c++  java
  • dockerfile

    dockerfile自动构建docker 镜像

    # dockerfile 组成部分
    1. 基础镜像信息   FROM centos:6.9
    2. 制作镜像操作指令  RUN yum install openssh_server -y
    3. 容器启动执行命令  CMD ["/bin/bash"]
    
    # dockerfile 常用命令
    docker logs 查看日志(容器夯不住)
    docker stop 容器ID  # 停止容器
    docker start 容器ID # 启动
    1. FROM 指定基础镜像
    2. MAINTAINER 指定维护者信息,可以没有
    3. LABLE  描述,标签
    4. RUN  所有的命令前面要加
    5. ADD  会自动解压,添加脚本文件
    6. WORKDIR  设置当前工作目录(在脚本中添加,每次进入容器后默认的目录)
    7. VOLUME  设置卷,关在主机目录
    8. EXPOSE  指定对外的端口 -p 随机端口
    9. CMD  指定容器启动后要做的事情
    ############# 其他命令 ##################
    1. COPY  复制文件,不会解压
    2. ENV   环境变量
    3. ENTRYPOINT 容器启动后执行的命令,无法被替换
    
    # 排错
    容器启动了,有的服务起了,有的没起?
    # 手动进入容器调试脚本
    docker run -it centos6.9_ssh_nginx:v4 /bin/bash
    # 正在运行的容器, docker exec 进入排错
     
    '''
    VOLUMN /usr/share/nginx/html
        VOLUMN : 每启动一个容器,都会随机创建一个卷
        作用: 使用卷,可以将目录里的内容持久化,容器删了,卷还在,数据就在
    EXPOSE 22 80
    	EXPOSE: 做随机端口映射
    ENTRYPOINT ["/bin/bash","init.sh"]
    	ENTRYPOINT: 不允许覆盖初始启动命令(先用CMD,测试好了再用ENTRYPOINT)
    用户自定义密码
        # echo "$SSH_PWD"|passwd --stdin root
        ENV SSH_PWD 123456  # 设置默认的环境变量
        启动命令要带参数: docker run -d -e "SSH_PWD = 123" -P centos6.9_ssh_nginx:v8
    为docker容器添加一个健康检查机制
    	HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD /bin/bash /opt/test.sh
    '''
    vi /opt/tesh.sh
    #!/bin/bash
    cat /var/run/nginx.pid
    if [ $?==0 ];then
    echo 0
    exit 0
    else
    echo 1
    exit 1
    fi
    
    

    例一:单个服务

    手动构建一遍,然后写dockerfile 
    # dockerfile 放在同一的目录下面
    mkdir /opt/dockerfile
    mkdir centos6.9_ssh
    # 写dockerfile
    vim dockerfile
    FROM centos:6.9
    RUN curl -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN yum install openssh-server -y
    RUN service sshd restart
    RUN echo '12345'|passwd --stdin root
    CMD ["/usr/sbin/sshd","-D"]
    
    # dockerfile 写完以后进行build
    docker build -t centos6.9_ssh:v2 /opt/dockerfile/centos6.9_ssh
        
    # 镜像创建成功,启动容器进行测试
    docker run -d -p 1033:22 centos6.9_ssh:v2
            
    '''
    不同的RUN命令 可以用 &&  连接起来一次性执行
    '''
    

    例二: 多个服务

    vim dockerfile
    FROM centos:6.9
    RUN curl -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN yum install openssh-server nginx -y
    RUN service sshd restart
    RUN echo '12345'|passwd --stdin root
    ADD init.sh /init.sh  # 将宿主机上的init文件拷贝到容器 /init.sh中 
    CMD ["/usr/sbin","/init.sh"]
    
    # build
    docker build -t centos6.9_ssh_nginx:v4 
    # 测试
    docker run -d -p 2028:22 -p 85:80centos6.9_ssh_nginx:v4
    docker ps -a -l
    测试ssh 连接, ps -ef|nginx
    

    通过dockerfile, 制作一个kodexplorer 网盘docker 镜像

    # nginx + php -fpm (httpd + php)
    # 先手动装一遍,然后写dockerfile 
    1. 先启动基础容器
    docker rm -f `docker ps -a -q`
    docker run -it -p 80:80 centos:6.9
    2. 改源
    3. 装php ,会自动将apach 装好
    yum install php -y
    4. 起服务就可以放php代码
    service httpd start  # 默认站点目录在 /var/www/html/
    cd /var/www/html
    rz -E kodexplorer4.40.zip
    unzip kodexplorer4.40.zip
    chown -R apache:apache .
    yum install php-gd php-mbstring -y
    service httpd restart
    5. dockerfile 
    FROM centos:6.9
    RUN yum install php unzip php-gd php-mbstring -y
    WORKDIR /var/www/html
    # rz -E kodexplorer4.40.zip  这里从网上下载
    ADD kodexplorer4.40.zip .
    RUN unzip kodexplorer4.40.zip
    RUN chown -R apache:apache .
    ADD init.sh /init.sh
    CMD ["/bin/bash","/init.sh"]
    
    # dockerfile 写好以后build
    docker build -t kod:v1 .
    # 镜像启动容器
    docker run -d -p 88:80 kod:v1
    
    # 启动脚本
    vim init.sh
    #!/bin/bash
    service httpd restart
    tail -F /var/log/httpd/access_log
    '''
    还可以在dockerfile 中加健康检查
    '''
    

    docker 镜像分层

    # 查看记录
    docker image history centos6.9_ssh_nginx:v3
    # 导出docker 镜像
    docker save centos6.9_ssh_nginx:v3 > docker_centos6.9_ssh_nginx.tar.gz
    # 将文件传输到另一台服务器
    scp -rp docker_centos6.9_ssh_nginx.tar.gz 10.0.0.61:/root
    # 导入镜像
    docker load -i docker_centos6.9_ssh_nginx.tar.gz
    # 分层原理
    1. 和宿主机共用内核 Kernel
    2. Debian or Centos etc.  # 一层镜像
    3. openssh_server   # 两层镜像
    4. nginx    # 三层镜像
    -- 一个镜像至少有一层
    -- centos 被多个镜像引用,只保存一份
    -- 镜像从最底层开始导入,最终合并成
    -- cd /var/lib/docker/image/overlay2/layerdb 
    #!!! 因为通过parent找到父层,所以每次修改dockerfile 要放在最底下,尽量走cache 
    分层好处: 复用,节省磁盘空间,相同的内容只加载一份到内存
              修改dockerfile后,重建速度快
    实现: 通过特殊的文件系统实现 overlayFS
    

    容器间的互联

    # 容器间相互访问
    # 进入容器,用ssh 连接另外一个容器
    yum install openssh_clients  
    docker run -it --link 容器名:web centos6.9_ssh_nginx
    ping web  
    # --link 在hosts 文件中自动加一行
    -- ssh root@web
    -- link 单向的,架构越后面的服务越先起,像数据库等
    

    使用docker 运行zabbix-server

    # 下载相关的包
    for n in `ls *.tar.gz`;do docker load -i $n;done
    
    docker run --name mysql-server -t 
    	-e MYSQL_DATABASE="zabbix" 
        -e MYSQL_USER="zabbix" 
        -e MYSQL_PASSWORD="zabbix_pwd" 
        -e MYSQL_ROOT_PASSWORD="root_pwd" 
        -d mysql:5.7 
        -- character-set-server=utf8 --collation-server=utf8_bin
    ....
    

    docker 私有仓库

    # registry.tar.gz  镜像
    docker load -i registry.tar.gz 
    # 启动容器 registry
    docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
    # 上传镜像到私有仓库
    1. 给镜像打标签
    docker tag 镜像名 10.0.0.7:5000/镜像名zabbix/zabbix-server-mysql:latest        
    2. 传到私有仓库
    docker push 10.0.0.7:5000/镜像名zabbix/zabbix-server-mysql:latest    
    # 上传成功以后就可以拉镜像了
    docker run -d 10.0.0.7:5000/镜像名zabbix/zabbix-server-mysql:latest
    
    # 镜像仓库加认证,带basic 认证的registry
    docker rm -f `docker ps -a -q`
    yum install httpd-tools -y
    mkdir /opt/registry-var/auth/ -p
    htpasswd -Bbn octivia 123 >> /opt/registry-var/auth/htpasswd
    # 现在只能登录私有仓库才能上传镜像
    docker login 10.0.0.7:5000
        
    # 查看私有仓库有哪些镜像
    10.0.0.7:5000/v2/_catalog
    # 看某镜像有几个版本
    10.0.0.7:5000/v2/镜像名/tags/list
    # 删除私有仓库镜像(命令行不行)
    手动进入registry 仓库中
    docker exec -it 仓库ID /bin/sh
    rm -rf /var/lib/registry/docker/registry/v2/repositories/zabbix/zabbix-java-gateway  # 只删除了镜像的索引
    registry garbage-collect /etc/docker/registry/config.yml  # gc回收
    
    '''
    如果出现http错误,要改配置文件
    resolve:
    vim /etc/docker/daemon.json
    {
    "insecure-registries":["10.0.0.7:5000"]
    }
    systemctl restart docker
    
    '''
    
  • 相关阅读:
    vscode添加python文件头模板
    解决Win平台VSCode中Python在控制台输出中文乱码的问题
    Windows系统解决VSCode终端无法输入问题
    python中pip安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))…………或无法pip install packname安装依赖包
    GET和POST的本质区别
    文件名排序
    乱码加密解密
    jQuery.validator 自定义验证消息
    Oracle查询某个表被那些存储过程引用
    note4
  • 原文地址:https://www.cnblogs.com/Afrafre/p/11432826.html
Copyright © 2011-2022 走看看