zoukankan      html  css  js  c++  java
  • Docker 入门学习

    初识docker

    docker在开发和运维中的优势:

    1)更快速的交付和部署

    2)更高效的资源利用

    3)更轻松的迁移和扩展

    4)更简单的更新管理

    docker与虚拟机的比较

    docker的核心概念和安装

    docker镜像:镜像(image)是创建docker容器的基础,类似于虚拟机镜像,一个面向docker引擎的只读模板,包含了文件系统。

    docker容器:(container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用.可以看做一个简易版得到liux系统。可以对容器进行启动,开始,停止,删除。

    docker仓库:docker仓库类似于代码库,是docker集中存放镜像的文件场所。

    镜像

     获取镜像

    $sudo  docker pull  NAME[:TAG]      不显式指定tag号,默认使用latest标签。    e.g.   $ sudo docker pull ubuntu14.04

    指定仓库下载镜像并启动容器:$ sudo docker pull dl.dockerpool.com:5000/ubuntu                $ sudo docker run -t -i ubuntu /bin/bash

    查看镜像信息

    查看本地镜像信息:$ sudo docker images

    修改本地镜像标签:$ sudo docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest

    获取镜像的详细信息,以JSON返回:$ sudo docker inspect 5506de2b643b                   inspect后面+镜像ID

    搜寻镜像

    docker search 命令可以搜索远端仓库中共享的镜像,默认搜索 Docker Hub
    方仓库中的镜像。用法为 docker search TERM 。

    删除镜像

    使用镜像标签删除镜像

    $ sudo docker rmi dl.dockerpool.com:5000/ubuntu

    注意:当同一个镜像拥有多个标签的时候, docker rmi 命令只是删除了该镜像多个标签中的指定
    标签而已,并不影响镜像文件。但当镜像只剩下一个标签的时候就要小心了,此时再使用 docker rmi 命令会彻底删
    除该镜像 。

    创建镜像

    基于已有镜像的容器创建

    命令格式为 docker commit [OPTIONS]
    CONTAINER [REPOSITORY[:TAG]],主要选项包括:
    -a, --author="" 作者信息。
    -m, --message="" 提交消息。
    -p, --pause=true 提交时暂停容器运行。

    e.g.    $ sudo docker commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test        其中a925cb40b3f0 为容器ID

    基于本地模板导入

    $ sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04

    基于dockerfile

    存出和载入镜像

    可以使用 docker save docker load 命令来存出和载入镜像。

    上传镜像

    $ sudo docker tag test:latest user/test:latest
    $ sudo docker push user/test:latest

     

    容器

    新建容器

    Sudo  Docker create  -it  ubuntu:latest

    Sudo  docker start  容器ID

    启动容器

    Sudo docker run -t -i ubuntu  /bin/bash

    Ctrl+p ctrl+q        后台运行   exit  退出

    守护态运行

     

    Sudo  docker  logs  容器ID

     

    终止容器

    Sudo docker stop/restart/start  容器ID

    进入容器

     

    删除容器

    -f

     

    数据管理

    数据卷

     

    数据卷容器

    1)创建一个数据卷容器dbdate 然后创建一个数据卷挂载到 /dbdata

     

    数据备份

     

    网络基础配置

     

    使用dockerfile创建镜像

    Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像。

     基础结构

    一般而言,dockerfile分为字部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令。
    # This dockerfile uses the ubuntu image
    #VERSION 2 - EDITION 1
    #Author:docker_user
    #Command format: Instruction [arguments/command]
    
    #第一行必须指定基础镜像
    FROM shc-harbor-dev.hpeswlab.net/itsma/itom-itsma-opensuse-base:2017.04.26
    
    #维护者信息
    MAINTAINER docker_user docker_user@email.com
    
    #镜像的操作指令     每运行一次RUN命令,镜像添加新的一层,并提交。
    RUN echo "deb http:// archive.ubuntu.com" >> /etc/apt/sources.list
    RUN apt-get update && apt-get install -y nginx
    RUN echo "
    daemon off;" >> /etc/nginx/nginx.conf
    
    #容器启动时执行指令
    CMD /usr/sbin/nginx

     指令

    1.FROM

    第一条指令必须为FROM指令。如果同个Dockerfile中创建多个镜像,可以使用多个FROM指令。

    格式FROM <image> 或 FROM <image>:<tag>

    2.MAINTAINER

    格式为 MAINTAINER <name>,指定维护者信息。

    3.RUN

    格式为RUN <command> 

    每条RUN指令将在当前镜像基础上执行命令,并提交为新的镜像。当命令较长时可以使用来换行。

    4.CMD

    CMD 指令的格式和 RUN 相似,也是两种格式:

    • shell 格式:CMD <命令> 
    • exec 格式:CMD ["可执行文件", "参数1", "参数2"...] 
    • 参数列表格式:CMD ["参数1", "参数2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

     5.EXPOSE

    告诉docker服务端容器暴露的端口号,供互联系统使用。使用-p指定主机端口映射。

    EXPOSE  22 80  8443

    docker run -d -p 127.0.0.1:33301:22 centos6-ssh

    6.ENV

    格式为ENV <key> <value>

    指定环境变量

    7.ADD

    格式ADD <src>  <dest>

    该命令将复制指定的<src>到容器的<dest>.其中<src>可以是Dockerfile所在目录的一个相对路径(文件和目录);也可以是URL。

    8.COPY

    格式为COPY <src> <dest>

    复制本地主机的<src>至 容器<dest>,目标路径不存在时会自动创建。当使用本地目录为源目录时,推荐使用COPY。

    9.ENTRYPOINT

    container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条

    ENTRYPOINT没有CMD的可替换特性。

    10.VOLUME

    可以将本地文件夹或者其他container的文件夹挂载到container中。

    VOLUME ["/data1","/data2"]

    11.USER

    格式为USER daemon

    指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。

    12.WORKDIR

    格式为WORKDIR  /path/to/workdir

    切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效

    WORKDIR /a

    WORKDIR b

    WORKDIR c

    最终:/a/b/c

    13.ONBUILD

    格式为ONBUILD [ INSTRUCTION]

    ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行.当创建的镜像作为基础镜像时所执行的操作指令。

    创建镜像

    docker build[选项] 路径

    指定dockerfile所在路径为/tmp/docker_buider/ ,并且希望 生成镜像标签为build_repo/first_image :

    $sudo docker build -t    build_repo/first_image     /tmp/docker_builder/

    e.g.   Dockerfile

    FROM shc-harbor-dev.hpeswlab.net/itsma/itom-itsma-opensuse-base:2017.04.26
    
    
    # set proxy
    ENV http_proxy @{http.proxy}
    
    
    #install wget
    RUN zypper --non-interactive install wget tar
     && zypper clean
    
    # install Nodejs 6.91
    RUN wget http://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.gz -P /app 
     && tar -vzxf /app/node-v6.9.1-linux-x64.tar.gz -C /app 
     && rm -rf /app/node-v6.9.1-linux-x64.tar.gz
    
    
    #set node environment
    ENV NODE_HOME /app/node-v6.9.1-linux-x64/bin
    ENV PATH $NODE_HOME:$PATH
    ENV http_proxy ""
    
    RUN mkdir -p /pv/itsma/conf /app/yaml_output /app/config-service/yamls  /itsma-certificate/upload  /itsma-certificate/bundle
    
    COPY configure-ui.tar.gz /app/
    #COPY smarta-admin-ui.tar.gz /app/
    COPY configure-backend.jar /app/config-service/configure-backend.jar
    #COPY /var/vols/itom/core/suite-install/itsma/services/sm/*.yaml /app/config-service/yamls/
    COPY configmap_property.json /app/yaml_output
    COPY sm-post-pod.yaml /app/config-service/yamls/
    COPY run.sh /app
    COPY ssl.sh /app
    
    RUN tar -C /app -xzf /app/configure-ui.tar.gz 
        && rm -rf /app/configure-ui.tar.gz 
        && chmod 500 /app/run.sh 
        && chmod 755 /app/ssl.sh 
    
    
    # copy smart admin page
    #RUN cp /app/smarta-admin-ui/* /app/configure-ui/dist/
    
    # for security
    RUN groupadd itsma_config -g 1999 
    && useradd itsma_config -u 1999 -g 1999 
    && chown -R itsma_config:itsma_config /app 
    && echo "root:bmVlZGNoYW5nZWQ=" | chpasswd 
    && echo "itsma_config  ALL=NOPASSWD: /usr/bin/ln"  >> /etc/sudoers
    
    EXPOSE 8080
    
    WORKDIR /app
    
    USER itsma_config
    
    CMD ["/app/run.sh"]
    View Code
  • 相关阅读:
    深入探究分布式锁
    Java的类加载器有几种?什么是双亲委派机制?
    Java的Arrays.sort()方法到底用的什么排序算法
    什么是SPI
    Go语言学习笔记(八)golang 操作 Redis & Mysql & RabbitMQ
    Go语言学习笔记(七)杀手锏 Goroutine + Channel
    Go语言学习笔记(六)net & net/http
    Go语言学习笔记(五)文件操作
    Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
    Go语言学习笔记(三)数组 & 切片 & map
  • 原文地址:https://www.cnblogs.com/gaojy/p/7121270.html
Copyright © 2011-2022 走看看