登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 372|回复: 0

教你两小时入门Docker

[复制链接]

163

主题

163

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2019-1-31 04:21:14 | 显示全部楼层 |阅读模式 来自 江苏徐州
xBcZV2d5tzcwlfUI.jpg c0gkgK0jjJm0GH00.jpg

DtG0p0gCVFR6A4yG.jpg

1、0Docker 的应用场景跟利益我就不逐一先容了,这些你都不知道应该重新学下 Docker,大概来听课学习!直接上安装教程:


2、0Docker安装




体系情况:docker最低支持centos7且在64位平台上,内核版本在3.10以上
版本:社区版,企业版(包罗了一些收费服务)


官方版安装教程(英文)
http://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after-using-the-convenience-script


博主版安装教程:


# 安装docker
yum install docker
# 启动docker 
systemctl start/status docker 
# 检察docker启动状态
docker version 



设置加快器



简介:DaoCloud 加快器 是广受接待的 Docker 工具,办理了国内用户访问 Docker Hub 迟钝的题目。DaoCloud 加快器联合国内的 CDN 服务与协议层优化,成倍的提拔了下载速率。


DaoCloud官网:
http://www.daocloud.io/mirror#accelerator-doc


# 一条下令加快(记得重启docker)
curl -sSL http://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io



3、0Docker底子下令



docker --help(中文注解)


Usage:
docker [OPTIONS] COMMAND [arg...]

       docker daemon [ --help | ... ]

       docker [ --help | -v | --version ]



A
self-sufficient runtime for containers.



Options:



  --config=~/.docker              Location of client config files  #客户端设置文件的位置

  -D, --debug=false               Enable debug mode  #启用Debug调试模式

  -H, --host=[]                   Daemon socket(s) to connect to  #保卫历程的套接字(Socket)毗连

  -h, --help=false                Print usage  #打印利用

  -l, --log-level=info            Set the logging level  #设置日记级别

  --tls=false                     Use TLS; implied by--tlsverify  #

  --tlscacert=~/.docker/ca.pem    Trust certs signed only by this CA  #信托证书署名CA

  --tlscert=~/.docker/cert.pem    Path to TLS certificate file  #TLS证书文件路径

  --tlskey=~/.docker/key.pem      Path to TLS key file  #TLS密钥文件路径

  --tlsverify=false               Use TLS and verify the remote  #利用TLS验证长途

  -v, --version=false             Print version information and quit  #打印版本信息并退出



Commands:

    attach    Attach to a running container  #当前shell下attach毗连指定运行镜像

    build     Build an image from a Dockerfile  #通过Dockerfile定制镜像

    commit    Create a new image from a container's changes  #提交当前容器为新的镜像

    cp    Copy files/folders from a container to a HOSTDIR or to STDOUT  #从容器中拷贝指定文件大概目次到宿主机中

    create    Create a new container  #创建一个新的容器,同run 但不启动容器

    diff    Inspect changes on a container's filesystem  #检察docker容器变革

    events    Get real time events from the server#从docker服务获取容器实时势件

    exec    Run a command in a running container#在已存在的容器上运行下令

    export    Export a container's filesystem as a tar archive  #导出容器的内容流作为一个tar归档文件(对应import)

    history    Show the history of an image  #展示一个镜像形成汗青

    images    List images  #列出体系当前镜像

    import    Import the contents from a tarball to create a filesystem image  #从tar包中的内容创建一个新的文件体系映像(对应export)

    info    Display system-wide information  #表现体系相干信息

    inspect    Return low-level information on a container or image  #检察容器具体信息

    kill    Kill a running container  #kill指定docker容器

    load    Load an image from a tar archive or STDIN  #从一个tar包中加载一个镜像(对应save)

    login    Register or log in to a Docker registry#注册大概登岸一个docker源服务器

    logout    Log out from a Docker registry  #从当前Docker registry退出

    logs    Fetch the logs of a container  #输出当前容器日记信息

    pause    Pause all processes within a container#停息容器

    port    List port mappings or a specific mapping for the CONTAINER  #检察映射端口对应的容器内部源端口

    ps    List containers  #列出容器列表

    pull    Pull an image or a repository from a registry  #从docker镜像源服务器拉取指定镜像大概库镜像

    push    Push an image or a repository to a registry  #推送指定镜像大概库镜像至docker源服务器

    rename    Rename a container  #重定名容器

    restart    Restart a running container  #重启运行的容器

    rm    Remove one or more containers  #移除一个大概多个容器

    rmi    Remove one or more images  #移除一个或多个镜像(无容器利用该镜像才可以删除,否则必要删除相干容器才可以继承大概-f逼迫删除)

    run    Run a command in a new container  #创建一个新的容器并运行一个下令

    save    Save an image(s) to a tar archive#生存一个镜像为一个tar包(对应load)

    search    Search the Docker Hub for images  #在docker
