s3 Docker的镜像和容器

Docker技术里最为基础的两大概念:镜像和容器。镜像的 获取方式:从registry拉取,从Dockerfile构建;容器的基本操作

1 Docker架构和底层技术简介

Docker Platform

  • Docker提供了一个开发,打包,运行app的平台
  • 把app和底层infrastructure隔离开来

Docker Engine

  • 后台进程(dockerd)
  • REST API Server
  • CLI接口(docker)

Docker Architecture

底层技术支持

  • Namespaces:做隔离pid,net,ipc,mnt,uts
  • Control groups:做资源限制
  • Union file systems:Container和image的分层

2 Docker Image概述

Image 是文件和 meta data的集合(root filesystem)

分层的,并且每一层都可以添加改变删除文件,成为一个新的image

不同的image可以共享相同的layer

Image本身是read-only的

Image的获取

Build from Dockerfile

Pull from Registry

3 Container

通过Image创建(copy)

在Image layer之上建立一个container layer(可读写)

类比面向对象:类和实例

Image负责app的存储和分发,Container负责运行app

[[email protected] ~]# docker ps -aq
41085d1b95c0
abb8db5ee1c5
b1b0babbe76a
c1b9dbf8fc48
d5c6d17741c0

批量删除
[[email protected] ~]$ docker rm $(docker container ls -aq)
4e540bbeeeb7
5f1c4f401024
6d3466972716
06db5785577c
32f005c8b20b
[[email protected] ~]$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED NAMES

删除已经退出的容器
[[email protected] ~]# docker rm $(docker ps -f "status=exited" -q)
41085d1b95c0
abb8db5ee1c5
b1b0babbe76a
c1b9dbf8fc48
d5c6d17741c0

构建自己的Docker镜像
docker container commit  # 提交修改后的容器为镜像
docker image build = docker build

docker ps -aq 批量删除

4 Dockerfile语法

FROM

FROM scratch    #制作base image

FROM centos    #使用base image

FROM ubuntu:14.04

FROM尽量使用官方的image作为base image!

LABEL    标签描述

LABEL maintainer="fadewalk"

LABEL version="1.0"

LABEL description="This is description"

LABEL Metadata不可少!

RUN

RUN yum update && yum install-y vim\

python-dev#反斜线换行

RUN apt-get update && apt-get install-y perl\

pwgen --no-install -recommends && rm -rf\

