美文网首页
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 常用命令

    批量删除镜像和容器 删除无用中间镜像 以docker root 进入容器 查看docker 容器耗费资源

  • docker相关概念理解

    Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。 Docker 容器(...

  • Docker命令及实战

    常用Docker命令 docker容器信息 镜像操作 镜像搜索 镜像下载 删除镜像 容器操作 提示:对于容器的操作...

  • [技术探索]Docker学习笔记

    镜像与容器 docker中容器和镜像的关系是什么?docker的整个生命周期有三部分组成:镜像(image)+容器...

  • Docker

    [TOC] 使用 Docker 镜像 下载镜像 列出镜像 构建镜像 删除本地镜像 操作 Docker 容器 容器是...

  • Docker:使用和制作镜像(Dockerfile)

    摘要:Docker 镜像和容器 镜像是类class,容器是实例化的类,镜像是文件,容器是进程 先有镜像后有容器,一...

  • docker命令

    镜像、容器基本操作 1、获取镜像docker pull 2、运行容器docker run docker run -...

  • Docker的三个基本概念(镜像、容器,仓库)

    镜像(image)容器(Container)仓库(repository) docker镜像: Docker 镜像,...

  • docker常用操作

    下载docker镜像 查看docker镜像 搜索docker镜像 开启docker容器 查看全部docker实例 ...

  • docker学习

    docker镜像 docker容器 docker仓库 安装docker docker版本 docker分为社区版和...

网友评论

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

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