hub中搜刮镜像

    start    Start one or more stopped containers#启动容器

    stats    Display a live stream of container(s) resource usage statistics  #统计容器利用资源

    stop    Stop a running container  #制止容器

    tag         Tag an image into a repository  #给源中镜像打标签

    top       Display the running processes of a container #检察容器中运行的历程信息

    unpause    Unpause all processes within a container  #取消停息容器

    version    Show the Docker version information#检察容器版本号

    wait         Block until a container stops, then print its exit code  #截取容器制止时的退出状态值



Run 'docker COMMAND --help' for more information on a command.  #运行docker下令在资助可以获取更多信息



docker search  hello-docker  # 搜刮hello-docker的镜像
docker search centos # 搜刮centos镜像
docker pull hello-docker # 获取centos镜像
docker run  hello-world   #运行一个docker镜像,产生一个容器实例(也可以通过镜像id前三位运行)
docker image ls  # 检察当地全部镜像
docker images  # 检察docker镜像
docker image rmi hello-docker # 删除centos镜像
docker ps  #列出正在运行的容器(假如创建容器中没有历程正在运行,容器就会立刻制止)
docker ps -a  # 列出全部运行过的容器记载
docker save centos > /opt/centos.tar.gz  # 导出docker镜像至当地
docker load 5000/tcp   brave_fermi
#宿主机ip:32768 映射容器的5000端口

# 检察容器日记信息
docker logs -f cfd  # #不中断表现log

# 也可以通过-p参数指定映射端口
docker run -d -p 9000:5000 training/webapp python app.py



打开欣赏器访问服务器的9000端口, 内容表现 Hello world!表现正常启动


(假如访问失败的话,查抄本身的防火墙,以及云服务器的安全组)


4、使用dockerfile定制镜像



镜像是容器的底子,每次实行docker run的时间都会指定哪个镜像作为容器运行的底子。我们之前的例子都是利用来自docker hub的镜像,直接利用这些镜像只能满意肯定的需求,当镜像无法满意我们的需求时,就得自定制这些镜像。


# 镜像的定制就是定制每一层所添加的设置、文件。假如可以吧每一层修改、安装、构建、操纵的下令都写入到一个脚本,用脚原来构建、定制镜像,这个脚本就是dockerfile。
# Dockerfile 是一个文本文件,其内包罗了一条条的指令(Instruction),每一条指令 构建一层,因此每一条指令的内容,就是形貌该层应当怎样构建。



参数详解


FROM scratch #制作base image 底子镜像,只管利用官方的image作为base image
FROM centos #利用base image
FROM ubuntu:14.04 #带有tag的base image

LABEL version=“1.0” #容器元信息,资助信息,Metadata,雷同于代码解释
LABEL maintainer=“[email protected]"

#对于复杂的RUN下令,制止无用的分层,多条下令用反斜线换行,合成一条下令!
RUN yum update && yum install -y vim \
    Python-dev #反斜线换行
RUN /bin/bash -c "
source $HOME/.bashrc;echo $HOME

WORKDIR /root #相称于linux的cd下令,改变目次,只管利用绝对路径!!!不要用RUN cd
WORKDIR /test # 假如没有就主动创建
WORKDIR demo # 再进入demo文件夹
RUN pwd     # 打印效果应该是/test/demo

ADD and COPY 
ADD hello /  # 把当地文件添加到镜像中,吧当地的hello可实行文件拷贝到镜像的/目次
ADD test.tar.gz /  # 添加到根目次并解压

WORKDIR /root
ADD hello test/  # 进入/root/ 添加hello可实行下令到test目次下,也就是/root/test/hello 一个绝对路径
COPY hello test/  # 等同于上述ADD结果

ADD与COPY
   - 优先利用COPY下令
    -ADD除了COPY功能另有解压功能
添加长途文件/目次利用curl或wget

ENV # 情况变量,尽大概利用ENV增长可维护性
ENV MYSQL_VERSION 5.6 # 设置一个mysql常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}” 



进阶知识(相识)


VOLUME and EXPOSE 
存储和网络

RUN and CMD and ENTRYPOINT
RUN:实行下令并创建新的Image Layer
CMD:设置容器启动后默认实行的下令和参数
ENTRYPOINT:设置容器启动时运行的下令

Shell格式和Exec格式
RUN yum install -y vim
CMD echo ”hello docker”
ENTRYPOINT echo “hello docker”

Exec格式
RUN [“apt-get”,”install”,”-y”,”vim”]
CMD [“/bin/echo”,”hello docker”]
ENTRYPOINT [“/bin/echo”,”hello docker”]


