美文网首页云原生
四 必备Docker知识

四 必备Docker知识

作者: 負笈在线 | 来源:发表于2022-04-28 15:25 被阅读0次

    (一) Docker基础知识

    https://hub.docker.com/

    Docker:它是一个开源的软件项目,在Linux操作系统上,docker提供了一个额外的软件抽象层及操作系统层虚拟化的自动管理机制。

    物理机环境部署应用过程:

    a.安装系统
    b.依赖环境
    c.Java – jdk jre
    d.NodeJS – Node
    e.PHP – PHP
    f.应用程序
    g.加一个物理机—> 提高并发量

    虚拟机环境部署应用过程:
    KVM Xen

    a.把一个物理机虚拟机虚拟成多个机器
    b.把依赖环境打成一个系统的模板

    容器化环境部署应用过程:
    Docker

    a.镜像基础
    b.依赖环境的镜像
    c.Java – Java基础的基础镜像
    d.PHP – PHP基础的基础镜像
    e.根据基础镜像 – 放入自己的代码或者包
    f.生产一个新镜像
    g.程序镜像
    h.镜像 – 按层存储
    i. 启动时间特别,秒级启动
    A – Java  JDK1.8
    a.jar
    B – Java -> JDK1.8
    b.jar

    容器:把自己的应用程序,根据某个依赖的基础镜像,生成一个应用程序镜像

    应用程序镜像,可以运行在任何部署了Docker环境的机器上。

    (二) Docker基本命令

    查看Docker版本

    # docker version
    Client: Docker Engine - Community
     Version:           19.03.4
     API version:       1.40
     Go version:        go1.12.10
     Git commit:        9013bf583a
     Built:             Fri Oct 18 15:52:22 2019
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.4
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.10
      Git commit:       9013bf583a
      Built:            Fri Oct 18 15:50:54 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc8
      GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    
    

    Docker详细信息

    # docker info
    
    Client:
     Debug Mode: false
    
    Server:
     Containers: 8
      Running: 4
      Paused: 0
      Stopped: 4
     Images: 8
     Server Version: 19.03.4
     Storage Driver: overlay2
        # aufs、overlay brtfs
      Backing Filesystem: xfs
      Supports d_type: true
      Native Overlay Diff: true
     Logging Driver: json-file
    # json-file: 存在本地
     Cgroup Driver: cgroupfs
     Plugins:
      Volume: local
      Network: bridge host ipvlan macvlan null overlay
      Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
     Swarm: inactive
     Runtimes: runc
     Default Runtime: runc
     Init Binary: docker-init
     containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
     init version: fec3683
     Security Options:
      seccomp
       Profile: default
     Kernel Version: 4.18.0-80.el8.x86_64
     Operating System: CentOS Linux 8 (Core)
     OSType: linux
     Architecture: x86_64
     CPUs: 2
     Total Memory: 1.764GiB
     Name: k8s-master01
     ID: PRWL:PVRE:U7JQ:LNM6:SNLN:4QDV:URQA:MWQF:XXCE:VOT3:53GL:ECC6
     Docker Root Dir: /var/lib/docker
    # 可以更改的,ssd的硬盘。最后使用一个单独的磁盘进行挂载
     Debug Mode: false
     Registry: https://index.docker.io/v1/
     Labels:
     Experimental: false
     Insecure Registries:
      127.0.0.0/8
     Live Restore Enabled: false
    #生产环境一定要True
    

    搜索镜像:

    # docker search centos
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    centos                             The official build of CentOS.                   6054                [OK]                
    ansible/centos7-ansible            Ansible on Centos7                              130                                     [OK]
    consol/centos-xfce-vnc             Centos container with "headless" VNC session…   116                                     [OK]
    jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
    centos/systemd                     systemd enabled base container.                 84                                      [OK]
    centos/mysql-57-centos7            MySQL 5.7 SQL database server                   77                                      
    imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
    tutum/centos                       Simple CentOS docker image with SSH access      47                                      
    centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   45                                      
    kinogmt/centos-ssh                 CentOS with SSH                                 29                                      [OK]
    pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   12                                      
    guyton/centos6                     From official centos6 container with full up…   10                                      [OK]
    drecom/centos-ruby                 centos ruby                                     6                                       [OK]
    centos/tools                       Docker image that has systems administration…   6                                       [OK]
    pivotaldata/centos                 Base centos, freshened up a little with a Do…   4                                       
    pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   3                                       
    pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   3                                       
    darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
    miko2u/centos6                     CentOS6 日本語環境                                   2                                       [OK]
    blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
    mcnaughton/centos-base             centos base image                               1                                       [OK]
    indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developmen…   1                                       [OK]
    pivotaldata/centos6.8-dev          CentosOS 6.8 image for GPDB development         0                                       
    smartentry/centos                  centos with smartentry                          0                                       [OK]
    pivotaldata/centos7-dev            CentosOS 7 image for GPDB development           0                                       
    # docker search nginx
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                              Official build of Nginx.                        13358               [OK]
    

    Docker拉取镜像:
    拉取一个镜像到本地:

    # docker pull alpine:latest
    latest: Pulling from library/alpine
    df20fa9351a1: Already exists
    Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
    Status: Downloaded newer image for alpine:latest
    docker.io/library/alpine:latest
    

    提交一个镜像到仓库:

    # docker login
    # docker tag calico/pod2daemon-flexvol:v3.11.1 dotbalo/pod2daemon-flexvol:v3.11.1
    # docker push dotbalo/pod2daemon-flexvol:v3.11.1
    

    Docker run:启动一个镜像
    --前台启动

     # docker run -ti centos:8 bash
     [root@55eb31fec62e /]# whoami
     root
    

    -- 后台启动

    # docker run -d centos:8 bash
    # docker ps -a
    

    查看容器日志:

    # docker logs -l docker-ID
    # cd /var/lib/docker/containers/
    

    查看正在运行的容器

    # docker ps
    # docker ps -a
    # docker ps -q
    

    进入容器

    # docker exec -ti docker-ID sh/bash
    # kubectl exec -ti pod-id – sh/bash
    

    拷贝文件

    # docker cp docker-ID:/var/log/testfile ./
    # docker cp ./testfile docker-ID:/var/log/
    

    删除容器

    # docker rm docker-ID
    # docker rm ‘docker ps -aq’
    

    删除镜像

    # docker rmi
    

    查看镜像

    # docker image
    

    启动/停止容器

    # docker start/stop
    

    创新镜像

    # docker build
    

    查看历史

    # docker history
    

    提交变更的镜像

    # docker commit
    

    (三) Dockerfile语法基础

    FROM:继承基础镜像
    MAINTAINER:镜像制作作者信息
    RUN:用来执行shell命令
    EXPOSE:暴露端口号
    CMD:启动容器默认的命令
    ENTRYPIOINT:启动容器真正执行的命令
    VOLUME:创建挂载点
    ENV:配置环境变量
    ADD:复制文件到容器
    COPY:复制文件到容器
    WORKDIR:设置容器的工作目录
    USER:容器使用的用户
    CMD和ENTRYPIOINT 必须要有一个
    CMD可以被覆盖,如果有ENTRYPIOINT的话,CMD就是ENTRYPIOINT的参数。
    ENTRYPIOINT – 》 COMMAND
    CMD –》 arg
    例1:

    LABEL maintainer="test dockerfile"
    LABEL test=dockerfile
    RUN useradd dot
    RUN mkdir /opt/dot
    CMD [ "sh", "-c", "echo 1"]
    #RUN useradd dot && /opt/dot
    

    例2:

    FROM centos:8
    LABEL maintainer="test dockerfile"
    LABEL test=dockerfile
    ENV test_env1 env1
    ENV test_env2 env2
    RUN useradd dot
    RUN mkdir /opt/dot
    #ENTRYPOINT ["echo"]
    ENV env1=test1 env2=test2
    ADD ./index.tar.gz /opt/
    COPY ./index.tar.gz /opt/dot/
    WORKDIR /opt/dot
    USER 1000
    CMD pwd ; ls
    #RUN useradd dot && /opt/dot
    

    (四) 制作Docker镜像及多阶段制作镜像

    制作小镜像:
    一定不要使用centos镜像
    Alpine,busybox,scratch,Debian
    Glibc: node:slim python:slim net
    使用多阶段构建:
    编译操作和生成最终镜像的操作

    # build step
    FROM golang:1.14.4-alpine as builder
    WORKDIR /opt
    
    COPY main.go /opt
    
    RUN go build /opt/main.go 
    
    CMD "./main"
    
    # create real app image
    
    FROM alpine:3.8
    
    COPY --from=builder /opt/main /
    
    CMD "./opt/main"
    
    FROM php:7.1.22-fpm-alpine
    
    RUN apk add --no-cache binutils freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev libc6-compat libxml2 libxml2-dev libmcrypt libmcrypt-dev     libc-dev   icu-dev gettext-dev  openssl-dev bzip2-dev
    
    RUN docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath 
    #RUN docker-php-ext-install gettext 
    RUN docker-php-ext-install mysqli 
    #RUN apk add --no-cache php7-sysvsem php7-pdo_dblib  php7-sockets php-soap php7-xmlrpc
    ##RUN apk add --no-cache php7-sysvsem php7-pdo_dblib  php7-sockets php-soap php7-xmlrpc
    ##RUN apk add --no-cache freetds-dev
    ##RUN docker-php-ext-install pdo_dblib 
    #RUN docker-php-ext-install soap 
    #RUN docker-php-ext-install sockets
    #RUN docker-php-ext-install sysvsem 
    #RUN docker-php-ext-install xmlrpc
    #RUN apk add --no-cache freetds-dev
    #RUN docker-php-ext-install pdo_dblib
    #RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
    #RUN docker-php-ext-install -j$(nproc) gd
    #FROM php:7.1.22-fpm-alpine
    
    #COPY --from=0 /usr/local/lib/php/extensions/no-debug-non-zts-20160303 /usr/local/lib/php/extensions/no-debug-non-zts-20160303
    
    #RUN apk add --no-cache freetds-dev php7-sysvsem php7-pdo_dblib  php7-sockets php-soap php7-xmlrpc binutils freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev libc6-compat libxml2 libxml2-dev libmcrypt libmcrypt-dev     libc-dev   icu-dev gettext-dev  openssl-dev bzip2-dev && cd /usr/local/lib/php/extensions/no-debug-non-zts-20160303 && docker-php-ext-enable *.so  && rm -rf /var/cache/apk/*
    

    相关文章

      网友评论

        本文标题:四 必备Docker知识

        本文链接:https://www.haomeiwen.com/subject/jfldyrtx.html