美文网首页
Docker 体验及总结(2) - 镜像和容器

Docker 体验及总结(2) - 镜像和容器

作者: 千反田爱瑠爱好者 | 来源:发表于2018-08-22 11:26 被阅读6次
https://www.docker.com/

Docker镜像

  • 文件和meta data的集合(root filesystem);
  • 分层:每层可以添加改边删除文件,成为一个新的image;
  • 不同的image可以共享相同的layer;
  • image本身是read-only的。
docker version
docker images

创建

通过Dockerfile创建

more Dockerfile
    FROM ...
    LABEL ...
    RUN ...
    EXPOSE ...
    ENTRYPOINT [...]

docker build -t ywh/redis:latest .

实例:

yum install glibc-static gcc

mkdir hello-world
vim hello.c
    #include<stdio.h>
    int main()
    {
       printf("hello docker\n");
    }
gcc -static hello.c -o hello

vim Dockerfile
    FROM scratch        
    LABEL version="1.0" 
    ADD hello /         
    WORKDIR /           
    ENV cmd "/hello"    
    CMD ["${cmd}"]      

docker build -t dockerhub_id/hello-world .
docker image ls
docker history docker_id

docker run dockerhub_id/hello-world

从Registry拉取(Docker Hub)

docker pull [username/]ubuntu:14.04

从Container打包(不推荐)

docker commit container_name image_name

发布

Docker Hub:https://hub.docker.com/

直接发布

docker login
docker push ywh/hello-world:latest      # 默认发布到Docker Hub

发布Dockerfile

与GitHub仓库关联,把Dockerfile提交到仓库,由Docker Hub服务器建立Image

搭建私有Docker Hub

Server:

docker run -d -p 5000:5000 --restart always --name registry registry:2
curl localhost:5000/v2/_catalog

Client:

vim /etc/docker/daemion.json
    {"insecure-registries": ["localhost:5000"]}
vim /lib/systemd/system/docker.service
    EnvironmentFile=-/etc/docker/daemion.json
service docker restart
docker build -t localhsot:5000/hello-world .

docker push localhsot:5000/hello-world
docker pull localhsot:5000/hello-world

Docker容器

  • 通过Image创建(Copy)
  • 在Image layer之上建立一个Container layer(可读写)
  • 类比面向对象:类和实例
  • Image负责App的存储和分发,Container负责运行App
  • 默认运行完即退出,可指定交互式运行

基本操作

docker run centos
docker container ls -a
docker rm xxx
docker rm $(docker container ls -f "status=exited" -q)     # 批量清理container

docker run -it image_id /bin/bash    # 以shell方式进入docker操作
docker run --name centos-demo -it centos

docker start xxx
docker ps           # 查看运行中的Container
docker exec -it container_id /bin/bash       # 对Container执行命令

docker inspect      # 查看Container详细信息
docker commit       # 把Container重新打包成Image

Dockerfile

RUN:执行命令并创建新的Image Layer

ENTRYPOINT

  • 让容器以应用程序或者服务的形式运行
  • 不会被忽略,必须执行
  • 建议以一个Shell脚本作为ENTRYPOINT

CMD

  • 设置容器启动后默认执行的命令和参数
  • 如果docker run指定了其它命令则CMD会被忽略
  • 如果定义了多个CMD,只有最后一个会执行

Shell格式

RUN apt-get install -y vim
CMD echo "hello docker"
ENV name Docker
ENTRYPOINT echo "hello $name"

Exec格式

RUN ["apt-get", "install", "-y", "vim"]
CMD [ "/bin/echo", "hello docker"]
ENV name Docker
ENTRYPOINT ["/bin/bash", "-c", "/bin/echo hello $name"]

Dockerfile

FROM scratch        # 镜像名称(无依赖)
LABEL version="1.0" # 镜像注释(meta data)
ADD hello /         # 添加文件到镜像中(压缩包会自动解压,也可以使用COPY,更推荐使用ADD)
WORKDIR /           # 指定工作目录(使用绝对路径)
ENV cmd "/hello"    # 添加环境变量(增加程序可维护性)
CMD ["${cmd}"]      # 启动时执行的命令
EXPOSE 5000         # 对外暴露5000端口

部署Container

docker run -it ubuntu 
    apt-get update && apt-get install -y stress
    stress --vm 1 --vm-bytes 5000000M --verbose

vim Dockerfile
    FROM ubuntu
    RUN apt-get update && apt-get install -y stress
    ENTRYPOINT ["/usr/bin/stress"]
    CMD []                      # 作为ENTRYPOINT的参数、在docker run时传入

docker build -t dockerhub_id/stress .
docker run -it dockerhub_id/stress --vm 1

实例:部署一个Flask Web应用

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)

Dockerfile

FROM python:2.7
LABEL maintainer="ywh<yipwinghong0401@gmail.com>"
RUN pip install flask
COPY app.py /app/    # 注意复制文件到目录最后要加上“/”
WORKDIR /app
EXPOSE 5000
CMD ["python", "app.py"]

部署

docker build -t ywh/flask-hello-world
docker image ls
docker run ywh/falsk-hello-world    # 后台运行加上“-d”选项

相关文章

  • Docker 体验及总结(2) - 镜像和容器

    Docker镜像 文件和meta data的集合(root filesystem); 分层:每层可以添加改边删除文...

  • docker命令

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

  • docker常用指令

    1.docker启动、暂停、重启 2.docker 镜像操作 3. docker 容器指令 (1)启动和停止容器 ...

  • Ubuntu18 Install Nginx

    1.使用 Docker 镜像 , pull 镜像 docker pull nginx 2.运行 Docker 容器...

  • 使用第一个容器

    一、容器操作 Docker镜像、容器、及相关配置,都存放在/var/lib/docker目录下 创建容器 停止容器...

  • docker 常用命令

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

  • Docker 常用操作

    Docker环境配置说明 安装Docker 镜像导出 1 通过容器导出 2 通过镜像导出 镜像导入 docker镜...

  • docker相关概念理解

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

  • Docker 常用命令

    docker 容器信息 查看容器版本 2.镜像操作 提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。 2.1...

  • Docker

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

网友评论

      本文标题:Docker 体验及总结(2) - 镜像和容器

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