/var/lib/apt/lists/* #注意清理cache

RUN /bin/bash -c ‘source $HOME/.bashrc;echo $HOME‘

RUN为了美观,复杂的RUN用反斜线换行

避免无用分层,合并多条命令成一行

WORKDIR

WORKDIR /root

WORKDIR /test#如果没有会自动创建test目录

WORKDIR demo

RUN pwd #输出结果应该是/test/demo

用WORKDIR,不要用RUN cd!

尽量使用绝对目录!

ADD and COPY

ADD hello /

ADD test.tar.gz /     #添加到根目录并解压

WORKDIR /root

ADD hello test/        #/root/test/hello

WORKDIR /root

COPY hello test/

ADD or COPY 大部分情况,COPY优于ADD!

ADD 除了COPY还有额外功能(解压)

添加远程文件/目录使用curl或者wget

ENV

ENV MYSQL_VERSION 5.6    #设置常量

RUN apt-get install-y mysql-server= "${MYSQL_VERSION} "\

&& rm -rf /var/lib/apt/lists/*    #引用常量

尽量使用ENV增加可维护性

VOLUME and EXPOSE

(存储和网络)

https://github.com/docker-library/mysql/blob/master/5.7/Dockerfile

https:/docs.docker.com/engine/reference/builder/#cmd

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

CMD:设置容器启动后默认执行的命令和参数

ENTRYPOINT:设置容器启动时运行的命令

Shell和Exec格式

Shell格式

RUN apt-get 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"]

CMD and ENTRYPOINT

CMD

◆容器启动时默认执行的命令

◆如果docker run指定了其它命令,CMD命令被忽略

◆如果定义了多个CMD,只有最后一个会执行

ENTRYPOINT

◆让容器以应用程序或者服务的形式运行

◆不会被忽略,一定会执行

◆实践:写一个shell脚本作为entrypoint

COPY docker-entrypoint.sh /usr/local/bin/

ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 27017

CMD [“mongod"]

5 镜像的发布

[[email protected] localhost hello-world]$ 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:

Password:

[ [email protected] localhost hello-world]$ docker push fadewalk/hello-world:latest

The push refers to repository [ docker. io/fadewalk/hello-worl]

e9b1612d382b: Pushed latest: digest: sha256: db345c850b25406fb24a0d7151e73155d9d1489f22bd8b182b0c010de2d4c5d7 size:527

https://github.com/smartbgp/dockerfiles

私有仓库搭建

参考官方文档

Docker Registry

This image contains an implementation of the Docker Registry HTTP API V2 for use with Docker 1.6+.Se github.com/docker/distribution for more details about what it is.

$docker run-d-p 5000:5000 --restart always --name registry registry:2

Now,use it from within Docker:

拉取私有仓库镜像

[[email protected] hello-world]$ docker build -t 10.75.xx.222:5000/hello-world.

Sending build context to Docker daemon 847.9kB Step 1/3:FROM scratch Step 2/3:ADD hello/

--->8ff0b72f198c Step 3/3:CMD["/hello]

-->Running in df848216f04a Removing intermediate container df848216f04a

--->e97f8b5f0981

Successfully built e97f8b5f0981

Successfully tagged 10.75.44.222:5000/hello-world:latest

push到私有仓库

[[email protected] hello-world]$ docker push 10.75.xx.222:5000/hello-world

[[email protected] hello-world]$ sudo more /etc/docker/daemon.json

|"insecure-registries":["10.75.xx.222:5000]}

验证api

6 Dockerfile 练习1

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)

FROM python:2.7

LABEL maintainer="fade"

RUN pip install flask

COPY app.py /app/

WORKDIR /app

EXPOSE 5000

CMD ["python", "app.py"]

docker build -t kevin/flask-hello-world .

# build 一个容器

在创建容器过程中(失败的时候),可以通过中间态的容器id,查看中间态的容器

docker exec -it 11a767d3a588 python

#                中间态容器id

docker inspect 5f6ab6f95518    # 查看容器

docker logs 5f6ab6f95518  # 查看 执行日志

7 Dockerfile 练习2

压力测试软件

stress --vm 1 --vm-bytes 500000M --verbose

创建压力测试image

FROM ubuntu

RUN apt-get update && apt-get install -y stress

ENTRYPOINT ["/usr/bin/stress"]  # 创建容器就会执行 类似init

CMD []   # 创建好后执行的命令,类似 rc.local

# 传入的参数

分配内存。

当只设置内存时,虚拟内存跟前者一样

docker run --memory=200M kevin/ubuntu-stress --vm 1 --verbose

#                                                         显示过程

设置  --cpu-shares 为占CPU资源的(%)相对权重

docker run --cpu-shares=10 --name=test1 xiaopeng163/ubuntu-stress --cpu 1

stress:info:[1] dispatching hogs:1 cpu,0io,0 vm,0 hdd

原文地址:https://www.cnblogs.com/wenyule/p/9925978.html

时间: 2024-10-31 12:05:16

s3 Docker的镜像和容器的相关文章

docker 修改镜像和容器的存放路径(最新自己实践了第三种方法)

原文:docker 修改镜像和容器的存放路径(最新自己实践了第三种方法) docker info :查看docker的存储等相关信息. 将路径修改至挂载磁盘中 前提:磁盘已挂载成功 方法一: 1.停止docker 服务 service docker stop 2.备份数据到新的存放路径 cp -r /var/lib/docker/* /mnt/docker 3.备份 /var/lib/docker 路径 mv /var/lib/docker /var/lib/dockerbak} 4.创建软连接

Docker的镜像、容器和仓库

Docker本身的镜像是构建在其本身的文件系统之上的,Docker有很多种类的文件系统,Docker所支持的文件系统有以下几种:Aufs.devicemapper.btrfs和VFS,其中前三种是联合文件系统,可以支持分层,可以快速迭代,可以回滚.VFS 不支持.平时用的最多的是aufs 和devicemapper.Aufs(advanced multilayered unification filesystem), 直译过来就是高级分层联合文件系统,做为一种Union FS ,它支持将不同的目

Docker的镜像和容器

Docker image详细介绍 在之前的介绍中,我们知道docker images 是docker的三大组件之一. docker把下载的 images 存储到docker主机上,如果一个 image 不在主机上,docker会从一个镜像仓库下载,默认的仓库是  DOCKER HUB  公共仓库. 接下来将介绍更多关于docker images 的内容,包括: 使用和管理本地主机上的 images 创建一个基础的 images 上传 images 到docker hub (公共 images 仓

docker(二)镜像和容器常用命令

一.镜像操作 1.搜索镜像 可以直接在Docker Hub 直接搜索镜像,当然也可以使用命令来搜索. docker search 名称 docker search tomcat 2.拉取镜像 docker pull 镜像名 #拉取redis3.0 docker pull redis:3.0 3.查看镜像列表 Docker镜像保存在/var/lib/docker docker images docker images -a docker images -q(显示id) 4.删除镜像 docker

腾讯云CentOS 7.6 64位之docker的镜像和容器练习

本文使用的Docker是社区版,版本是19.03.2,这个版本是本文写时的最新版. 首先总结下容器和镜像的概念: 容器是用镜像创建的,一个镜像可以创建多个容器. 一般来说,一个容器就是一个应用,把应用在容器中运行称之为应用容器化. 删除镜像的时候,如果由这个镜像创建的容器还存在则会删除失败. 容器和镜像的关系就是:容器是镜像的实例化的可运行实体. 以下是我的练习内容: 1. 拉取镜像  docker pull centos:latest  或者按照版本拉取:docker pull centos:

docker安装 镜像和容器的操作

目录 1 docker 介绍 3 centos安装docker 2 容器和镜像 3 加速配置 4 镜像操作 5 容器操作 1 docker 介绍 # 1 虚拟化--->虚拟机,硬件虚拟化 # 2 docker:centos系统-->大约90m # 3 开源项目,诞生于2013---->17年以后-->两年多的时间 # 4 基于go语言实现的--->docker ce:免费的 docker ee:收费 # 5 轻量级的操作系统虚拟化解决方案 # 6 Docker 的基础是 Li

依据已有的条件分析了Docker的镜像与容器的存储结构

http://www.techbang.com/users/miss872misruls?=for http://www.techbang.com/users/miss851mislhqg http://www.techbang.com/users/miss547misdqxr http://www.techbang.com/users/miss576misxilr http://www.techbang.com/users/miss752miscuzx http://www.techbang.

docker镜像与容器存储结构分析

注意:转载请注明出处:http://www.programfish.com/blog/?p=9 Docker是一个开源的应用容器引擎,主要利用linux内核namespace实现沙盒隔离,用cgroup实现资源限制. Docker 支持三种不同的镜像层次存储的drivers: aufs.devicemapper.btrfs ; Aufs: AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite several di

docker实战之centos6.5上安装、镜像、容器相关操作

学习docker前,理解以下几个概念有助于更好的使用docker.镜像,容器,仓库.镜像,就是一个操作系统环境,里面只有你需要的几个应用程序,如apache,mysql,php之类,只读模板.容器,从镜像创建的运行实例.可视为一个简易环境中和其中运行的应用.仓库,存放镜像的地方.学过git的同学可能更容易理解. 一.安装docker时,增加第三方源epel如果是centos7,下载并安装这个软件包#wget http://mirror.hust.edu.cn/epel/beta/7/x86_64