通过shell格式去运行下令,会读取$name指令,而exec格式是仅仅的实行一个下令,而不是shell指令
cat Dockerfile
    FROM centos
    ENV name Docker
    ENTRYPOINT [“/bin/echo”,”hello $name”]#这个仅仅是实行echo下令,读取不了shell变量
    ENTRYPOINT  [“/bin/bash”,”-c”,”echo hello $name"]

CMD
容器启动时默认实行的下令
假如docker run指定了其他下令(docker run -it [image] /bin/bash ),CMD下令被忽略
假如界说多个CMD,只有末了一个实行

ENTRYPOINT
让容器以应用步伐或服务情势运行
不会被忽略,肯定会实行
最佳实践:写一个shell脚本作为entrypoint
COPY docker-entrypoint.sh /usr/local/bin
ENTRYPOINT [“docker-entrypoint.sh]
EXPOSE 27017
CMD [“mongod”]

[root@master home]# more Dockerfile
FROm centos
ENV name Docker
#CMD ["
/bin/bash","-c","echo hello $name"]
ENTRYPOINT ["
/bin/bash","-c","echo hello $name”]



5、发布到堆栈



5.1 docker hub共有镜像发布



docker提供了一个雷同于github的堆栈docker hub,官方网站(需注册利用)
http://hub.docker.com/


# 注册docker id后,在linux中登录dockerhub
    docker login

# 留意要包管image的tag是账户名,假如镜像名字不对,必要改一下tag
    docker tag chaoyu/centos-vim peng104/centos-vim
    # 语法是:  docker tag   堆栈名   peng104/堆栈名

# 推送docker image到dockerhub
    docker push peng104/centps-cmd-exec:latest

# 去dockerhub中查抄镜像
# 先删除当地镜像,然后再测试下载pull 镜像文件
    docker pull peng104/centos-entrypoint-exec



5.2 私有堆栈



docker hub 是公开的,其他人也是可以下载,并不安全,因此还可以利用docker registry官方提供的私有堆栈


用法详解:
http://yeasy.gitbooks.io/docker_practice/repository/registry.html


# 1.下载一个docker官方私有堆栈镜像
    docker pull registry
# 2.运行一个docker私有容器堆栈
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry  registry
    -d 背景运行 
    -p  端口映射 宿主机的5000:容器内的5000
    -v  数据卷挂载  宿主机的 /opt/data/registry :/var/lib/registry 
    registry  镜像名
    /var/lib/registry  存放私有堆栈位置
# Docker 默认不答应非 HTTPS 方式推送镜像。我们可以通过 Docker 的设置选项来取消这个限定
# 3.修改docker的设置文件,让他支持http方式,上传私有镜像
    vim /etc/docker/daemon.json 
    # 写入如下内容
    {
        "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
        "insecure-registries":["192.168.11.37:5000"]
    }
# 4.修改docker的服务设置文件
    vim /lib/systemd/system/docker.service
# 找到[service]这一代码地区块,写入如下参数
    [Service]
    EnvironmentFile=-/etc/docker/daemon.json
# 5.重新加载docker服务
    systemctl daemon-reload
# 6.重启docker服务
    systemctl restart docker
    # 留意:重启docker服务,全部的容器都会挂掉

# 7.修改当地镜像的tag标志,往本身的私有堆栈推送
    docker tag docker.io/peng104/hello-world-docker 192.168.11.37:5000/peng-hello
    # 欣赏器访问http://192.168.119.10:5000/v2/_catalog检察堆栈
# 8.下载私有堆栈的镜像
    docker pull 192.168.11.37:5000/peng-hello



6、实例演示



编写dockerfile,构建本身的镜像,运行flask步伐。


确保app.py和dockerfile在同一个目次!


# 1.预备好app.py的flask步伐
    [root@localhost ~]# cat app.py
    from flask import Flask
    app=Flask(__name__)
    @app.route('/')
    def hello():
        return "hello docker"
    if __name__=="__main__":
        app.run(host='0.0.0.0',port=8080)
    [root@master home]# ls
    app.py  Dockerfile

# 2.编写dockerfile
    [root@localhost ~]# cat Dockerfile
    FROM python:2.7
    LABEL maintainer="温而新"
    RUN pip install flask
    COPY app.py /app/
    WORKDIR /app
    EXPOSE 8080
    CMD ["python","app.py"]

# 3.构建镜像image,找到当前目次的Dockerfile,开始构建
    docker build -t peng104/flask-hello-docker .

# 4.检察创建好的images
    docker image ls

# 5.启动此flask-hello-docker容器,映射一个端供词外部访问
    docker run -d -p 8080:8080 peng104/flask-hello-docker

# 6.查抄运行的容器
    docker container ls

# 7.推送这个镜像到私有堆栈
    docker tag  peng104/flask-hello-docker   192.168.11.37:5000/peng-flaskweb
    docker push 192.168.11.37:5000/peng-flaskweb



以上内容盼望资助到各人,有必要可以添加下方二维码进群交换学习新技能。

假如你想和PHP大神交换加微信,拉你入群

假如你想得到学习资料加微信,送你资源

MgwUgcj6pgJw6CAw.jpg 扫码关注菲菲
php资源免费送!
COME  BABY
UN7hR95k02Wn7cnO.jpg




上一篇:Rancher2.1从集群搭建到Pipeline摆设完备教程
下一篇:ProxmoxVE之5.3集群安装及利用ceph
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-18 13:42 , Processed in 0.061081 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表