美文网首页
Docker的镜像和容器

Docker的镜像和容器

作者: 青衣敖王侯 | 来源:发表于2019-11-10 14:07 被阅读0次

    1.docker架构




    2.docker镜像



    3.DIY一个Base Image

    3.1创建一个C程序

    [root@VM_0_5_centos hello-world]# vi hello.c
    #include<stdio.h>
    int main()
    {
    printf("hello docker\n");
    }
    

    3.2编辑一个DockerFile

    [root@VM_0_5_centos hello-world]# vi Dockerfile
    FROM scratch
    ADD a.out /
    CMD ["/a.out"]
    

    FROM表示我们从一个IMAGE之上在构建一个IMAGE,我们这里要创建的是BASE IMAGE,所以使用scratch。接下来我们把a.out放到根目录中去。CMD表示command,执行这个a.out。

    3.3构建一个image

    docker build -t mikezzmeric/zzmhello .
    

    mikezzmeric是docker hub的id,zzmhello是image的名字。.表示在当前目录找这个DockerFile

    3.4看看image

    [root@VM_0_5_centos hello-world]# docker image ls
    REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
    mikezzmeric/zzmhello   latest              5bd84d2ccf89        10 seconds ago      865kB
    <none>                 <none>              1b59162f99e5        14 minutes ago      865kB
    ubuntu                 latest              775349758637        6 days ago          64.2MB
    redis                  latest              de25a81a5a0b        3 weeks ago         98.2MB
    ubuntu                 14.04               2c5e00d77a67        5 months ago        188MB
    hello-world            latest              fce289e99eb9        10 months ago       1.84kB
    [root@VM_0_5_centos hello-world]# docker history 5bd84d2ccf89
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    5bd84d2ccf89        23 seconds ago      /bin/sh -c #(nop)  CMD ["/a.out"]               0B                  
    686c93892c23        15 minutes ago      /bin/sh -c #(nop) ADD file:34fc852f9c01fd251…   865kB               
    [root@VM_0_5_centos hello-world]# 
    

    3.5执行镜像

    [root@VM_0_5_centos hello-world]# docker run mikezzmeric/zzmhello
    hello docker
    

    3.6删除镜像

    docker image rm image的id 或者 docker rmi image的id

    4.认识Container

    4.1查看当前本地正在运行的容器

    docker container ls

    4.2查看正在运行和已退出的容器

    docker container ls -a 或者 使用docker ps -a

    4.3删除container

    docker container rm 指定id 或者 docker rm 指定id

    4.4查看所有container的id

    docker container ls -aq 或者 docker container ls -a | awk {'print$1'}

    4.5删除所有container

    docker rm $(docker container ls -aq)

    4.6查看所有已经退出的容器的ID

    docker container ls -f "status=exited" -q

    5.构建docker镜像

    docker container commit(可以简写为docker commit)



    docker image build (可以简写为docker build)

    6.Dockerfile语法梳理

    6.1 FROM


    一个原则:尽量使用官方的image作为base image

    6.2 LABEL

    定义image的metadata

    MetaData不可少,类似于代码中的注释

    6.3 RUN

    在安装软件的时候经常使用RUN
    每执行一次RUN就是一个新的分层

    6.4 WORKDIR

    设定当前工作目录,类似于Linux中的cd命令

    尽量使用WORKDIR,而不是要使用RUN cd,尽量使用绝对目录

    6.5 ADD and copy

    把本地的文件放到image中去



    6.6 ENV


    尽量使用ENV增加可维护性

    6.7 RUN vs CMD vs ENTRYPOINT



    6.7.1 CMD

    前者输出hello Docker 后者不会

    6.7.2 ENTRYPOINT

    7 镜像的发布

    7.1 登录

    [root@VM_0_5_centos docker]# docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
    Username: mikezzmeric
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    

    7.2发布

    [root@VM_0_5_centos docker]# docker image ls
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    mikezzmeric1/zzm-entrypoint   latest              bf34cf7b2e14        30 minutes ago      220MB
    mikezzmeric/zzmhello          latest              5bd84d2ccf89        2 days ago          865kB
    redis                         latest              de25a81a5a0b        3 weeks ago         98.2MB
    centos                        latest              0f3e07c0138f        5 weeks ago         220MB
    ubuntu                        14.04               2c5e00d77a67        5 months ago        188MB
    hello-world                   latest              fce289e99eb9        10 months ago       1.84kB
    [root@VM_0_5_centos docker]# docker push mikezzmeric/zzmhello:latest
    The push refers to repository [docker.io/mikezzmeric/zzmhello]
    11a9b96284a9: Pushed 
    latest: digest: sha256:a28fbf1671d8f42b6956951645f5fd91947ba54dd5e81c6d44ee6cc547c316d7 size: 527
    

    查看页面


    7.3拉取docker

    [root@VM_0_5_centos docker]# docker pull mikezzmeric/zzmhello
    Using default tag: latest
    latest: Pulling from mikezzmeric/zzmhello
    525184e594e6: Pull complete 
    Digest: sha256:a28fbf1671d8f42b6956951645f5fd91947ba54dd5e81c6d44ee6cc547c316d7
    Status: Downloaded newer image for mikezzmeric/zzmhello:latest
    docker.io/mikezzmeric/zzmhello:latest
    

    7.4 搭建一个私有registry

    docker run -d -p 5000:5000 --restart always --name registry registry:2
    详情可以参考https://hub.docker.com/_/registry
    这样我们的镜像就是往我们自己的服务器上去放,而不是放到docker hub上面啦

    8 Docker File实战

    8.1 创建一个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=5000)
    

    8.2 创建Dockerfile

    FROM python:2.7
    LABEL maintainer="zhouzm"
    RUN pip install flask
    COPY app.py /app/
    WORKDIR /app
    EXPOSE 5000
    CMD ["python", "app.py"]
    

    8.3 构建image

    docker build -t mikezzmeric/flask-hello-demo .
    

    8.4 运行

    docker run -d mikezzmeric/flask-hello-demo

    8.5 与运行中的容器进行交互

    docker exec -it 容器id /bin/bash
    我们的容器里面也装好了python,所以交互命令也可以用以下方式输入:
    docker exec -it dd9ac31eacc955786fc8152fa891a8cfc5448a1db056483c9306de470279fbe2 python
    查看容器的IP地址
    docker exec -it dd9ac31eacc955786fc8152fa891a8cfc5448a1db056483c9306de470279fbe2 ip a

    8.6停掉正在运行的容器

    docker stop containerId

    8.7 用特定的名字启动和关闭容器

    [root@VM_0_5_centos flask-hello-world]# docker run -d --name zzm mikezzmeric/flask-hello-demo
    7a116d84b245714405f7eb45557ab6969894d0be5515c72fe527c8035b4a2bda
    [root@VM_0_5_centos flask-hello-world]# docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    7a116d84b245        mikezzmeric/flask-hello-demo   "python app.py"     2 seconds ago       Up 2 seconds        5000/tcp            zzm
    [root@VM_0_5_centos flask-hello-world]# docker stop zzm
    zzm
    [root@VM_0_5_centos flask-hello-world]# docker ps -a
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                        PORTS               NAMES
    7a116d84b245        mikezzmeric/flask-hello-demo   "python app.py"     42 seconds ago      Exited (137) 23 seconds ago                       zzm
    [root@VM_0_5_centos flask-hello-world]# docker start zzm
    zzm
    [root@VM_0_5_centos flask-hello-world]# docker ps -a
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS               NAMES
    7a116d84b245        mikezzmeric/flask-hello-demo   "python app.py"     51 seconds ago      Up 3 seconds        5000/tcp            zzm
    

    8.8 显示容器的详细信息

    docker inspect 容器id或者名称

    8.9查看容器运行时的一些日志

    [root@VM_0_5_centos flask-hello-world]# docker logs zzm
    

    相关文章

      网友评论

          本文标题:Docker的镜像和容器

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